2014-02-21 72 views
2

我正在學習java類,但已經離開了一段時間。Java:當將數組傳遞給函數時,會出現'.class'期望的錯誤

試圖讓這個排序程序的工作:

import java.util.*; 
public class Assignment1 
{ 
    private int[] nums; 
    private int[] ast; 

    private int n; 

    public void sort(int[] vals) 
    { 
     this.nums = vals; 
     n = vals.length; 
     this.ast = new int[n]; 
     merges(0, n - 1); 
    } 

    private void merges(int bot, int top) 
    { 
     if (bot < top) 
     { 
     int mid = bot + (top - bot)/2; 
     merges(bot, mid); 
     merges(mid + 1, top); 
     merge(bot, mid, top); 
     } 
    } 

    private void merge(int bot, int mid, int top) 
    { 
     for (int i = bot; i <= top; i++) 
     { 
     ast[i] = nums[i]; 
     } 
     int i = bot; 
     int j = mid + 1; 
     int k = bot; 
     while (i <= mid && i <= top) 
     { 
     if (ast[i] <= ast[j]) 
     { 
      nums[k] = ast[i]; 
      i++; 
     } 
     else 
     { 
      nums[k] = ast[j]; 
      j++; 
     } 
     k++; 
     } 
     while (i <= mid) 
     { 
     nums[k] = ast[i]; 
     k++; 
     i++; 
     } 
    } 

    private void show() 
    { 
     System.out.print("Sorted Array: "); 
     for(int l=0;l<nums.length;l++) 
     { 
     System.out.print(nums[l] + " "); 
     } 

    } 
    public static void main(String[] args) 
    { 
     Assignment1 a = new Assignment1(); 
     Scanner scan = new Scanner(System.in); 
     System.out.print("\nArray Size: "); 
     int s = scan.nextInt(); 
     int[] array = new int[s]; 
     for(int x=0;x<s;x++) 
     { 
     System.out.print("Enter Element " + (x + 1) + ":"); 
     array[x] = scan.nextInt(); 
     } 


     a.sort(array[]); 
     a.show(); 
    } 
} 

我得到的錯誤是這樣的:

Assignment1.java:82: error: '.class' expected 
    a.sort(array[]); 

我知道這是一些基本的東西躲避我,但基本是事這是最朦朧的...

+1

爲什麼使用'array []'?你認爲'[]'做什麼?你爲什麼這麼認爲? –

+0

只是陣列沒有[] – nachokk

+5

@SotiriosDelimanolis,諷刺和批判是沒有幫助的。只要讓他知道他是錯的而不是批評。 –

回答

5

我相信編譯器認爲你試圖將類類型傳入sort,因爲你添加了[]後你在調用sort這是你如何聲明一個數組類型。

只要改變

a.sort(array[]) 

a.sort(array) 

,因爲你已經初始化array在你的方法的int[]型/前面的數組。

您只需在初始化期間添加[]。之後,引用數組的變量名稱就像任何其他變量的變量名稱一樣。

+0

+1這是編譯器可能產生該消息的原因。我想不出合理的解釋。 –

3

您的sort (int[] vals)需要int[]參數。

您的int[] array已屬於該類型,您只需自行通過array即可。變量的名稱是array,其類型是int[]。當你將這個變量傳遞給一個函數時,你可以用它的名字來引用它。沒有「array[]」,這不是一個有效的構造。

句法上,array[]是無效的,但假設它是有效的,我想它的類型是int(其中一個元素的類型)而不是int[]

「.class expected」編譯器錯誤是誤導性的。 array[]語法是無效的,我猜編譯器的混淆導致一個意外的錯誤信息(編輯:錯誤的很好的解釋在mdewitt和meriton的答案中給出)。

順便說一下,Java確實支持int array[];的語法,相當於int[] array;。就我個人而言,我從來不喜歡這種模糊性,我儘可能使用前面的語法。如果您看到此語法,請不要混淆 - 名稱仍爲array,類型仍爲int[]

1

Assignment1.java:82: error: '.class' expected a.sort(array[]);

這意味着錯誤在Assignment1.java的第82行。該行顯示如下:

a.sort(array[]); 

這顯然是無效的java語法。你不能用空方括號來後綴一個變量。如果你的意思是傳遞數組對象,只需通過自己使用的變量:

a.sort(array); 

換句話說,有一個傳遞數組沒有特殊的語法。您可以像傳遞任何其他對象或原始值一樣傳遞數組。

空方括號只能用於表示數組類型,在這種情況下它們將遵循組件類型。如果我們採用這種解釋,array將不得不是一個類型而不是一個變量,並且array[]將表示類型而不是表達式。當然,你不能傳遞的方法參數類型,但你可以通過類對象爲該類型:

a.sort(array[].class); 

這就是編譯器認爲你正在試圖做的。當然,這是無稽之談,因爲這不會是類型正確的,因爲sort方法需要一個數組而不是一個類對象,並且數組並不表示開始的類型。換句話說,編譯器猜測你的意思是錯誤的,於是就把你和一個無關的錯誤信息混淆了。

相關問題