我正在尝试创建带有2个数组的代码,然后返回两者之间的最大值。
public class LargestInt
{
public static int largeValue(int 1[])
{
for(int i = 0; i < 1.length; i++)
答案 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