while(in.hasNext())用户输入一行字符串后回车,无法结束输入状态 10

这个程序是计算查找相似度的,先由用户输入一个文件名,,然后再由用户输入一行的关键字,比如“cowslikerednike”输入完成后按回车就应该得到计算结果的,但是下面的... 这个程序是计算查找相似度的,先由用户输入一个文件名,,然后再由用户输入一行的关键字,比如“cows like red nike”输入完成后按回车就应该得到计算结果的,但是下面的问题是,按回车后,console依然是等待用户输入状态。问题应该出现在while(input.hasNext()){ 这个循环里了:
package query;
import java.io.*;
import java.util.*;
public class Query {
public static void main(String[] args)throws FileNotFoundException{
System.out.println("please enter a document u want to query: ");
Scanner in = new Scanner(System.in);
String filename = in.next();

Set<String> words = new HashSet<String>();

Scanner input = new Scanner(new File(filename));
input.useDelimiter("[^a-zA-Z]+");
while(input.hasNext()){
words.add(input.next().toLowerCase());
}
System.out.println("unique words is "+words.size());
System.out.println("please enter a query: ");
Set<String> keywords = new HashSet<String>();
while(in.hasNext()){
String s1 = in.next();
System.out.println(s1);
if(s1.equals("exit")) {
break;
}
keywords.add(in.next().toLowerCase());
}
int qIntersectD=0;
for(String word :keywords){
if(words.contains(word)){
qIntersectD++;
}
}
System.out.println(qIntersectD);
double Similarity=0;
Similarity=qIntersectD/(Math.sqrt(words.size())*Math.sqrt(keywords.size()) );
System.out.println("the similarity between query and document is : "+Similarity);

System.out.println("unique words is "+words.size());
}
}
展开
 我来答
百度网友7fbbe4a
推荐于2018-05-15 · TA获得超过501个赞
知道答主
回答量:19
采纳率:100%
帮助的人:9.1万
展开全部

Java API 中的解释

public boolean hasNext()

Returns true if this scanner has another token in its input. This method may block while waiting for input to scan. The scanner does not advance past any input.

如果没有输入的话,会被阻塞而不是退出。

至于怎么刷题……至少不应该用hasNext()与hasNextLine()来判断停止。所以一般题目一开始就输入会有多少行等等。要是笔试题(那种卷子类的)没有的话,直接写LeetCode类的函数吧,别管输入输出了哈哈哈。

给自己一个地方180
2017-07-01
知道答主
回答量:13
采纳率:0%
帮助的人:1.3万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1220063925
2016-07-07
知道答主
回答量:3
采纳率:0%
帮助的人:3350
展开全部
按Ctrl+Z结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
forward郭郭
2018-08-19
知道答主
回答量:1
采纳率:0%
帮助的人:867
展开全部
调用完方法后要在while (in.hasNext() ){ 调用方法 之后放有break;}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NoGrief
2014-04-23 · TA获得超过253个赞
知道小有建树答主
回答量:304
采纳率:100%
帮助的人:224万
展开全部
打exit就退出输入了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式