我想找出一个数字的最大值,它保存0到6之间的数字。但是应该排除数字6。在我的逻辑中,5是最高的数字,所以我必须理清6。
for (int i = 0; i < requirements.length; i++) {
for (int k = i + 1; k < requirements.length; k++) {
if(requirements[i] < requirements[k])
&& requirements[k] != 6) {
highest = requirements[k];
} else {
if(requirements[i] != 6) {
highestAsilLevel = requirements[i];
}
}
}
}
我做到了这一点,但这对任何情况都不起作用。
答案 0 :(得分:3)
为什么要两个循环?只有一个就足够了:
Integer max = null;
for (int i = 0; i < requirements.length; i++) {
Integer currentValue = requirements[i];
if (currentValue!=6 && (max==null || currentValue>max)){
max = currentValue;
}
}
return max;
答案 1 :(得分:2)
1。)对数组进行排序
2。)从最后开始循环
3。)比较数字,如果它不是6那么你得到你的数字
int num=-1;
Arrays.sort(array);
for(int i=array.length-1;i>=0;i--){
if(array[i]!=6){
num = array[i];
break;
}
}
if(num!=-1){
// you found your value
}else{
// all 6 , no expected value found
}
注意:对于未来的读者Array.sort
保证n * log(n)时间复杂度,这是非常有效的,特别是当数组大小不是很大Read this和this beautiful article时,进一步的细节。
答案 2 :(得分:0)
我认为你想要数组中第二高的数字..你可以做以下
public class TwoMaxNumbers {
public static void main(String a[]){
int requirements[] = {5,34,78,2,45,1,99,23};
int maxOne = 0;
int maxTwo = 0;
for(int n:requirements){
if(maxOne < n){
maxTwo = maxOne;
maxOne =n;
} else if(maxTwo < n){
maxTwo = n;
}
}
System.out.println("Second Max Number: "+maxTwo);
}
}
如果您只想避免使用数字6,则可以执行此操作
int max = null;
for (int i = 0; i < requirements.length; i++) {
int max1 = requirements[i];
if ((max1!=6) && (max==null || max1>max)){
max = max1;
}
}
return max;
答案 3 :(得分:0)
这是你的答案:
public class Test {
public static void main(String[] args) {
int num[] = { 6, 1, 2, 3, 4, 5 };
int max = 0;
for (int i = 0; i < num.length; i++) {
if (max < num[i] && num[i] != 6) {
max = num[i];
}
}
System.out.println(max);
}
}
答案 4 :(得分:0)
int requirements[] = { 6, 1, 2, 3, 4, 5 };
int max = Arrays.stream(requirements).filter(i -> i!=6).max().getAsInt();
System.out.println(max);