【问题标题】:Sorting integer array with foreach in Java在Java中使用foreach对整数数组进行排序
【发布时间】:2013-02-20 23:00:24
【问题描述】:

所以我得到了这个学校作业:

编写一个获取两个整数数组的方法,并使用 foreach 循环将x[] 排序为y[]

x[] 的大小为 10,所有元素都用 Math.random() 初始化,y[] 的大小 >10 并用零填充。该方法应将x[] 数组排序为y[]return y[]

由于我只剩下 foreach,我无法找到一种方法来引用数组中的其他元素以进行比较。有什么想法吗?

【问题讨论】:

  • 您所说的“因为我只剩下 foreach 我无法找到一种方法来引用数组中的其他元素以便比较它们”是什么意思。 ?
  • Java 有一种 foreach 语句 for (E elem : collection) {} 但您确定必须使用它吗?
  • @RaulGogo:我正在寻找一种方法来做一些类似于经典 for 循环的事情:'if(x[i]
  • Math.random() 返回一个double 并且您正在排序Integers - 您打算如何将double 转换为int
  • 您可以使用手动递增的计数器作弊,并执行简单的插入排序。

标签: java arrays sorting foreach int


【解决方案1】:

这是我 100% 认真的回答。

public static void completelyLegitSort(int[] x,int[] y){
    for(int n:x){
        System.arraycopy(x, 0, y, 0, x.length);
        java.util.Arrays.sort(y);
        break;
    }
}

【讨论】:

  • +1 你是个天才!但请注意,您不能更改数组 x! :D
  • 为什么你在 for 循环(x.length 次)内调用 java.util.Arrays.sort(y); 而不是在循环后立即调用?
  • @alfasin : 第一次迭代后循环中断
  • @alfasin:Zane 和我只是在开玩笑说老师练习的奇怪之处。基本上,他/她是在要求学生用锤子拧东西。我们接受了挑战,并喜欢寻找肮脏的解决方法来进行练习。赞恩比我更不屑。
  • @gd1 我明白 :) 但为什么不直接使用 Zane 的回答中的第 3-4 行呢?
【解决方案2】:
int[] crazySort(int[] x, int[] y) {

    System.arraycopy(x, 0, y, 0, x.length);

    int i = 1; // cheating
    for (int n : y) { // <- this is your foreach, you will never use the n variable :D
        if (i == x.length) break; // cheating again
        for (int j = i-1; j >= 0; j--) { // finally doing something reasonable
            if (y[j+1] < y[j]) {
                int temp = y[j+1];
                y[j+1] = y[j];
                y[j] = temp;
            }
        }
        i++;
    }

    return y;

}

希望老师觉得它很有趣,至少和练习语句一样有趣。这个解决方案使用java“foreach”循环,练习语句没有告诉你only使用它。

【讨论】:

  • int[] x = new int[]{15,10,7,1,7,6,27,8,2,17}; int[] y = new int[10]; int index; int count; for (int i1 : x) { index = 0; count = 0; for (int i2 : x) { if(i2 &lt; i1) { index++; } else if (i2 == i1) { count++; } } while (count != 0) { count--; y[index] = i1; index++; } } 抱歉格式化。我的一个朋友终于想通了。
  • 你朋友的解决方案似乎“hacky”足以获得好成绩。 :P 更改变量的名称,放几个无用的计数器就完成了。
猜你喜欢
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多