2016-07-15 65 views
0

我是編程初學者。我想製作一個3視圖的Android應用程序。如何停止數組末尾的增量和取詞?

  1. 文本視圖(顯示文本),並
  2. 按鈕(前進和後退)。

我做了一個單詞one, two, three, four, five的數組來顯示。 我把one放在xml上。

當用戶點擊FORWARD它顯示two當他們點擊FORWARD它再次表明three,當用戶點擊BACK它顯示two。我可以做到這一點。

的問題是,當它到達five並且用戶點擊FORWARD,當它到達one並且用戶點擊BACK它崩潰。

我想要的按鈕什麼都不做,甚至沒有回到one。我希望用戶知道它是列表的結尾。與BACK按鈕相同的問題。我希望它保持在one。這是我的代碼。請幫忙。

public class aba extends AppCompatActivity { 

    int i = 0; 
    String[] myList = { 
     "one", 
     "two", 
     "three", 
     "four", 
     "five" 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_aba); 

     } 
     //Incrementing the value by l on forwardButton click 
    public void forwardButton(View view) { 
      TextView textDisplay = (TextView) findViewById(R.id.textDisplay); 
      i = i + 1; 
      textDisplay.setText(myList[i]); 
      if (i == myList.length) { 
       i = i + 0; 
      } 
     } 
     //decrementing the value by l on backButton click 
    public void backButton(View view) { 
     TextView textDisplay = (TextView) findViewById(R.id.textDisplay); 
     i = i - 1; 
     textDisplay.setText(myList[i]); 
     if (i == 0) { 
      i = i - 0; 
     } 

    } 
} 

回答

1

索引數組的從0 由於您的數組包含5個元素,的length值是5啓動,但索引變爲0,1,2,3,4,

這意味着你不想去低於0以上4

(也沒有理由對每按一下按鈕初始化TextView

像這樣的東西應該工作:

int i = 0; 
String[] myList={"one", "two", "three", "four", "five"}; 
TextView textDisplay; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_aba); 

    textDisplay = (TextView) findViewById(R.id.textDisplay); 
} 

public void forwardButton(View view) { 
    if(i < myList.length - 1) { 
     i++; 
     textDisplay.setText(myList[i]); 
    } 

} 

public void backButton(View view) { 
    if(i > 0) { 
     i--; 
     textDisplay.setText(myList[i]); 
    } 
} 
0

試圖設置從一個出界外數組元素的文字是什麼原因造成死機,所以你需要的位置你if這個來確保imyList陣列前的邊界內試圖訪問它。

事實上,您的if聲明沒有太多幫助。除了違規代碼行之外,加或減0並不會改變變量,所以它不會有幫助。

//Incrementing the value by l on forwardButton click 
public void forwardButton(View view) { 
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay); 
    i = i + 1; 
    if (i >= myList.length) { 
     // myList.length is past the end of the array, so set to length - 1 
     i = myList.length - 1; 
    } 
    textDisplay.setText(myList[i]); 
} 
//decrementing the value by l on backButton click 
public void backButton(View view) { 
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay); 
    i = i - 1; 
    if (i < 0) { 
     // -1 is before the beginning of the array, so set to 0 (beginning of the array) 
     i = 0; 
    } 
    textDisplay.setText(myList[i]); 
} 
+0

我更喜歡這個節目只是改變變量時,它是有效的這樣做的答案,但我是這裏爲它提供了額外的解釋。 – jonhopkins

1

您需要在實際更改索引值之前檢查數組的末尾。此外,由於Java從0索引數組,因此您需要檢查索引是否小於數組的長度。

//Incrementing the value by l on forwardButton click 
public void forwardButton(View view) { 
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay) 

    if (i < myList.length - 1) { 
     i=i+1; 
    } 

    textDisplay.setText(myList[i]); 
} 
//decrementing the value by l on backButton click 
public void backButton(View view) { 
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay); 

    if(i > 0) { 
     i=i-1; 
    } 

    textDisplay.setText(myList[i]); 
    if(i==0){ 
     i=i-0; 
    } 

} 
0

第一個問題是,在你的,如果你的塊有i=i+0i=i-0它不會做任何事情(任何事情)。它的工作原理與數學相同,y=x-0可以簡化爲y=x。所以整個if聲明就像它不存在,你可以刪除它。

第二個問題是,(我認爲)你想撤銷你之前做過的i=i+1i=i-1,但是這樣做並且你不能「撤銷指令」。只有你可以做的是做反向操作,所以在這種情況下,對於i=i-1它將是i=i+1。但是沒有改變,你已經把文本加載到了字段中,並且你將訪問索引爲-1或者lenght(比最後一個索引多一個)的數組。所以解決的辦法是讓你的整個方法體在你的內部,如果語句和條件否定,所以增量和改變只會發生在你處於數組邊界而不是側邊時。

編輯:你也必須糾正一個條件。數組從0開始索引,但長度是其內部「抽屜」的數量。因此,當您嘗試獲取第len-1個元素時,您正在訪問數組中的最後一個字段。所以你的條件應該是if(i==myList.length-1),因爲i是數組的最後一個可能的索引。

0

我認爲你應該檢查僅當您單擊該按鈕有權ID:

public void forwardButton(View view) { 
    if (view.getId() == R.id.forwardButton) { 

    } 
    } 



      //decrementing the value by l on backButton click 
     public void backButton(View view) { 
      if (view.getId() == R.id.backwardButton) { 
    ... 
    }}