当我使用BufferedReader
类以及util类运行我的代码并使用StringTokenizer
类初始化BufferedReader
之外的变量时,它可以正常工作但是当我使用它时它会中断输入第一个String(在代码中)时出现java.util.NoSuchElementException
错误。
import java.util.*;
class spamclas
{
public static void main()
{
Scanner sc=new Scanner(System.in);
int a=0,b=0;
int t=sc.nextInt();
while(t>0)
{
String s=sc.next();
StringTokenizer st=new StringTokenizer(s);
while(st.hasMoreTokens())
{
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
}
System.out.println("a b"+a+" "+b);
t--;
}
}
}
答案 0 :(得分:1)
条件st.hasMoreTokens()
查看下次是否至少一个更多元素并且您拨打st.nextToken()
两次
因此,如果只有一个元素,则条件为true
,但第二个st.nextToken()
会找到任何内容
由于您将1 1
提供给sc.next()
,因此String s
仅为1
(next()
的默认分隔符为空格),因此只有一个数字,第二个nextToken()
将会出现
您最好使用sc.nextLine()
并检查每个数字2 if
:
int t = Integer.parseInt(sc.nextLine()); // nextLine here too to consume return char
while (t > 0) {
String s = sc.nextLine();
StringTokenizer st = new StringTokenizer(s);
a = b = 0;
if (st.hasMoreTokens()) { a = Integer.parseInt(st.nextToken()); }else{ a=0; } //line 18
if (st.hasMoreTokens()) { b = Integer.parseInt(st.nextToken()); }else{ b=0; } //line 19
System.out.println("a : " + a + ", b : " + b);
t--;
}
提示:第18行和第19行可以用三元运算符编写:
a = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;
b = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;
答案 1 :(得分:1)
首先,别担心
问题是当它到达这一行时。
b = Integer.parseInt(st.nextToken());
它是空的。
因为你把.nextToken()放在了它现在是空的。