我正在尝试创建一个程序,要求用户提供一个标记值(当他们想要结束列表时输入一个值)。然后它要求用户输入数字,直到他们重新输入标记值。然后它计算出列表中的最大数量。我对Java很陌生,每当我运行程序时,只需要发送sentinel值,然后不执行任何操作(从不弹出第二个输入对话框)。我确信这样做很简单,我做错了,但我无法理解。谢谢你的帮助。
import java.util.*;
import javax.swing.JOptionPane;
public class HW1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int number;
int max;
int sentinel;
int count=0;
JOptionPane.showInputDialog("Please enter a sentinel value: ");
sentinel=input.nextInt();
JOptionPane.showInputDialog("Please enter numbers. Enter" + sentinel +" to end.");
number = input.nextInt();
max = number;
while (number!=sentinel){
count +=1;
if (number>max)
max=number;
JOptionPane.showInputDialog("Please enter numbers. Enter" + sentinel +" to end.");
number = input.nextInt();
}
if (count!=0){
JOptionPane.showMessageDialog(null, "The max is:" + max);
}
}
}
答案 0 :(得分:2)
我认为这是一个混乱:
使用输入对话框打开JOptionPane
当选项窗格关闭时,无论放在哪里都会被忽略
然后代码转到此行sentinel=input.nextInt();
等待来自控制台的输入(例如,您需要返回控制台,在那里输入数字然后按回车键,只有这样程序才会前进,它会阻止直到您这样做)
我会将其更改为:
String sentinelInput = JOptionPane.showInputDialog("Please enter a sentinel value: ");
sentinel= Integer.parseInt(sentinelInput);
(对于您期望输入的所有地方重复)
另一种解决方案是
不要使用JOptionPane,而是使用System.out.println
来打印用户输入请求(而不是弹出对话框)。然后,您可以保留现有的input.nextInt()
来电来收集它。
请注意,所有交互都将在控制台中,没有任何弹出对话框(我实际上更喜欢用户体验,而且它也适用于非GUI机器,如Linux终端......)
答案 1 :(得分:2)
您正在混合向程序输入数据的方式。让我们开始吧:
Scanner input = new Scanner(System.in);
上面的行允许您从键盘捕获命令行中的数据。
JOptionPane.showInputDialog("Please enter a sentinel value: ");
此选项窗格正确显示,您输入一个值,然后没有任何反应。这是因为您的程序正在等待在命令行
中输入内容sentinel=input.nextInt();
当你的程序到达上面一行时,input.nextInt()
会停止程序,直到你在命令行中输入一些内容。
正确的方法应该是这样的:
sentinel = Integer.parseInt(JOptionPane.showInputDialog("Please enter a sentinel value: "));
number = Integer.parseInt(JOptionPane.showInputDialog("Please enter numbers. Enter" + sentinel +" value to end."));
并删除:
number = input.nextInt();
sentinel=input.nextInt();