很抱歉打扰,我刚刚开始尝试自己学习编码。 我为自己设定了练习基础知识的任务。我应该生成随机整数以填充数组大小10,之后我必须对其进行排序,查找数组中所有整数的最小值,最大值和平均值,并确定数组中是否为25
如您所见,其想法是练习数组操作,我不应该使用内置函数。
到目前为止,我已经编写了一种将随机数分配给数组的方法,并编写了一种对它进行排序的方法(冒泡排序,因为这是我要学习的东西)。 不幸的是,如果我自己编写排序算法,则无法通过调用排序方法(mySort)对数组进行排序。
如果我使用内置函数在我的排序方法中进行排序,然后调用它,则效果很好。所以我想这意味着我的算法是错误的。 我希望你们能指导我并向我阐明我做错了什么。
public static int randomNum;
public static void main(String args[]) {
generateRandomNumber(myArray);
mySort(myArray);
System.out.println(Arrays.toString(myArray));
}
private static int[] generateRandomNumber(int[] myArray) {
Random numberGenerator = new Random(Integer.MAX_VALUE);
for (int i = 0; i < myArray.length; i++) {
randomNum = numberGenerator.nextInt(100);
myArray[i] = randomNum;
}
return myArray;
}
private static void mySort(int[] myArray) {
for (int i = 0; i < myArray.length -1; i++) {
for (int j = 1; j < myArray.length- i -1; i++) {
if (myArray[j] < myArray[j - 1]) {
int temp = myArray[j - 1];
myArray[j - 1] = myArray[j];
myArray[j] = temp;
}
}
}
}
}
如果我更改为:
private static void mySort(int[] myArray) {
Arrays.sort(myArray);
}
}
效果完美
答案 0 :(得分:1)
通过对mySort函数进行以下更改,您的代码将起作用:
private static void mySort(int[] myArray) {
for (int i = 0; i <= myArray.length -1; i++) {// <= instead of <
for (int j = 1; j <= myArray.length- i -1; j++) {//j++ not i++ and do not miss =;
if (myArray[j] < myArray[j - 1]) {
int temp = myArray[j - 1];
myArray[j - 1] = myArray[j];
myArray[j] = temp;
}
}
}
}
答案 1 :(得分:0)
排序代码中有几个错误。更正后的版本如下所示:
private static void mySort(int[] myArray) {
for (int i = 0; i < myArray.length; i++) { // Removed -1
for (int j = 1; j < myArray.length - i; j++) { // Removed -1, corrected from i++ to j++
if (myArray[j] < myArray[j - 1]) {
int temp = myArray[j - 1];
myArray[j - 1] = myArray[j];
myArray[j] = temp;
}
}
}
}
不需要-1
,因为在循环条件中使用的小于(<
)。这意味着i
或j
永远不会超过array size - 1
。
答案 2 :(得分:0)
在内部循环中,您正在遍历i而不是j。修复它,它将起作用。
答案 3 :(得分:0)
这是...代码中烦人的小麻烦之一,它将困扰您
首先非常仔细地观察...。
for (int i = 0; i < myArray.length -1; i++) {
for (int j = 1; j < myArray.length- i -1; i++) {
看不到?仔细看第二行...
for (int j = 1; j < myArray.length- i -1; i++) {
j
总是 1
...但是为什么?因为您在两个循环中都增加了i
?
如果将更改为更类似的内容...
for (int i = 0; i < myArray.length -1; i++) {
for (int j = 1; j < myArray.length- i -1; j++) {
您应该找到它可以解决问题