我有一些代码不能返回我想要的东西。
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},那么它将打印出11 1 1而不是6 3 1 2。
发布于 2019-07-14 17:51:13
您的代码试图做的事情(虽然没有成功)是查找数组的min和max项,但是即使这样也没有成功,因为您没有使用这样的赋值保存max和min值:
max = swapping[i];但你却用相反的方法:
swapping[i] = max;无论如何,即使您正确地做了它,您也必须用另一个循环来重复这个数组来进行交换。
如果在第一个循环中保存的不是min和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 发布于 2019-07-14 17:46:41
问题发生在您的第一个for循环中。
if(swapping[i]>max){
swapping[i]=max;
}因为一开始最大是1。当swappingi是任意值时(例如,3用于i=1)。
您的代码变成了
if(3>1){
swapping[i]=1;
}你基本上是用最大值来替换任何大于你在最大值中所拥有的值。你想做的正好相反。
if(swapping[i]>max){
max=swapping[i];
}您也有一些bug,但这是您当前错误的答案。
看来你想写的函数是这样的。
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;
}有更有效的解决方案,但这一个做了最少的修改您的代码。
发布于 2019-07-14 17:56:52
您永远不会在循环中保存最大值和最小值。另外,您没有正确地交换值。
swappingi = max和swappingi = min只将数组值设置为1,即当前值max和min。
你需要
if(swapping[i]>max){
max = swapping[i];
}
if(swapping[i]< min){
min = swapping[i];
}
}https://stackoverflow.com/questions/57029700
复制相似问题