Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/147.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中使用异常_Java_Exception - Fatal编程技术网

在java中使用异常

在java中使用异常,java,exception,Java,Exception,我想在代码的底部添加一个异常 if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){ return 0; 我想做的是:如果上面的“if”为真,我将抛出一个异常,从现在开始检查代码,而不是执行“return0” if (locationNeighbor(map,i1+1,j1,i1,j1)==2&&map2[i1+1][j1]==-1){ //down

我想在代码的底部添加一个异常

if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){
        return 0;
我想做的是:如果上面的“if”为真,我将抛出一个异常,从现在开始检查代码,而不是执行“return0”

if (locationNeighbor(map,i1+1,j1,i1,j1)==2&&map2[i1+1][j1]==-1){ //down
            map2[i1+1][j1]=counter;
            return distance(map,i1+1,j1,i2,j2,map2,counter+1);
        }
        if (locationNeighbor(map,i1,j1+1,i1,j1)==3&&map2[i1][j1+1]==-1){ 
然后,如果“如果”发生,我会检查这个区域的代码

 if (locationNeighbor(map,i1,j1+1,i1,j1)==3&&map2[i1][j1+1]==-1){ //right
        map2[i1][j1+1]=counter;
        return distance(map,i1,j1+1,i2,j2,map2,counter+1);
    }
最后一次我检查

if (locationNeighbor(map,i1,j1-1,i1,j1)==4&&map2[i1][j1-1]==-1){ //left
        map2[i1][j1-1]=counter;
        return distance(map,i1,j1-1,i2,j2,map2,counter+1);
    }
这是我的密码

public static int distance(int[][] map, int i1, int j1, int i2, int j2, int[][]map2, int counter) {
    if(legalNeighbor(map,i1,j1,i2,j2)==true){ // if its 1 step before the end
        map2[i2][j2]=counter; // put the last number
    }
        if (locationNeighbor(map,i1-1,j1,i1,j1)==1&&map2[i1-1][j1]==-1){ //up
            map2[i1-1][j1]=counter;
            return distance(map,i1-1,j1,i2,j2,map2,counter+1);
        }
        if (locationNeighbor(map,i1+1,j1,i1,j1)==2&&map2[i1+1][j1]==-1){ //down
            map2[i1+1][j1]=counter;
            return distance(map,i1+1,j1,i2,j2,map2,counter+1);
        }
        if (locationNeighbor(map,i1,j1+1,i1,j1)==3&&map2[i1][j1+1]==-1){ //right
            map2[i1][j1+1]=counter;
            return distance(map,i1,j1+1,i2,j2,map2,counter+1);
        }
        if (locationNeighbor(map,i1,j1-1,i1,j1)==4&&map2[i1][j1-1]==-1){ //left
            map2[i1][j1-1]=counter;
            return distance(map,i1,j1-1,i2,j2,map2,counter+1);
        }
        print(map2);
        if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){
            return 0;
        }
        else{
            int x=map2[i2][j2];
            return x;
        }
}

除了例外,这可能吗?

任何事情都有可能,但这可能不是一个好主意。例外应该是真正的例外,而不是可能发生的事情

不仅如此,它们的性能也很昂贵。您不应该使用异常来访问

为什么名为
isLegalNeighbor
的方法返回的真/假值不够

这里有两种方法:一种是计算距离,另一种是确定合法邻居。把他们分开。一个方法应该做好一件事,它的名字应该清楚这是什么


还有一点:我发现你的代码很难读。如果我是你的话,我会开始更多地思考风格以及如何编写更具可读性的代码。

忘记例外,这可能不是你想要的。首先解释一下你的目标是什么。这在您的代码中是完全不可见的

奇怪的是,第一个if语句在map2中设置了一个值,但没有返回。这意味着该值可能会被下面的代码覆盖。这是有意的吗

我还认为这一行有一个错误:

if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){
第四个参数i1应该是i2,对吗

为了使代码更具可读性,应该引入具有有意义名称的实例字段和方法。如果你的导师强迫你使用静态方法和无意义的名字,如i1等,你应该解雇他/她:-D

我的意思是:

// I chose weird names because I really don't know what's in these arrays
// You should make it clear from the name what it represents
private int[][] fooBar;
private int[][] bazBop;

public int distance(int fromX, int fromY, int toX, int toY, int counter) {
    if (legalNeighbor(fromX, fromY, toX, toY) == true) { // if its 1 step before the end
        bazBop[toX][toY] = counter; // put the last number
    }
    int newX = fromX - 1;
    int newY = fromY;
    if (locationNeighbor(newX, newY, fromX, fromY) == 1 && bazBop[newX][newY] == -1) { //up
        bazBop[newX][newY] = counter;
        return distance(newX, newY, toX, toY, counter + 1);
    }
    // ...
}

抛出新异常()
?或者甚至定义自己的自定义异常类。那么您希望在最后一块代码中抛出一个异常来代替“return0”吗?或者代替每次返回?我以前从未使用过异常,我对如何使用有点困惑,我确实希望异常出现在最后一个区块提示中:我更担心您大量使用绝对无意义的索引名,如i1、j1、。。。等等我可以使用一个简单的for循环,但您在这里所做的是令人兴奋的。“i1”所代表的事物与“i2”的含义之间可能存在巨大的语义差异。但在句法上,它们非常接近;这使得阅读代码的难度是必要的10倍。说真的,如果您想改进代码,请改进这些变量的名称。对于方法名,使用isLegalNeighbor()作为返回bool的方法;i2(或j…)表示“y轴”。所以至少叫他们x或y,这是学校作业,我只需要代码就行了。返回0的问题是一旦我这样做了。代码被卡住了,不能按照我的要求继续运行。它是一个双数组,需要从a点到B点,所以我的代码的问题。下面是一张图片,说明您有一个比抛出异常更大的问题。“只需要代码就能工作”——我以为学校的工作是为了学习如何正确地做事。如果你仔细想想,我的评论仍然会对你有帮助。但是我的代码是分开的,合法的邻居检查i1、j1和i2、j2是否是邻居的,如果是,这意味着我画出了路径。然后我有4个“if”-locationNeighbor(map,i1-1,j1,i1,j1)=1这个检查邻居是否在下一个if是检查邻居是否在下一个if是检查邻居是否在下(如果它等于2),3是检查右侧,4是检查左侧一旦我这样做,我知道邻居的位置在哪里。现在我有了一个满是-1的地图,然后我开始标记路径,以确保我不会进入无休止的递归,我用“计数器”标记了我所处的区域,它计算步长不,它没有被分割。该方法名为“距离”,但您正在检查最近的邻居。充其量也令人困惑;最坏的情况是错的。