我正在使用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());
}
}
}
答案 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()重写返回适当的字符串来标识客户。