如何交换数组中的两个整数,其中我的方法从 main 中获取两个整数和一个数组?
Posted
技术标签:
【中文标题】如何交换数组中的两个整数,其中我的方法从 main 中获取两个整数和一个数组?【英文标题】:How do I swap two integers in an array, where my method takes in two integers and an array from main? 【发布时间】:2012-10-14 22:23:45 【问题描述】:我在 main 中调用了我的 swap 方法,但它并没有改变任何东西。我做错了什么?
public static void main(String[] args)
int mainArr[] = new int[20];
for(int i = 0; i<mainArr.length; i++)
swapper(3, 14, mainArr);
System.out.print(i + mainArr[i] + " ");
public static void swapper (int a, int b, int[] mainArr)
int t = mainArr[a];
mainArr[a] = mainArr[b];
mainArr[b] = t;
我的代码生成
0, 1, 2, 3,...19
按正常升序排列,我希望它交换第 4 个和第 15 个元素。
【问题讨论】:
是要交换的 a,b 整数还是主数组的索引? 离题 -> 你为什么要从循环中调用你的交换器? 我想让 a 和 b 在数组中交换 不是题外话...如果他执行偶数次交换,他会取回原始数组。当他打印第 4 个值时,它会是 4,当他打印第 15 个时,它应该又是 4。 提供的代码没有将任何内容放入数组中,因此您正在打印i+0
【参考方案1】:
移动方法调用:-
swapper(3, 14, mainArr);
在你的 for 循环之外。因为,如果您的循环运行 even
次数,它不会影响
数组。
此外,在实际交换元素之前,您需要先初始化数组。在调用 swapper
之前您需要做的事情。
for(int i = 0; i<mainArr.length; i++)
mainArr[i] = i;
swapper(3, 14, mainArr);
for(int i = 0; i<mainArr.length; i++)
System.out.print(i + mainArr[i] + " ");
【讨论】:
也用值填充数组。他有空数组 @shevchik。是的,添加了那部分。 @RC。具体如何?如果交换方法正确,这将起作用。不过我还没有看到逻辑。 @RohitJain 没有什么可以交换的只有0
s
@RC。抱歉,我现在不能聊天。已经太晚了。是时候睡觉了。 :)【参考方案2】:
这样写代码:
int mainArr[] = new int[20];
for(int i =0; i <mainArr.length;i++)
mainArr[i]=i;
swapper(3,14,mainArr);
将解决问题。问题是你碰巧调用了偶数次交换,所以它完全没有任何效果。
【讨论】:
几乎正确,但问题是数组填充,而不是交换次数;) @RC.. 如果您正确查看代码,问题实际上是交换次数。如果交换次数是偶数。你认为这会如何影响数组。?? @RC。实际上不是数组填充,因为 OP 给出了他收到的输出,所以 OP 碰巧发布了错误的代码示例。根本问题是偶数交换,去试试吧。 @Woot4MooSystem.out.print(i + mainArr[i] + " ");
注意i +
:)【参考方案3】:
您调用 swapper 的次数与数组中元素的次数相同。
如果数组的长度是偶数,则什么都不会改变 如果数组的长度是奇数,它会改变【讨论】:
那么你建议我把它放在哪里? @perldog93 在循环之后,或者没有循环。为什么需要循环?【参考方案4】:public class swapInt
public static void main(String args[])
swap(new int[]2,3,5,6,8,1,3);
public static void swap(int[]a,int i,int j)
int temp=a[i];
a[i]= a[j];
a[j]=temp;
for(int b=0;b<a.length;b++)
System.out.println(a[b]);
【讨论】:
请不要只在答案中添加代码而没有任何解释。以上是关于如何交换数组中的两个整数,其中我的方法从 main 中获取两个整数和一个数组?的主要内容,如果未能解决你的问题,请参考以下文章