【问题标题】:Find bug in implementation of algorithm that finds minimum of an array of integers查找查找整数数组最小值的算法实现中的错误
【发布时间】:2020-03-05 20:23:13
【问题描述】:

最近,我尝试编写一个搜索数组最小值的 Java 程序。 我尝试以不同的方式编写它,我知道有更简单的方法可以做到这一点,但我想知道为什么我的程序不起作用。

这里是源代码:

public int minimum(int [] t) {
    int min,i,j;
    i=j=t.length/2;
    min=t[t.length/2];
    while(j!=0 || i!=t.length-1) {
        while( t[i]>=min) {
            i++;
            if(i==t.length) {
                i=t.length-1;
                continue;
            }
        }
        while(t[j]>=min) {
            j--;
            if(j==-1) {
                j=0;
                continue;
            }
        }
        if(t[i]<=min && t[j]<=min) {
            if(t[i]<=t[j]) min=t[i];
            else min=t[j];
        }
    }
    return min;
}

谢谢。

【问题讨论】:

  • 对不起,我忘记更改标题了
  • 你遇到了什么错误?
  • 我没有错误,它干净但不工作

标签: java arrays algorithm


【解决方案1】:

在阅读答案之前,您应该尝试调试您的代码以自己解决这个问题。 我认为您的代码在其中一个内部 while 循环中无限循环,因为结束条件

if(i==t.length) { i=t.length-1; continue; }

仅将i 重置一步,continue 重新启动while 循环。您可能打算在那里使用 break 关键字而不是 continue,在这种情况下,您的代码将继续执行另一个内部 while 循环。

【讨论】:

  • 你好,是的,你在这个笔记中是对的,我在继续和中断之间感到困惑。谢谢你的笔记。
【解决方案2】:

我的代码中有一些逻辑错误,它会无限地通过两个循环,我通过将 continue 更改为 break 来修复循环,并通过设置 || 修改最后一个条件而不是 && (这是一个逻辑错误),它现在可以工作了。 多谢你们。 这是新的源代码:

public int minimum(int [] t) {
    int min,i,j;
    i=j=t.length/2;
    min=t[t.length/2];
    while(j!=0 || i!=t.length-1) {
        while( t[i]>=min) {
            i++;
            if(i==t.length) {
                i=t.length-1;
                break;
            }
        }
        while(t[j]>=min) {
            j--;
            if(j==-1) {
                j=0;
                break;
            }
        }
        if(t[i]<=min || t[j]<=min) {
            if(t[i]<=t[j]) min=t[i];
            else min=t[j];
        }
    }
    return min;
}

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2018-09-24
    • 2012-05-02
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多