2013-10-14 40 views
1

基本上我试图编写一个程序,它将从用户读取一组有限的值,然后打印平均值。 (我知道如何做计算,所以我会离开这些。)Inifnite loop while reading numbers

我遇到了循环的逻辑端的问题。

我明白,这里的每个人都会更喜欢我尝试过但我是新来的循环,我很难理解循环逻辑。

我正在尝试为我的班级做这个任务,但老师正在通过材料飞行,并且在提问时根本没有帮助。当我向一个问题寻求帮助时,他说尽力而为,我会相应地对它进行评分?

老实说,我不知道从哪里开始。

import java.util.Scanner; 

public class P4Point5 { 
public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    String Status = ""; 
    int count = 0; 

    while (in.hasNext()) { 
     count++; 
}   

    for (int i = 0; i < count; i++) { 
//Do calculations here? 
    } 
} 
} 
+0

当我尝试其他方法来从中做出一个无限循环的用户得到的值。 – NewToJava

+0

我认为它会从keuboard读取一个数字,但永远不会到达for循环。 – Cold

+0

我的问题是没有读取数字。我只是不知道如何结束循环,以便它可以用数字来在任另一个循环,或只是一个方法执行计算来计算平均值等 – NewToJava

回答

5

你永远不会得到下一个元素:

while (in.hasNext()) 
    count++; 

你永远是1 ST元素,并询问是否有2 第二元素。

你应该使用:

while (in.hasNext()) 
    int next = sc.nextInt(); 

BTW:请避免声明没有大括号。它是万恶的根源。

+0

我之后的括号内实现。我知道把它们排除在外并不是一个好习惯。 线 整数下一= sc.nextInt(); 这将只读取一个数字,并将其设置为下一个,对不对? – NewToJava

+0

@NewToJava阅读文档,你会更好地理解它的功能。 – Maroun

+0

@NewToJava是的,如javadoc中所示http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html#nextInt()'将输入的下一个标记扫描为int 。' –

3

当你阅读的第一次,你不读了,所以hasNext()会留下永远true因为总是会有下一个元素,这是..你正在阅读的当前元素。

一种解决办法是做这样的事情:

String input = null; 
while((input = in.next()) != null) { 
    //... 
} 
0

你可以试试这个:

while (in.nextInt() != 'SOME INT TO STOP LOOP') 
     count++; 

相反的验证每个时间,如果我们有一个输入的数字,我们可以验证所输入的数字是一个停止条件。

+0

如果它应该采取任何值,不会使一个int来停止循环强制某个整数不被允许? – NewToJava

+0

好问题。你可以使用一个负数,或者,更好的是,你可以使用'next()'并且转换给定的字符串,如果它是一个你计数的数字,如果没有,你退出循环。 – Cold

+0

请看这里[http://stackoverflow.com/questions/5439529/determine-if-a-string-is-an-integer-in-java],验证如果是一个整数的好例子。 – Cold