Java可视化设计给定一个长度为n(2 <= n <= 105)的整数数组height,表示有n条垂线,x坐标为i的线段高度为height[i] (0 <= height[i] <= 104)。第i条线段的两个端点坐标分别为(i, 0)和(i, height[i])。 找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。代码
时间: 2024-02-13 08:06:33 浏览: 67
以下是一个基于Java Swing的可视化界面的实现,可以让用户输入垂线的高度,然后计算出容器可以储存的最大水量:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class WaterContainerVisualizer extends JFrame implements ActionListener {
private JTextField inputField;
private JTextArea outputArea;
public WaterContainerVisualizer() {
// 设置窗口标题
super("Water Container Visualizer");
// 设置窗口大小
setSize(400, 300);
// 创建并添加输入框和按钮
JPanel inputPanel = new JPanel();
JLabel inputLabel = new JLabel("输入垂线高度:");
inputField = new JTextField(20);
JButton calculateButton = new JButton("计算");
calculateButton.addActionListener(this);
inputPanel.add(inputLabel);
inputPanel.add(inputField);
inputPanel.add(calculateButton);
// 创建输出区域
outputArea = new JTextArea();
outputArea.setEditable(false);
// 将组件添加到窗口中
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(inputPanel, BorderLayout.NORTH);
contentPane.add(new JScrollPane(outputArea), BorderLayout.CENTER);
// 显示窗口
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent evt) {
if (evt.getActionCommand().equals("计算")) {
String input = inputField.getText().trim();
String[] inputs = input.split("\\s+");
int[] heights = new int[inputs.length];
for (int i = 0; i < inputs.length; i++) {
heights[i] = Integer.parseInt(inputs[i]);
}
int maxArea = maxArea(heights);
outputArea.append("容器可以储存的最大水量是:" + maxArea + "\n");
}
}
private int maxArea(int[] heights) {
int maxArea = 0;
int left = 0, right = heights.length - 1;
while (left < right) {
int area = Math.min(heights[left], heights[right]) * (right - left);
maxArea = Math.max(maxArea, area);
if (heights[left] < heights[right]) {
left++;
} else {
right--;
}
}
return maxArea;
}
public static void main(String[] args) {
new WaterContainerVisualizer();
}
}
```
该代码中使用了一个`JFrame`窗口和多个Swing组件,包括`JPanel`、`JLabel`、`JTextField`、`JButton`和`JTextArea`。用户可以在输入框中输入垂线的高度,然后单击“计算”按钮来计算容器可以储存的最大水量。计算结果将显示在输出区域中。
在`actionPerformed`方法中,我们将输入字符串解析为整数数组,并将其传递给`maxArea`方法以计算最大水量。`maxArea`方法实现了一个双指针算法,用于在`O(n)`时间内计算最大水量。
请注意,此代码未处理输入不正确或不完整的情况,这可能导致程序崩溃。在实际应用中,您可能需要添加一些错误检查和异常处理机制。
阅读全文