2017-05-02 124 views
0
public static void main(String[] args) throws IOException { 
    Scanner scan = new Scanner(System.in); 
    int i=0; 
    int arr[] = new int[10]; 
    while(scan.hasNext()){ 
     arr[i++] = scan.nextInt(); 
     System.out.println("sud"); 
    } 
    System.out.println("hello"); 
} 

} 

如果输入是1 2 3 4 5那么它会打印5次。 sud意味着while循环正在工作,但它不会进入System.out.println("hello");行或超出它。while循环后的执行流程java

+2

也许是因为:scan.hasNext():) –

+0

我猜如果(i> = arr.length)break;'。在'while'循环中插入这个_first_语句。 –

+0

输入1,2,3,4,5后输入 - 你会看到'sud' 5次之后按Ctr + Z,如果你在windows上其他可能是Ctrl + D在Linux上。 – SomeDude

回答

1

由于您正在读取System.in中的数据,因此当您在控制台模式下运行时,hasNext()会等待您输入更多数据。

为了告诉Scanner没有更多输入,您需要关闭输入流。在Windows上,它是Ctrl + Z其次是输入。在UNIX上,它是Ctrl + D

如果您将输入放入文件并重定向您的程序以从文件中读取,您的代码也可以工作。

注意:您需要保护您的代码免受输入太多数据的用户的影响。将i < arr.length添加到循环条件中,否则当最终用户输入第11个数字时,您的代码将停止并出现异常。

while(i < arr.length && scan.hasNext()) { 
    ... 
} 
+0

感谢它的工作。可以告诉我如何在没有此问题的情况下输入未知数量的输入。 – SudSwastik

+0

@SudSwastik如果你不想限制项目的数量,使用一个容器,当你添加项目时它会增长,比如'List list = new ArrayList <>()'。你可以在循环中调用'list.add(scan.nextInt())',然后用Ctrl + Z/Ctrl + D结束输入,列表将包含用户输入的所有项目。 – dasblinkenlight

0

也许增加一个if语句来检查特定的输入停止服用输入(打破循环)

while(scan.hasNext()){ 
    String tmp = scan.next(); 
    if (tmp.equals("exit"))  
     break; 
    else { 
    arr[i++] = Integer.parseInt(tmp); 
    System.out.println("sud"); 
    } 
} 
System.out.println("hello"); 

输入:

1 2 3 exit 

OUTPUT:

sud 
sud 
sud 
hello 
+0

这可能会抛出'IndexOutOfBoundsException'。 –

+0

@OusmaneMahyDiaw这是因为数组已经被初始化为10,假设输入不会超过10。 –