我是编程和java的新手,我正在尝试编写一个简单的冒泡排序算法。我可能有点过头了;我在Oracle的Java教程中并不太远。我现在遇到的麻烦不是泡泡排序本身,而是在创建数组并在排序之前打印它。
这是我到目前为止所做的:
public class BubbleSort {
public BubbleSort(int size) {
// creates array
int[] items = new int[size];
}
public void fillArray(int[] a) {
// fill array with random ints
for (int i=0; i<(a.length-1); i++) {
a[i] = java.util.Random.nextInt(50);
}
}
public void printArray(int[] a) {
for (int i=0; i<a.length; i++) {
System.out.print(a[i] + " ");
}
}
public void BubbleSortAlgorithm() {
// bubble sorting algorithm goes here
}
public static void main(String[] args) {
BubbleSort bubbleSort = new BubbleSort(20);
bubbleSort.fillArray(items);
bubbleSort.printArray(items);
// bubbleSort.BubbleSortAlgorithm(items);
// bubbleSort.printArray(items);
}
}
我遇到了3个编译器错误:
这是因为它是在main方法中调用的吗?我该如何解决这个问题?
2,3。编译器无法找到符号,项目。 Items是在类的构造函数中创建的int数组。我是否需要在main方法中声明它?
我觉得我的班级结构完全没了。再一次,我很新。我也是stackoverflow的新手,所以如果这个问题没有得到解决,我也很抱歉。
答案 0 :(得分:3)
你打电话:
java.util.Random.nextInt(50);
首选导入您要使用的类。这会把这个块放在文件的顶部:
import java.util.Random;
并将现有代码更改为:
Random.nextInt(50);
这解决了样式问题,但你仍然会得到相同的编译器错误。
静态方法属于一个类;在使用它们之前,它们不需要您创建(实例化)该类的对象。而不是具有该方法的类的每个实例化,该类的所有实例化实例共享相同的静态方法和变量。
具体来说,Random类中的.nextInt()不是静态的;这是一种常规方法。所以它需要一个实例化的Random才能工作。这意味着你应该尝试:
Random random = new Random();
random.nextInt(50);
在您实例化一个Random之后,您可以继续调用nextInt(),就像您想要的那样多次。
常用的静态方法的一个示例是Math类。
Math.min(10, 5);
Math.max(100, 100000);
等等。
需要实例化Random的原因是它具有状态。它不是完全随机的,而是伪随机的,因为它需要一个数字才能开始。如果你没有给它一个数字,它需要当前时间。两个Java Random对象在完全相同的时刻初始化...将生成相同系列的“随机”数字。
这实际上很有用;你可以给他们随机对象的数字开始,你可以使用这种行为进行测试。
Random random = new Random(1);
这是用数字1播种的。这意味着每次运行代码时它都会为nextInt()产生相同的随机数。如果你没有给它任何数字作为种子,那就是这样做,而不是:
Random random = new Random(System.currentTimeMillis());
但是,是的;问题是Random.nextInt不是静态方法。
答案 1 :(得分:0)
首先是 NextInt非静态方法 所以你必须使用随机类的实例来使用它 第二个 Item是局部变量,因此您必须在使用之前声明它