如何交换数组中的两个整数,其中我的方法从 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 没有什么可以交换的只有0s @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 碰巧发布了错误的代码示例。根本问题是偶数交换,去试试吧。 @Woot4Moo System.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 中获取两个整数和一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

一种在数组中的两个索引之间交换位置的方法[重复]

Java:如何从第二种方法获取变量以在第三种方法中工作?

c#写一个方法交换两个整数变量的值

如何从我的属性中获取两个值以返回到我的main方法?

将数组3,7,1,6,2,4,8,5中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数。

每日一题670. 最大交换