int [] arr2 = {43, 56, 44, 56, 21, 75, 41};
int max = arr2[0];
int temp3 = 0;
int tempLoc = 0;
for(int i = 0; i < arr2.length - 1; i++){
for(int j=arr2.length-1; j < 1; j--){
if(arr2[j-1] < arr2[j] ){
max=arr2[j];
tempLoc = j;
} else{
max = arr2[j-1];
tempLoc = j;
}
}
//replace elements here.
temp3 = arr2[arr2.length - 1 - i];
arr2[arr2.length - 1 - i] = max;
arr2[tempLoc] = temp3;
}
System.out.println("\n " + Arrays.toString(arr2));
我有这个,输出是:
{56 43 43 43 43 43 43}
我不想每个人说一个解决方案,我希望有人帮我找到问题。对我来说,它是这样的:
(1)例如i = 1,在j循环中,找到最大值然后循环结束然后元素被正确替换我说“
那么问题是什么?
答案 0 :(得分:0)
好的,首先,在第二个循环中,您有j < 1
,应该有j > 1
或j > 0
(不确定,您的算法)。
其次,无论如何分配最大值,您应该检查当前最大值是否大于您想要分配的值,如果是,那么请不要管它。此外,您始终将tempLoc
分配给j
,不知道那是什么。一般来说,我认为你的发现max太复杂了,只需要遍历所有元素并将值分配给max,如果它们更大,并记住索引,如下所示:
for(int j=0; j<arr2.length-i; j++){
if(arr2[j] > max){
max = arr2[j];
indexOfMax = j;
}
}
但就像我说的那样,这是你的算法,你可能想要做一些不同的事情。