【问题标题】:How to use multiple Input Dialogs (New to Java)如何使用多个输入对话框(Java 新手)
【发布时间】:2013-09-13 00:16:09
【问题描述】:

我正在尝试创建一个程序,该程序会询问用户一个哨兵值(当他们想要结束列表时输入的值)。然后它要求用户输入数字,直到他们重新输入标记值。然后它会计算出列表中的最大数量。我对 Java 很陌生,每当我运行程序时,只是询问标记值,然后什么都不做(从不弹出第二个输入对话框)。我确定我做错了很简单,但我无法弄清楚。感谢您的帮助。

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);
    }
  }
 }

【问题讨论】:

    标签: java


    【解决方案1】:

    您正在混合向程序输入数据的方式。让我们开始吧:

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

    【讨论】:

    • 是的,认为你解释得比我的回答还要好:)
    • 感谢 Eran 和 Jessai。这些答案正是我想要的。程序现在完美运行。
    【解决方案2】:

    我认为混乱是这样的:

    • JOptionPane 会打开一个输入对话框

    • when the option pane closes, whatever you put there is ignored

    • 然后代码转到这一行sentinel=input.nextInt();

      等待来自控制台的输入(例如,您需要返回控制台,在此处输入数字并按回车键,然后程序才会前进,它会一直阻塞,直到您这样做)

    我会把它改成这样的:

      String sentinelInput = JOptionPane.showInputDialog("Please enter a sentinel value: ");
      sentinel= Integer.parseInt(sentinelInput);
    

    (对您期望输入的所有地方重复)

    另一种解决方案是

    不要使用 JOptionPane,而只是 System.out.println 打印用户输入请求(而不是弹出对话框)。然后,您可以保留现有的input.nextInt() 呼叫来收集它。

    请注意,所有交互都将在控制台中进行,没有任何弹出对话框(在用户体验方面我实际上更喜欢它,而且它也将在非 GUI 机器上工作,例如 linux 终端......)

    【讨论】:

    • 我实际上已经使用这种方法创建了它,并试图将它转移到使用弹出对话框,以便我可以习惯使用它们。第一部分帮助很大!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多