日期:2014-05-20  浏览次数:20743 次

java的从控制台接收数据的程序无法执行完毕(java核心技术上的一个程序)
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class Test {
public static void main(String[] args) {
Set<String> words=new HashSet<String>();
long tatolTime=0;
Scanner sc=new Scanner(System.in);
System.out.println(sc.hasNext());
while(sc.hasNext()){
System.out.println("请输入:");
String word = sc.next();
long callTime=System.currentTimeMillis();
words.add(word);
callTime=System.currentTimeMillis()-callTime;
tatolTime+=callTime;
}
Iterator<String> iter=words.iterator();
for (int i = 1; i <= 10; i++) {
System.out.println(iter.next());
System.out.println("...");
System.out.println(words.size()+tatolTime);
}
}
}


大家看看这个程序,我真的不知道应该怎么样结束这个程序。。。这是核心技术上的程序,我想,应该不会有什么问题吧。。。还请大家给指点一下唉。。。

------解决方案--------------------
我记得好像能这么写

java Test < 1.txt

1.txt里面就是你想输入的东西
------解决方案--------------------
这个程序要是结束了那才怪,首先Scanner sc=new Scanner(System.in);这句会线程阻塞,等到你在控制台上输入,如果你不输入那么程序一直等着,如果你输入的话那么while(sc.hasNext())这句就会触发,同时进入这个死循环了。程序就永远都无法执行完了。
修改意见:
Java code

        while (sc.hasNext()) {
            System.out.println("请输入:");
            String word = sc.next();
            long callTime = System.currentTimeMillis();
            words.add(word);
            callTime = System.currentTimeMillis() - callTime;
            tatolTime += callTime;
            if(words.size() >= 10){
                break;
            }
        }