【问题标题】:Trying to pass an array to my class constructor试图将数组传递给我的类构造函数
【发布时间】:2014-04-10 22:40:41
【问题描述】:

我无法将数组传递给我的排序类,因为我需要使用两种不同的算法对同一个数组进行排序。我收到错误

Multiple markers at this line
- Syntax error on token(s), misplaced 
 construct(s)
- Syntax error on token(s), misplaced 
 construct(s)
- The constructor Mergesort() is undefined
- Syntax error on token "originalArray", delete 
 this token

代码

class sorterProgram {

public static void main(String args[]) {
    //Declares instances of the sorting classes

    int[] originalArray = new int[500];
    for (int i = 0; i < 500; i++) {
        originalArray[i] = (int) Math.round(Math.random() * 100);
    }
    Quicksort q = new Quicksort(originalArray);
    Mergesort m = new Mergesort(originalArray);
    //declares keyboard to accept user input for type of sort
    Scanner keyboard = new Scanner(System.in);
    //choice set as one so the do-while and if statements will start
    int choice = 1;
    // loop that does sorting untill the user is done


    do {
        System.out.println("Enter the # to start the sort of a 500 Element Array: \n1: Quicksort then Mergesort \n2: Exit");
        //only works if the user chooses the correct numbers
        if (1 == choice || choice == 2) {
            choice = keyboard.nextInt();
        }
        switch (choice) {
        case 1:
            System.out.println("Before Quicksort");
            q.print();
            long timeQuicksort = System.nanoTime();
            q.quicksort();
            long completedInQuicksort = System.nanoTime() - timeQuicksort;
            System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            System.out.println("After Quicksort ");
            q.print();
            System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            System.out.println("Before Mergesort");
            m.print();
            long timeMergesort = System.nanoTime();
            m.sort();
            long completedInMergesort = System.nanoTime() - timeMergesort;
            System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            System.out.println("After Mergesort ");
            m.print();

            System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            System.out.println("Time took to complete Quicksort (nanoseconds): "+ completedInQuicksort);
            System.out.println("Time took to complete Mergesort (nanoseconds): "+ completedInMergesort);
            break;
        case 2:
            System.out.println("Thanks for using the Quicksort and Mergesort");

        }

    } while (choice != 2);

}
}

这是我的两个排序器构造函数

class Quicksort {
int array[];
int size;

public Quicksort(int[] n) {
    size = n.length;
    // create array for merge sorting with size n+1
    array = new int[n.length + 1];
    // assign value into the array
    for (int i = 0; i < n.length; i++) {
        n[i] = array[i];
    }

class Mergesort {

private int size;
private int[] array;
private int[] tempMergeArray;

public Mergesort(int[] n) {

    size = n.length;
    // create array for merge sorting with size n+1
    array = new int[n.length + 1];
    // assign value into the array
    for (int i = 0; i < n.length; i++) {
        n[i] = array[i];
    }

    // set the last value as a big value so the sorting ends properly
    array[n.length] = 99999;
}

编辑:我现在通过了,但他们只是通过零

【问题讨论】:

  • 请查看数组、变量和方法调用语法。你认为这个new Mergesort(int[] originalArray[] ); 做了什么?为什么?
  • 它希望我只放 originalArray 但只是将零传递给程序。
  • 修复您的语法错误,以便您的程序能够编译。使用调试器查找程序错误。

标签: java constructor parameter-passing argument-passing


【解决方案1】:

将数组作为变量传递给函数和构造函数时,语法与传递普通变量相同。

正确:

int[] myArray = new int[12];
myObject.myFunction(myArray);

不正确:

int[] myArray = new int[12];
myObject.myFunction(int[] myArray[]);

您可能想查看this,它将帮助您在 java 中使用数组。

此外,您可能需要确保它们在同一个包中。基于您缺少package my.package;,您似乎在默认包中拥有这些类。这很糟糕,因为您无法从单独的包中导入它们。 org.myamazingapplication 中的类不能执行 import myclass(假设 myclass 在默认包中)。还有很多 api 如bukkit 需要使用包。

【讨论】:

    【解决方案2】:

    改变

    Quicksort q = new Quicksort(int [] originalArray[]);
    Mergesort m = new Mergesort(int[] originalArray[] );
    

    Quicksort q = new Quicksort(originalArray);
    Mergesort m = new Mergesort(originalArray);
    

    在你的两个构造函数中,改变

    for (int i = 0; i < n.length; i++) {
        n[i] = array[i];
    }
    

    for (int i = 0; i < n.length; i++) {
        array[i] = n[i];
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多