【问题标题】:How do I swap two integers in an array, where my method takes in two integers and an array from main?如何交换数组中的两个整数,其中我的方法从 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

标签: java arrays methods integer main


【解决方案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]);
    }
 }
}

【讨论】:

  • 请不要只在答案中添加代码而没有任何解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 2020-09-25
  • 2022-01-25
  • 2021-02-13
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多