找到两个数组中的最大数字

时间:2017-09-06 18:56:30

标签: java arrays

我正在尝试创建带有2个数组的代码,然后返回两者之间的最大值。

public class LargestInt
{
    public static int largeValue(int 1[])
    {
        for(int i = 0; i < 1.length; i++)

7 个答案:

答案 0 :(得分:4)

你处理这两种情况:

    if (largest1 > largest2)
        return largest1;

    else if (largest2 > largest1)
        return largest2;

但它没有处理else的{​​{1}}案例。

当一个方法返回一些东西(没有largest2 == largest1方法)时,编译器总是确保所有分支都提供void语句。

要解决这个问题,您可以保留它:

return

添加为最后声明:

if (largest1 > largest2) return largest1;

如果return largest2;不正确,则表示必须largest1 > largest2

它会这样:

largest1 <= largest2

答案 1 :(得分:1)

您错过了常见的返回值,即两个数组都具有最大数字的情况。请找到以下代码来解决您的问题。我没有优化你的代码;刚刚根据你的要求纠正了它。

public static void main(String[] args) {
    int[] A = {0, 5, 2};
    int[] B = {6, 4, 1};

    System.out.println(maxValue(A, B));
}

public static int maxValue(int a[], int b[]) {
    int aLen = a.length;
    int bLen = b.length;
    int[] c= new int[aLen+bLen];
    System.arraycopy(a, 0, c, 0, aLen);
    System.arraycopy(b, 0, c, aLen, bLen);

    Arrays.sort(c);
    return c[c.length-1];
}

请找到以下代码来解决您的问题。我以完全不同的方式完成了相同的逻辑。

 package com.stackoverflow.examples;

    /*I am trying to create code that takes 2 arrays, in my case "A" and "B", and then returns the largest value between the two. In my code below for example it should return 6. What i have so far finds the largest value of A which is labeled "largest1" and then get the largest from B which is "largest2". I'm now stuck however with the if and else if statements. The program says i'm missing a return statement. Anyone know what my issue may be? Thanks for any input!
    */
    public class LargestInt
    {
        public static void main(String[] args)
        {
            int[] A = {0,5,2};
            int[] B = {6,4,1};

            System.out.println(maxValue(A, B));
        }

        public static int maxValue(int A[], int B[])
        {
            int largest1 = A[0];
            int largest2 = B[0];

            for(int i = 0; i < A.length; i++)
            {
                if(A[i] > largest1)
                    largest1 = A[i];   
            }

            for(int i = 0; i < B.length; i++)
            {
               if(B[i] > largest2)
                    largest2 = B[i];   
            }

            if (largest1 > largest2)
                return largest1;

            else if (largest2 > largest1)
                return largest2;
            return largest2;
        }
    }

答案 2 :(得分:1)

将else if更改为else,如果它大于或等于第一个,则返回第二个。你需要在每种情况下返回,如果每个数组中的最大值彼此相等,则不会返回。这将修复您的代码。

答案 3 :(得分:1)

您只需使用一个maxValue

即可更改为更简单的方法
int maxValue= A[0];

for(int i = 0; i < A.length; i++)
{
    if(A[i] > maxValue)
        maxValue = A[i];   
}

for(int i = 0; i < B.length; i++)
{
   if(B[i] > maxValue)
        maxValue = B[i];   
}
return maxValue;

使用最新的API Stream,您也可以这样做:

public static int maxValue(int A[], int B[]) {
    return Stream.<int[]>of(A,B).flatMapToInt(Arrays::stream).max().getAsInt();
}

它将迭代2 arrays,然后遍历两个数组的values,然后找到max

答案 4 :(得分:1)

简单问题: -

下面

if (largest1 > largest2)
    return largest1;

else if (largest2 > largest1)
    return largest2;

如果largest1 == largest2那么?您尚未定义此条件。

因此要么定义它,要么只是执行以下操作。用以下代码替换此代码。

return largest1 > largest2 ? largest1 : largest2;

if (largest1 > largest2)
    return largest1;

return largest2;

答案 5 :(得分:1)

将其添加到最后一行(因为您缺少第三个条件)

return largest1 >= largest2 ? largest1 : largest2 

并且您的代码将运行良好。

编辑 - 使用三元运算符

更短
{{1}}

答案 6 :(得分:0)

作为另一种方法,您可以将这些数组添加到另一个数组中,对其进行排序并获取最后一个值:

#if (QT_VERSION < QT_VERSION_CHECK(<fixed in Qt version>))
// it's workaround of bug QTBUG-...
#    if (QT_VERSION == QT_VERSION_CHECK(<version you are develop with>)
    item.setFlag(QGraphicsItem::ItemIsFocusScope);
#    else
#        error("The workaround is not tested on this version of Qt. Please run tests/bug_..._workaround_test")
#    endif

输出:

  

6