Java 在线编译器而非命令提示符上遇到运行时错误
我不明白为什么这段java代码在命令提示符下运行良好,而不是在在线编译器中运行,并且出现运行时错误。 我试图在网上找到原因,但没有找到合适的答案 它的获取运行时错误-Java 在线编译器而非命令提示符上遇到运行时错误,java,runtime,Java,Runtime,我不明白为什么这段java代码在命令提示符下运行良好,而不是在在线编译器中运行,并且出现运行时错误。 我试图在网上找到原因,但没有找到合适的答案 它的获取运行时错误- Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1485) at jav
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--;
}
}
}
import java.util.*;
班长
{
公共静态void main(字符串arg[])
{
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
int c1=0,c2=0;
int i;
而(n>0)
{
int l=sc.nextInt();
字符串str=sc.next();
对于(i=0;i0)
System.out.println(“印度”);
否则,如果(c2>0)
System.out.println(“非印度”);
其他的
System.out.println(“不确定”);
c1=0;
c2=0;
n--;
}
}
}
若扫描器有更多数据要扫描,则不检查扫描器,这就是为什么会出现异常
请参阅下面Scanner中定义的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--;
}
}
}
import java.util.*;
班长{
公共静态void main(字符串arg[]){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
int c1=0,c2=0;
int i;
而(n>0){
//检查EOF
如果(!sc.hasNext()){
打破
}
int l=sc.nextInt();
字符串str=sc.next();
对于(i=0;i0)
System.out.println(“印度”);
否则,如果(c2>0)
System.out.println(“非印度”);
其他的
System.out.println(“不确定”);
c1=0;
c2=0;
n--;
}
}
}
您是否向联机编译器提供了stdin的输入?引发异常的行是什么?