首页 新闻 搜索 专区 学院

while(true)与while(scanner.hasNext()),runtime error?

0
悬赏园豆:5 [已解决问题] 解决于 2014-07-21 19:40

当用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));
        } 
        ………
        ………

 

这是为什么捏?

duanguyuan的主页 duanguyuan | 初学一级 | 园豆:136
提问于:2013-10-24 11:20
< >
分享
最佳答案
0

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();
        }
    }

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-10-24 13:09

不好意思,说错啦,是运行时错误……

那么为什么必须加

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 | 园豆:136 (初学一级) | 2013-10-24 15:26

@duanguyuan: 对不起,不一样,C 中没有 Scanner 对象,在你代码中 Scanner 在使用前可能需要使用 hasNext 来检测是否可用。

我只所以这样改代码,是因为你自己提供的第二份代码中有这样的语句:while(cin.hasNext()) ,所以我对比了你的两份代码,然后断定 runtime error 不是因为你写了 while(true),而是因为你没调用 Scanner 的 hasNext 方法。

Launcher | 园豆:45045 (高人七级) | 2013-10-24 15:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册