0

我知道如何通过使 minvalue 成为一个非常大的数字来使代码工作。我只需要知道 eclipse 背后的逻辑不运行这个程序

public static int getMinValue(int[] ary)
    {
        int Minvalue = 0;
        random(ary);
    for (int i=ary.length-1; i >=0 ;i-- )
    {
            if (ary[i]<ary[i--])
                 Minvalue=ary[i];
    }
        System.out.printf("Minvalue:%d",Minvalue);
        return Minvalue;


    }
4

3 回答 3

1

我会这样做:

public static int getMinValue(int[] ary) {
    random(ary);
    if (ary.length > 0) {
        int minValue = ary[0];
        for (int i = 1; i < ary.length; i++) {
            if (ary[i] < minValue)
                minValue = ary[i];
        }
        System.out.printf("Minvalue:%d", minValue);
        return minValue;
    }
    throw new RuntimeException("The array must contain at least one element");
}

您的实现中的问题是您应该将数组的元素与包含您已经读取的值之间的最小值的minValue变量进行比较。for-statement此外,您使用i--更改for-statement. 另一件需要注意的事情是,至少对我来说,for-loop0to开始“递增”ary.length而不是“递减”更自然......

于 2013-11-06T17:41:17.220 回答
0

1)您需要使用 Arrays.sort(ary) 或自定义排序算法(如冒泡排序、快速排序等)对 int 数组进行排序。

2) 比访问第一个索引 ary[0] 的最小值或 ary[ary.length-1] 或最大值

而已。

public static int getMinValue (int[] ary) throws Exception 
{
    int Minvalue = 0;

    if (ary.length > 0 )
    {
     Arrays.sort(ary);

     Minvalue = ary[0];

     return Minvalue;
    }
    else
    {
        throw new Exception ("Empty array");
    }


}//end method
于 2013-11-06T17:33:57.147 回答
-2

它不起作用,因为您只检查数组中出现在您检查之前的索引位置的值。

如果要找到最小值,则需要检查数组中的所有可能值。

for (int i=ary.length-1; i >=0 ;i-- )
{
    Boolean flag = false; //this stays false in the case of lowest min value
    for (int z=ary.length-1; z>=0; z--)
        if (ary[i]>ary[z]) 
             flag = true; //flag is true if any array value is greater than current

    if(!flag)
    {
        minValue = ary[I];
        break; //just to avoid useless checks
    }
}
于 2013-11-06T17:25:11.757 回答