2010-06-13 109 views
2

我試圖建立一個簡單的Android應用程序,每次按下按鈕時都會顯示一個數字,但我無法弄清楚如何解決我不斷收到的「非法表達式啓動」錯誤。表達式的非法開始?

我的代碼:

package com.clicker; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 


public class Clicker extends Activity 
{ 
    private int clickerNumber = 0; 
    private TextView clickerText; 
    private Button clickerButton; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     clickerText = (TextView)findViewById(R.id.clickerText); 
     final Button clickerButton = (Button)findViewById(R.id.clickerButton); 
      clickerButton.setOnClickListener(new View.OnClickListener()); 
       { 
       public void onClick(); 
        { 
        clickerNumber = clickerNumber++; 
        clickerText.setText(Integer.toString(clickerNumber)); 
        } 
       } 
    } 
} 

而編譯器輸出:

compile: 
[javac] Compiling 2 source files to /home/fraser/Applications/Android/Code/Clicker/bin/classes 
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:24: ')' expected 
[javac]    clickerButton.setOnClickListener(new View.OnClickListener(); 
[javac]                  ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:26: illegal start of expression 
[javac]     public void onClick(); 
[javac]    ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:26: illegal start of expression 
[javac]     public void onClick(); 
[javac]      ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:26: ';' expected 
[javac]     public void onClick(); 
[javac]         ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:29: ';' expected 
[javac]      clickerText.setText(Integer.toString(clickerNumber))); 
[javac]                  ^
[javac] 5 errors 

回答

4

你有一些不必要的分號:

clickerButton.setOnClickListener(new View.OnClickListener()); 

public void onClick(); 

要解決語法錯誤,你想是這樣的:

clickerButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick() { 
     clickerNumber = clickerNumber + 1; 
     clickerText.setText(Integer.toString(clickerNumber)); 
    } 
}); 

您的縮進似乎是錯誤的,這可能是導致混淆的部分原因。使用編輯器的自動縮進來捕捉大量這些類型的錯誤。

但請注意,上面的代碼仍然不起作用,因爲在匿名類中您不能訪問不是最終的局部變量。所以你不能訪問clickerNumber。如果你做出最後的決定並不能幫助你,那麼你就無法改變它的價值。您可以將計數器提升爲成員變量。

我還建議在嘗試編寫Android應用程序之前,首先遵循標準的Java教程,並確保您瞭解Java的基本語法。你會發現大多數Android教程都會假設你已經對編寫標準Java應用程序有了很好的理解。

+0

更好的是,將支架移到正確的位置,在行的末尾。那樣的話,這個錯誤將是完全明顯的。而且你將擁有標準化和更好的代碼佈局。 – 2010-06-13 17:54:30

+0

「你不能這樣做,因爲clickerNumber必須是最終的。」 對不起,但我不明白你的意思。有人可以解釋嗎? – Fraser 2010-06-13 18:00:25

+0

@Fraser:更新了答案。 – 2010-06-13 18:02:45

2

一件事我注意到,你不需要:

clickerNumber = clickerNumber++; 

因爲++運算符處理任務。儘量簡單:

clickerNumber++; 

雖然我應該提到這不是你的問題的原因,只是我猜的一個提示。

+2

不僅沒有必要,它也是「錯誤的」(請參閱​​http://stackoverflow.com/questions/2377145/unable-to-make-out-this-assignment-in-java/); 'clickNumber'將具有與賦值後的(後)增量之前相同的值 – polygenelubricants 2010-06-13 17:53:54