当用while(true)的时候,老是runtime error!
改为while(scanner.hasNext()),则能正常运行。
一个具体的例子:
error的例子:
import java.util.*; public class Main { public static void main(String[] args) { long a,b,c; while(true) { Scanner cin=new Scanner(System.in); a=cin.nextLong(); b=cin.nextLong(); c=cin.nextLong(); if(a==0 && b==0 && c==0) break; System.out.println(RSA(a,b,c)); //cin.close(); } } static long RSA(long a,long n, long mod) { if(n == 0) return 1%mod; if(n == 1) return a%mod; long ans = RSA(a,n>>1,mod); ans = ans*ans; if((n&1) !=0) return (ans*a)%mod; else return ans%mod; } }
运行正常的例子:
……… ……… long a,b,c; Scanner cin=new Scanner(System.in); while(cin.hasNext()) { a=cin.nextLong(); b=cin.nextLong(); c=cin.nextLong(); if(a==0 && b==0 && c==0) break; System.out.println(RSA(a,b,c)); } ……… ………
这是为什么捏?
runtime error 看意思就是指的运行时错误,你怎么能够拿来同编译时错误做比较呢?
public static void main(String[] args)
{
long a,b,c;
while(true)
{
Scanner cin=new Scanner(System.in);
if(!cin.hasNext())
continue;
a=cin.nextLong();
b=cin.nextLong();
c=cin.nextLong();
if(a==0 && b==0 && c==0) break;
System.out.println(RSA(a,b,c));
//cin.close();
}
}
不好意思,说错啦,是运行时错误……
那么为什么必须加
if(!cin.hasNext())
continue;
这两行呢?难道是因为Scanner里有什么猫腻。
以下是C代码,完全类似的程序结构,在运行时就不会报错:
int main() { long int a,b,c; while(1) { scanf("%ld%ld%ld",&a,&b,&c); if(a==0 && b==0 && c==0) break; printf("%ld\n",RSA(a,b,c)); } return 0; }
@duanguyuan: 对不起,不一样,C 中没有 Scanner 对象,在你代码中 Scanner 在使用前可能需要使用 hasNext 来检测是否可用。
我只所以这样改代码,是因为你自己提供的第二份代码中有这样的语句:while(cin.hasNext()) ,所以我对比了你的两份代码,然后断定 runtime error 不是因为你写了 while(true),而是因为你没调用 Scanner 的 hasNext 方法。