uva online judge正在返回我找不到的运行时错误

ktecyv1j  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(369)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

6年前关门了。
改进这个问题
我一直在尝试uva的问题100:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&itemid=8&category=3&page=show_problem&problem=36
然而,它一直告诉我,我的代码有运行时错误,我不能在我的最后复制。它在我的控制台上工作得很好。我尝试过其他人的解决方案,但仍然不起作用。我甚至按规定去掉了所有公共方法。
还有什么其他可能的原因,我可以得到这个问题?
这是我的密码:

import java.util.*;

class Main {
    public static void main(String args[]){

        int i =0;
        int j=0;

        Scanner input = new Scanner(System.in);

        i = input.nextInt();
        j = input.nextInt();

        while((i!=0)&&(j!=0))
        {
            int tempMax = 0;
            for(int k =i; k <= j; k++){
                if (tempMax<AlgStep(1,k))
                    tempMax=AlgStep(1,k);
            }

            System.out.println(i + " " + j + " " + tempMax);

            i = input.nextInt();
            j = input.nextInt();

        }

    }

    static boolean isEven(int n){
        if(n%2==0)
            return true;
        else
            return false;
    }

    static boolean isOne(int n){
        if(n==1)
            return true;
        else
            return false;
    }

    static int AlgStep(int count, int n){

        int newCount;
        int m;

        if(isOne(n))
            return count;
        if(isEven(n)){
            m = n/2;
            newCount = count+1;
        }
        else{
            m = (3*n)+1;
            newCount = count+1;
        }
        return AlgStep(newCount, m);                
    }

}
chhkpiq4

chhkpiq41#

读取问题的规范时,它从不表示输入将以0值结束,因此当您尝试读取的数字多于文件中出现的数字时,将出现空指针异常或类似的情况。我建议你用 input.hasNext() 任何地方。

wqsoz72f

wqsoz72f2#

好吧,我做了些调查来帮你。
一个发现是:uva在线评委在帮助你学习编程语言方面非常糟糕。它告诉您有一个运行时错误,但您无法确切地看到发生了什么。
要分析您的问题,您必须稍微更改一下程序设置。
主程序从标准输入流(也称为控制台)读取数据。我假设您没有以正确的格式输入数据。我是说,和uva的格式一样。为了得到准确的结果,您应该将输入数据放入一个文件中。使用规范页中的内容创建一个文本文件(四行中各有两个整数)。
换条线

Scanner input = new Scanner(System.in);

Scanner input = new Scanner(new FileInputStream(args[0]));

然后以输入文件的绝对路径作为第一个程序参数运行程序。例如“java main input.txt”。
然后您将得到以下输出

1 10 20
100 200 125
201 210 89
900 1000 174
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at Main.main(Main.java:29)

问题就在这条线上

i = input.nextInt();

在循环中。在这里,您总是在读取下一个整数,而不管输入文件是否有一个整数。见托尼·克鲁夫特的安瑟。你必须处理好。

相关问题