嗨!我正在使用java并且在有空白输入时想要终止循环时以某种方式具有无限输入

时间:2018-07-07 19:05:46

标签: java

我正在使用Java,并且当我想在有空白输入时终止循环时,以某种方式具有无限输入 这是我的代码:我希望有人可以解释我的错误

import java.util.Scanner;

public class Main1{

   /*int i=0;*/

   private static Customer[] getCustomer(){
      Scanner scanner = new Scanner(System.in);
      Customer[] customers = new Customer[100];

      int i=0;
      while((scanner.hasNextLine())){
          customers[i++] = new Customer(i,scanner.nextDouble());
      }

      /*int j;

      for(j=1;j<=i;j++){
          customers[j] = new Customer(j,sc.nextDouble());*/

      return customers;
  }

  public static void main(String[] args){

      int j;

      for(j=1;j < getCustomer().length;j++) {

          /*Customer[] customer = new Customer(getCustomer());*/

          System.out.println(getCustomer());
      }
   }
}

2 个答案:

答案 0 :(得分:0)

在为有限输入流(例如文件)创建hasNextLine的情况下,创建了Scanner类的Scanner。然后用于检查流是否已结束,在这种情况下,程序应停止要求输入。

但是,在总是可以有新输入的意义上,System.in(又名stdin,又名控制台)是无限的,因此它总是有下一行,并且hasNextLine返回{{ 1}}。

您需要检查的条件仅仅是输入本身是否等于空字符串,这意味着用户输入了空行。

答案 1 :(得分:0)

您不应在每次调用getCustomer时创建一个新的扫描仪。为此,由于getCustomer()获取客户列表,因此在循环外仅应调用一次。

您的getCustomer()方法应该创建一个List而不是固定长度的数组,并且应该返回该列表。正如@neo所说,只要用户输入空行,就退出输入循环。

然后,您在main()中的循环将遍历列表并打印客户。像

for ( Customer c : customers ) {
   System.out.println( c );
}

这也可以通过使用流的单个语句来完成。

当然,这假定客户具有toString()重写,该toString()重写返回适当的字符串来标识客户。