【问题标题】:How to break while loop when see empty line in Java?在Java中看到空行时如何中断while循环?
【发布时间】:2015-10-23 17:52:51
【问题描述】:

编写一个代码,从标准输入中逐行读取学生成绩列表,直到没有更多行可读取或遇到空行。

但是,无论如何我都无法退出循环。我试着写 Scanner input = new Scanner(input.hasNext()); 否则会中断但无法正常工作

public class NumInput {
  public static void main(String [] args) {
    float min = Float.MAX_VALUE;
    float max = Float.MIN_VALUE;
    float total=0;
    int count=0;
    Scanner input = new Scanner(System.in);
    while (input.hasNext()) {

      float val = input.nextFloat();


      if (val < min) {
          min = val;
      }
      if (val > max) {
         max = val;
      }
      count++; 
      total += val ;
    }
    float average = (float) total / count;
    System.out.println("min: " + min);
    System.out.println("max: " + max);
    System.out.println("The Average value is: " + average);
  }
}

【问题讨论】:

标签: java while-loop


【解决方案1】:

如果它始终是 float 类型,请尝试使用 while(input.hasNextFloat());,而不是 while(input.hasNext());

此外,while(input.hasNextFloat()); 将继续读取用户的输入,直到输入非 float 值(或非 int 值)。所以你可以输入12最后q,然后因为q不是float/int它会退出循环。

解决此问题的更具体方法是执行以下操作:

while(input.hasNextLine()) {
    String command = input.nextLine();
    if(command.equals("")) {
        System.out.println("breaking out of the loop");
        break;
    }
    // rest of the code but make sure to use Float.parseFloat() on the `command`;
}

本文档有很好的示例以及对hasNextFloat()hasNextLine()parseFloat() 的解释:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

【讨论】:

  • 我应该写什么 command= Float.parseFloat();在括号中
  • 您想将command 放入parseFloat() 参数中,它会将commandString 类型)解析为float 并返回该值。所以你会输入类似float f = Float.parseFloat(command);
  • 当我这样做时,Exception in thread "main" java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at sun.misc.FloatingDecimal.parseFloat(Unknown Source) at java.lang.Float.parseFloat(Unknown Source) at NumInput.main(NumInput.java:18) 我在 3 次输入后得到结果
  • while (input.hasNextLine()) { String command = input.nextLine(); if(command.equals(" ")) { System.out.println("breaking out of the loop"); break; } float val = input.nextFloat(); float f = Float.parseFloat(command);
  • 每当您更新代码时,请尝试更新您的实际帖子,以便其他人可以看到。但只需删除最后两行并将其替换为float val = Float.parseFloat(command);。不仅如此,您的if(command.equals(" ")) 只是检查是否输入了空格字符。如果这是所需的检查,那么您可以保留它,但它与您帖子上的描述并不完全匹配,所以只需指出这一点。
【解决方案2】:

要检查空行,您可以使用nextLine 而不是nextFloat 然后与"" 比较,这是工作代码

import java.util.Scanner;

public class NumInput {
  public static void main(String [] args) {
    float min = Float.MAX_VALUE;
    float max = Float.MIN_VALUE;
    float total=0;
    int count=0;
    Scanner input = new Scanner(System.in);
    String str;
    while (input.hasNextLine()) { 

       str = input.nextLine();
       if(str.equals(""))   //Check if it is empty line then break
           break;
      float val = Float.parseFloat(str);  //Convert string to float


      if (val < min) {
          min = val;
      }
      if (val > max) {
         max = val;
      }
      count++; 
      total += val ;
    }
    float average = (float) total / count;
    System.out.println("min: " + min);
    System.out.println("max: " + max);
    System.out.println("The Average value is: " + average);
  }
}

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多