2016-01-06 23 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]); 
    } 
});