如何使用多个输入对话框(Java新手)

时间:2013-09-13 00:16:09

标签: java

我正在尝试创建一个程序,要求用户提供一个标记值(当他们想要结束列表时输入一个值)。然后它要求用户输入数字,直到他们重新输入标记值。然后它计算出列表中的最大数量。我对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);
    }
  }
 }

2 个答案:

答案 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();