我需要帮助传递数组并在其上调用基本方法

时间:2015-06-19 22:40:53

标签: java arrays class

我是编程和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个编译器错误:

  1. 非静态方法nextInt(int)不能从静态上下文引用
  2. 这是因为它是在main方法中调用的吗?我该如何解决这个问题?

    2,3。编译器无法找到符号,项目。 Items是在类的构造函数中创建的int数组。我是否需要在main方法中声明它?

    我觉得我的班级结构完全没了。再一次,我很新。我也是stackoverflow的新手,所以如果这个问题没有得到解决,我也很抱歉。

2 个答案:

答案 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是局部变量,因此您必须在使用之前声明它