2014-04-10 97 views
-1

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

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; 
} 

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

+1

请检查数组,变量和方法调用语法。你认为这个新的Mergesort(int [] originalArray []);'做了什么,为什么? –

+0

它希望我放入原始数组,但只是将零传入程序。 –

+0

修复您的语法错误,以便您的程序编译。使用调试器来查找程序错误。 –

回答

0

变化

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]; 
} 
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在默认包中)。还有许多apis,如bukkit需要使用包装。