Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (还有一种)UVa 3n+;1帮助问题_Java - Fatal编程技术网

Java (还有一种)UVa 3n+;1帮助问题

Java (还有一种)UVa 3n+;1帮助问题,java,Java,我一直在绞尽脑汁想弄明白为什么这是一个“错误的答案”。如果有任何反馈,我将不胜感激 编辑:我重新发布了代码,这个版本最终修复了“运行时错误”,允许数字对之间有多个空格。它现在说的是“错误答案”,但据我所知,我逐字复制了给定的算法,所以我不知所措 谢谢 导入java.io.BufferedReader; 导入java.io.InputStreamReader; 导入java.io.IOException; 公共班机{ 公共静态void main(字符串[]args){ 主矿井=新主矿井(); 我

我一直在绞尽脑汁想弄明白为什么这是一个“错误的答案”。如果有任何反馈,我将不胜感激

编辑:我重新发布了代码,这个版本最终修复了“运行时错误”,允许数字对之间有多个空格。它现在说的是“错误答案”,但据我所知,我逐字复制了给定的算法,所以我不知所措

谢谢

导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.IOException;
公共班机{
公共静态void main(字符串[]args){
主矿井=新主矿井();
我的;
}
公共空间开始(){
BufferedReader sys=新的BufferedReader(新的InputStreamReader(System.in));
字符串[]对;
试一试{
while((pair=sys.readLine().split(“+”)。长度==2){
System.out.println(对[0]+“”+pair[1]+“”+getMax(整数.parseInt(对[0]),整数.parseInt(对[1]);
}
}捕获(IOEX异常){
返回;
}
}
私有字符串getMax(整数a、整数b){
int maxcount,thiscount,num,n;
对于(maxcount=-1,num=Math.min(a,b);num-maxcount)maxcount=thiscount;
}
返回字符串.valueOf(maxcount);
}
}

当(num您可能需要重新考虑如何解析这些行。我相信代码中唯一可能存在运行时错误的行是整数解析行。您假设每个
I
j
都由一个空格分隔。这个问题没有提及一行上有多少空格。

如果您得到了答案,那么如果您的程序在样本上运行,那么问题可能与您使用的是int而不是long这一事实有关


对于3n+1问题,中间值可能会增长到大于int所能处理的值(2147483647),这是判断数据邪恶的常见方式。

我认为UVA判断中最重要的事情是:

  • 获得完全相同的输出。末尾没有额外的行
  • 从不抛出异常,只返回或中断,不输出外部边界参数
  • 输出区分大小写
  • 输出参数应保持问题中所示的空格

  • 这里是Stackoverflow的链接:

    一堵代码墙在这里没有帮助。你能缩小问题的范围吗?它告诉我代码编译并运行良好,但无法解决问题。我真的不知道为什么它会说错误的答案,但那是“Alforthm”位于GETMAX,GETCULL方法中。您是否至少将示例输出与示例输入匹配起来?您需要考虑可能应用于问题并处理它们的任何角落情况。当事情非常复杂时,您无法确定它们,您确实需要测试用例。它为我编译和运行,并给出与示例数据相同的答案。出于某种原因,每当我不将其限制为一个设定值时,它就会给出“运行时错误”。我不知道为什么会发生这种情况,因为我可以继续提供输入,最后以空行结束(如给定的解决方案)它运行得很好。有什么想法吗?他们的示例数据中有一些东西使parseInt()爆炸。可能是一行空格,或者是一行以空格开头。我尝试了很多变化,但仍然得到了错误的答案或运行时错误。您是否尝试过在
    if(line.length()==0)之前添加
    line=line.trim();
    {return;}
    和捕获NumberFormatException?我更新了它以立即获取配对,现在它说“错误答案”。=(至少比运行时错误要好)。我找不到我做错了什么,这让我发疯。谢谢。这似乎解决了运行时错误问题,但现在它说的是“错误答案”有什么想法吗?谢谢你的想法。我试着用long代替int,但结果仍然是我得到了错误的答案。我在网站上找到了一个解决方案(这是第一个问题,应该不难)。看起来这个解决方案只是使用int,并且做了与我的代码相同的事情,但是当我提交他的以确保网站没有被窃听时,它说“接受”。它就在这里
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    
    public class Main {
    
    public static void main(String[] args) {
       Main mine = new Main();
       mine.begin();
    }
    
    public void begin(){
        BufferedReader sys = new BufferedReader(new InputStreamReader(System.in));
        String[] pair;
        try{
            while((pair=sys.readLine().split(" +")).length==2){
                System.out.println(pair[0]+ " " +pair[1] + " " + getMax(Integer.parseInt(pair[0]),Integer.parseInt(pair[1])));
            }
        }catch(IOException ex){
            return;
        }
    }
    
    private String getMax(int a, int b){
        int maxcount,thiscount, num, n;
    
        for(maxcount = -1, num =Math.min(a, b); num <= Math.max(a, b); num++ ){
            for(n = num, thiscount = 1; n!=1; thiscount++){
                if(n%2==0)n=n/2;
                else n = 3*n +1;
            }
            if(thiscount>maxcount) maxcount = thiscount;
        }
        return String.valueOf(maxcount);
    }
    }
    
    while(num<4){
    ...