我有一些代码无法返回我想要的代码。
class Main {
public static void main(String[] args) {
int[] swapped= {86,5,3,14,5,26,7,8,9,10,928,40};
int[] swaps=swap(swapped);
for(int num: swaps){
System.out.print(num + " ");
}
}
public static int[] swap(int[] swapping){
int max=swapping[0];
int min=swapping[0];
for(int i=0;i<swapping.length;i++){
if(swapping[i]>max){
swapping[i]=max;
}
if(swapping[i]<min){
swapping[i]=min;
}
}
for(int i=0;i<swapping.length;i++){
if(swapping[i]==max){
swapping[i]=min;
}
if(swapping[i]==min){
swapping[i]=max;
}
}
return swapping;
}
}
该代码应该交换数组中最大和最小的数字,但是它只为每个元素返回数组中的第一个元素。因此,如果数组为{1,3,6,2},则它将打印出1 1 1 1而不是6 3 1 2
答案 0 :(得分:3)
您的代码试图做的事(尽管没有成功)是找到数组的min和max项,但是即使这样也不会成功,因为您没有使用以下分配来保存max和min值: / p>
max = swapping[i];
但是您使用相反的方法:
swapping[i] = max;
无论如何,即使您正确执行了操作,也必须使用另一个循环来重申该数组以进行交换。
如果在第一个循环中没有保存最小值和最大值的值,而是保存了它们的索引,则可以避免第二个循环:
public static int[] swap(int[] swapping){
int max = 0;
int min = 0;
for(int i = 1; i < swapping.length; i++){
if(swapping[i] > swapping[max]){
max = i;
}
if(swapping[i] < swapping[min]){
min = i;
}
}
int temp = swapping[min];
swapping[min] = swapping[max];
swapping[max] = temp;
return swapping;
}
结果:
86 5 928 14 5 26 7 8 9 10 3 40
答案 1 :(得分:0)
问题出现在您的第一个for循环中。
if(swapping[i]>max){
swapping[i]=max;
}
因为一开始的最大值是1。当swaps [i]是任何值时(例如,对于i = 1,例如3)。
您的代码就是这个
if(3>1){
swapping[i]=1;
}
基本上,您将用max的值替换大于max的任何值。你想做的是相反的。
if(swapping[i]>max){
max=swapping[i];
}
您还有更多错误,但这是您当前错误的答案。
好像您要编写的函数是这样。
public static int[] swap(int[] swapping){
int max=swapping[0];
int min=swapping[0];
for(int i=0;i<swapping.length;i++){
if(swapping[i]>max){
max = swapping[i];
}
if(swapping[i]<min){
min = swapping[i];
}
}
for(int i=0;i<swapping.length;i++){
if(swapping[i]==max){
swapping[i]=min;
}else {
if(swapping[i]==min){
swapping[i]=max;
}
}
}
return swapping;
}
有更有效的解决方案,但是这一解决方案对您的代码所做的改动最少。
答案 2 :(得分:0)
您永远不会在循环中保存最大值和最小值。此外,您没有正确交换值。
swapping [i] = max和swapping [i] = min仅将数组值设置为1,即max和min的当前值。
您需要
if(swapping[i]>max){
max = swapping[i];
}
if(swapping[i]< min){
min = swapping[i];
}
}
答案 3 :(得分:0)
您将需要最大和最小索引才能进行交换:
public static int[] swap(int[] swapping){
//Initializing values and indexes
int max = swapping[0];
int min = swapping[0];
int maxIndex = 0;
int minIndex = 0;
//The maximum and minimum values and indexes so far were the 0'th, so we start from the first
for (int index = 1; index < swapping.length; index++) {
if (max < swapping[index]) {
max = swapping[index];
maxIndex = index;
}
if (min > swapping[index]) {
min = swapping[index];
minIndex = index;
}
}
swapping[maxIndex] = min;
swapping[minIndex] = max;
return swapping;
}
答案 4 :(得分:0)
我认为,在交换的第一个循环中,您将保存min和max的值
,此外,当您检查swapping[i]==max
还是swapping[i]==min
时,您应该使用 else if ,因为否则使用swapping[i]==max
时,请先写下swipping[i]
中的值,然后检查swapping[i]==min
的值(现在为true)是否将swapping[i]
的值替换为最大值。
这是我认为正确方法的一个示例(请注意第15、18、24行)
class Main {
public static void main(String[] args) {
int[] swapped= {86,5,3,14,5,26,7,8,9,10,928,40};
int[] swaps=swap(swapped);
for(int num: swaps){
System.out.print(num + " ");
}
System.out.println();
}
public static int[] swap(int[] swapping){
int max=swapping[0];
int min=swapping[0];
for(int i=0;i<swapping.length;i++){
if(swapping[i]>max){
max = swapping[i];
}
if(swapping[i]<min){
min = swapping[i];
}
}
for(int i=0;i<swapping.length;i++){
if(swapping[i]==max){
swapping[i]=min;
} else if(swapping[i]==min){
swapping[i]=max;
}
}
return swapping;
}
}