2016-01-06 24 views
0

我對Java非常陌生,但決定創建一個簡單的遊戲。當您按下按鈕時,程序「翻轉一枚硬幣」並顯示"True""False"如何從集合中顯示隨機單詞?

這個想法是基於隨機生成的數字,它會顯示"True""False"

這是我當前的代碼:

package com.me.koteg.dmaker; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.Random; 

public class MainActivity extends AppCompatActivity { 

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

public void generate(View view) { 

    final TextView textOne = (TextView) findViewById(R.id.txtDisplay); 
    Button pushMe = (Button) findViewById(R.id.button); 

    final String[] myCoin= {"Heads", "Tails"}; 

    Random rand = new Random(); 

    int number = rand.nextInt(3); 

pushMe.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

     textOne.setText(myCoin[3]); 
    } 
}); 

但是當過我嘗試運行我得到一個錯誤:

01-05 18:26:58.644 22736-22736/com.me.koteg.dmaker E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.me.koteg.dmaker, PID: 22736 
java.lang.ArrayIndexOutOfBoundsException: length=2; index=3 
    at com.me.koteg.dmaker.MainActivity$1.onClick(MainActivity.java:34) 
    at android.view.View.performClick(View.java:5204) 
    at android.view.View$PerformClick.run(View.java:21153) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我有可能寫的代碼完全錯誤的感覺,但任何建議/你們的幫助將是偉大的!

更新:感謝你們提供的所有幫助。我不認爲我能夠如此迅速地獲得幫助,特別是在查看Android論壇並沒有得到徹底的迴應之後。正如你們大多數人指出的那樣,這是我在Random發電機中設定的數字。

+2

你的陣列具有兩個元件,陣列被從零索引,所以唯一有效的索引爲0和1,並且你指的是第三索引:'textOne.setText(myCoin [3]);' – user3707125

回答

1

你想每次按新的隨機數嗎? 您的密碼已關閉。當你使用nextInt得到一個隨機數時,它會得到一個介於0和0之間的數字。

由於您的數組只有兩個元素,您希望得到0或1,因此需要傳入2.然後您需要使用該隨機數索引到您的數組中,而不是硬編碼數字。

原始代碼失敗,因爲您在數組中指定了無效索引。如在異常說,它僅具有長度2和你指定的索引3,因爲陣列被編入索引,其是無效的從0開始

pushMe.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     int number = rand.nextInt(2); 
     textOne.setText(myCoin[number]); 
    } 
}); 
+0

這真的是我做錯了嗎?無論如何,你的代碼工作!謝謝您的幫助! – IIMON

0

在嘗試索引你myCoin的陣列的問題出現,因爲你可以請參閱異常是「ArrayIndexOutOfBoundsException」,它指示您有某個數組訪問嘗試修改數組邊界之外的數組元素。這個集合中只有兩個元素,這些集合是0索引,這意味着您的最大索引是1,因此您需要一個0到1之間的隨機數來索引您的硬幣。

public void generate(View view) { 

    final TextView textOne = (TextView) findViewById(R.id.txtDisplay); 
    Button pushMe = (Button) findViewById(R.id.button); 

    final String[] myCoin= {"Heads", "Tails"}; 

    Random rand = new Random(); 

    int number = rand.nextInt(2); 

pushMe.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

     textOne.setText(myCoin[number]); 
    } 
}); 
} 
0

你應該接入隨機coin(不是要得到一個從非法硬編碼的指數,3,陣列中)。另外,我會使用數組長度作爲參數rand.nextInt()(這樣,例如,您可以通過單獨更改數組內容切換到骰子)。

Random rand = new Random(); 
pushMe.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     int number = rand.nextInt(myCoin.length); 
     textOne.setText(myCoin[number]); 
    } 
});