我不明白为什么这个java代码在命令提示符下工作正常,而不是在在线编译器中并且运行时出错。 我试图在网上找出原因,但没有找到合适的答案。
其getiing运行时错误 -
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at head.main(Main.java:9)
代码是 -
import java.util.*;
class head
{
public static void main(String arg[])
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int c1=0,c2=0;
int i;
while(n>0)
{
int l=sc.nextInt();
String str=sc.next();
for(i=0;i<l;i++)
{
char ch=str.charAt(i);
if(ch=='i'||ch=='I')
c1++;
if(ch=='y'||ch=='Y')
c2++;
}
if(c1>0)
System.out.println("INDIAN");
else if(c2>0)
System.out.println("NOT INDIAN");
else
System.out.println("NOT SURE");
c1=0;
c2=0;
n--;
}
}
}
答案 0 :(得分:0)
如果有更多数据需要扫描,您是否检查过扫描仪,这就是您获得例外的原因。
请参阅下面的扫描仪中定义的throwError方法。
// If we are at the end of input then NoSuchElement;
// If there is still input left then InputMismatch
private void throwFor() {
skipped = false;
if ((sourceClosed) && (position == buf.limit()))
throw new NoSuchElementException();
else
throw new InputMismatchException();
}
在评论中,它表示在达到输入结束时调用它。
正确使用扫描仪总是如下
Scanner scan = new Scanner(inputstream);
while(scan.hasNext()) {
//read data
}
与阅读文件相同,每次尝试阅读时都要检查EOF(文件结尾)。
在你的代码中,可以像下面这样应用纠正。
import java.util.*;
class head {
public static void main(String arg[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int c1 = 0, c2 = 0;
int i;
while (n > 0) {
//check for EOF
if(!sc.hasNext()) {
break;
}
int l = sc.nextInt();
String str = sc.next();
for (i = 0; i < l; i++) {
char ch = str.charAt(i);
if (ch == 'i' || ch == 'I')
c1++;
if (ch == 'y' || ch == 'Y')
c2++;
}
if (c1 > 0)
System.out.println("INDIAN");
else if (c2 > 0)
System.out.println("NOT INDIAN");
else
System.out.println("NOT SURE");
c1 = 0;
c2 = 0;
n--;
}
}
}