Java 选择排序,我的代码有什么问题?
Java Selection Sort, what is wrong with my code?
import java.util.Random;
public class Tester {
public static void main(String[] args) {
selectionSort(args);
}
private static void printArray(int[] anArray) {
for (int i = 0; i < anArray.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(anArray[i]);
}
}
public static void selectionSort(String[] args) {
int i, x = 0;
int l = 10;
Random r = new Random(271);
int array[] = new int[l];
for (i = 0; i < l; i++) {
array[i] = r.nextInt();
}
while (i < l) {
for (int j = 1; j <= i; j++) {
if (array[j] < array[x])
x = j;
}
i++;
}
printArray(array);
}
}
一切都很好,只是无法正确打印。当我打印时,我得到“-1061221096、-349834974、-1279215928、1452441141、-367008517、638966200、-464597014、1551135748、-446923224、542496703”,这是不正确的。我相信每个数字都应该在 271 以下。
尝试替换这个:
Random r = new Random(271);
有:
Random r = new Random();
并替换为:
array[i] = r.nextInt();
有:
array[i] = r.nextInt(271);
您可以在 271
下输出类似这样的内容:
18, 94, 189, 105, 32, 153, 68, 159, 178, 34
你有线
Random r = new Random(271);
现在,每次我使用 Random 时,我总是使用
Random r = new Random();
int rand = r.nextInt(271);
这应该会按预期工作。
而且从代码清理的角度来看,您不需要将 args[]
传递给 selectionSort()
。您可以简单地使该方法没有参数并且不从 main 方法传递任何内容。
while (i < l){
for(int j=1; j<=i; j++){
if(array[j] < array[x])
x = j;
}
i++;}
这段代码将不会被调用,因为 'i' 由于前面的循环而等于 'l'。
271 称为种子,它不会给你一个小于 271 的随机数,为了生成小于 271 的数字,你应该使用 r.next(271)
请参阅 API 文档 Random API JSE7
import java.util.Random;
public class Tester {
public static void main(String[] args) {
selectionSort(args);
}
private static void printArray(int[] anArray) {
for (int i = 0; i < anArray.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(anArray[i]);
}
}
public static void selectionSort(String[] args) {
int i, x = 0;
int l = 10;
Random r = new Random(271);
int array[] = new int[l];
for (i = 0; i < l; i++) {
array[i] = r.nextInt();
}
while (i < l) {
for (int j = 1; j <= i; j++) {
if (array[j] < array[x])
x = j;
}
i++;
}
printArray(array);
}
}
一切都很好,只是无法正确打印。当我打印时,我得到“-1061221096、-349834974、-1279215928、1452441141、-367008517、638966200、-464597014、1551135748、-446923224、542496703”,这是不正确的。我相信每个数字都应该在 271 以下。
尝试替换这个:
Random r = new Random(271);
有:
Random r = new Random();
并替换为:
array[i] = r.nextInt();
有:
array[i] = r.nextInt(271);
您可以在 271
下输出类似这样的内容:
18, 94, 189, 105, 32, 153, 68, 159, 178, 34
你有线
Random r = new Random(271);
现在,每次我使用 Random 时,我总是使用
Random r = new Random();
int rand = r.nextInt(271);
这应该会按预期工作。
而且从代码清理的角度来看,您不需要将 args[]
传递给 selectionSort()
。您可以简单地使该方法没有参数并且不从 main 方法传递任何内容。
while (i < l){
for(int j=1; j<=i; j++){
if(array[j] < array[x])
x = j;
}
i++;}
这段代码将不会被调用,因为 'i' 由于前面的循环而等于 'l'。
271 称为种子,它不会给你一个小于 271 的随机数,为了生成小于 271 的数字,你应该使用 r.next(271)
请参阅 API 文档 Random API JSE7