2013-09-13 3 views
2

Я пытаюсь создать программу, которая запрашивает у пользователя значение дозорного значения (значение, которое нужно ввести, когда они хотят закончить список). Затем он просит пользователя ввести цифры до тех пор, пока они не вернут значение дозорного устройства. Затем он вычисляет максимальное количество в списке. Я очень новичок в Java, и всякий раз, когда я запускаю программу, просто запрашивает значение контрольной суммы, а затем ничего не делает (никогда не появляется второй диалог ввода). Я уверен, что это что-то простое, что я делаю неправильно, но я не могу понять. Спасибо за любую помощь.Как использовать несколько входных диалоговых окон (новое для 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); 
    } 
    } 
} 

ответ

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

Да, думаю, вы объяснили это даже лучше, чем мой ответ :) –

+0

Спасибо Эран и Джесси. Эти ответы были именно тем, что я искал. Программа работает отлично. – user2774647

+0

@ user2774647 добро пожаловать в stackoverflow! –

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 ...)

+0

Я был на самом деле уже создал его, используя этот метод, и пытается передать его на использовании всплывающие диалоги, чтобы я мог привыкнуть к их использованию. Первая часть помогла! – user2774647

Смежные вопросы