2015-12-23 4 views
0

Я уверен, что это будет что-то немым, но я не могу заставить себя заняться, пока цикл работает, может кто-нибудь взглянуть, пожалуйста? Мне нужно, чтобы пользователь вводил число, тогда это проверяется в цикле while. Затем это число добавляется в arraylist и продолжает цикл, пока пользователь не войдет в «-1». Вот мой код:Java do while not looping

public void enterValues(Scanner scan, ArrayList<Double> values) { 

    do { 
    System.out.print("Enter value to convert: £"); 
    while (!scan.hasNextDouble()) { 
     System.out.println("Please enter a double"); 
     scan.nextLine(); 
    } 

    values.add(scan.nextDouble()); 
    System.out.print("Value entered. Enter -1 to stop: "); 
    } 

    while (!scan.next().equals("-1")); 

    System.out.println("Values entered. Returning to main menu."); 
    mainMenu(scan, values); 
+0

Я думаю, что 'scan.next()' получит любое значение, а не только целые числа. Позвольте мне проверить это. – markspace

+0

scan.next() читает следующий токен, это действительно строка. – Stultuske

+0

Что вы вводите и выводите консоль? – Berger

ответ

0

Это будет работать на вас.

public void enterValues(Scanner scan, ArrayList<Double> values){ 
    Double dValue= (double) 0; 
    do{ 
     System.out.println("Enter value to convert: £"); 
     dValue= scan.nextDouble(); 
     if(dValue != -1) 
      values.add(dValue); 
    }while(dValue != -1); 

    System.out.println("Values entered. Returning to main menu."); 
    mainMenu(scan, values); 
} 
+1

Сообщите мне, если это сработает для вас. И я надеюсь, что вы хотели это сделать. @ James B –

+0

Спасибо за это, но я не смогу закончить цикл. Ввод -1 аналогичен вводу двойника и не завершает цикл. –

+0

Я запустил вышеуказанный код и зарегистрировался в своей системе и опубликовал его. Он работает для меня. @ James –

0

Это похоже на другой ответ ниже, но немного более идиоматический. Нет необходимости дважды проверять значение ввода. Просто проверьте его один раз и используйте break, чтобы выйти из цикла, если он отрицательный.

public void enterValues(Scanner scan, ArrayList<Double> values) { 

     for(;;) { 
      System.out.print("Enter value to convert: £"); 
      while (!scan.hasNextDouble()) { 
       System.out.println("Please enter a double"); 
       scan.nextLine(); 
      } 
      double input = scan.nextDouble(); 
      if(input < 0) break; 
      values.add(input); 
      System.out.println("Value entered. Enter -1 to stop: "+ values); 
     } 
    } 

Если вам действительно нужно «-1», а не просто отрицательное число, обратите внимание, что это плохая практика, чтобы сравнить двойник с ==. Используйте допуски с разницей. Также обратите внимание ниже, что я предоставляю свой ввод с программой, чтобы сделать SSCCE.

public class ScannerTest 
{ 
    private static final String[] testVectors = { 
     "123\n456\n890\n-1\n", 
    }; 

    public static void main(String[] args) { 
     for (int i = 0; i < testVectors.length; i++) { 
     String testInput = testVectors[i]; 
     Scanner scan = new Scanner(testInput); 
     ArrayList<Double> output = new ArrayList<>(); 
     new ScannerTest().enterValues(scan, output); 
     System.out.println(output); 
     } 
    } 

    public void enterValues(Scanner scan, ArrayList<Double> values) { 

     for(;;) { 
      System.out.print("Enter value to convert: £"); 
      while (!scan.hasNextDouble()) { 
       System.out.println("Please enter a double"); 
       scan.nextLine(); 
      } 
      double input = scan.nextDouble(); 
      if(compareDouble(input, -1.0, 0.00001)) break; 
      values.add(input); 
      System.out.println("Value entered. Enter -1 to stop: "+ values); 
     } 
    } 

    private boolean compareDouble(double d1, double d2, double tolerance) { 
     return Math.abs(d1 - d2) < tolerance; 
    } 

}