Java没有循环

时间:2015-12-23 07:49:36

标签: java

我敢肯定这会变得愚蠢,但我不能让我做的循环上班,有人可以看看吗?我需要用户输入一个数字,然后在while循环中验证。然后将此数字添加到arraylist并保持循环直到用户输入“-1”。这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

这对你有用。

p

答案 1 :(得分: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 );
        }
   }

如果你真的需要&#34; -1&#34;而且不仅仅是任何负数,请注意将双打与==进行比较的做法很差。使用具有差异的公差。另请注意下面我提供的程序是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;
   }

}