基本上我必须制作一个容易/中/难的数学游戏。我使用switch语句来实现这一点,它调用一个方法来处理每个难度中的操作。
问题是我无法理解这个带有switch语句的方法应该返回什么,如果有的话,我应该如何在onCreate方法中调用它。另外我不知道为什么,但是当我在上面调用tv.setText方法时,getPuzzle方法中的TextView给了我一个错误。
public class Game extends Activity {
private static final String TAG = "Brain Training";
public static final String KEY_DIFFICULTY = "com.coursework.braintrain.difficulty";
public static final int DIFFICULTY_EASY = 0;
public static final int DIFFICULTY_MEDIUM = 1;
public static final int DIFFICULTY_HARD = 2;
public static final int DIFFICULTY_GURU = 3;
private int brain;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
int diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_EASY);
setBrain(getPuzzle(diff));
getBrain();
setContentView(R.layout.gamelayout);
final EditText edittext = (EditText) findViewById(R.id.USERentry);
final Button button1 = (Button) findViewById(R.id.keypad_1);
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// Perform action on clicks
//String buttonText = (String) button.getText();
edittext.setText(edittext.getText() + "1");
//edittext.setText() = edittext.getText() + "1";
}
});
//rest of the bottons...
}
public void Easy12(){
int a = (int) Math.random();
int b = (int) Math.random();
final TextView tv = (TextView) findViewById(R.id.question_label);
String aString = Integer.toString(a);
String bString = Integer.toString(b);
String display = aString + bString;
tv.setText(display);
}
private int getPuzzle(int diff){
//TODO: Continue last game
switch(diff){
case DIFFICULTY_HARD:
break;
case DIFFICULTY_MEDIUM:
break;
case DIFFICULTY_EASY:
Easy12();
break;
default: Easy12();
}
//might require to return an array or something
return diff;
}
public int getBrain() {
return brain;
}
public void setBrain(int brain) {
this.brain = brain;
}
}
任何建议都将受到赞赏。
编辑:这是随之而来的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/question_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello" />
<EditText
android:id="@+id/USERentry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background"
android:textColor="@color/user_txt_color"/>"
<TableLayout
android:id="@+id/keypad"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="*">
<TableRow>
<Button android:id="@+id/keypad_1"
android:text="1">
</Button>
<Button android:id="@+id/keypad_2"
android:text="2"
android:onClick="">
</Button>
<Button android:id="@+id/keypad_3"
android:text="3">
</Button>
</TableRow>
<TableRow>
<Button android:id="@+id/keypad_4"
android:text="4">
</Button>
<Button android:id="@+id/keypad_5"
android:text="5">
</Button>
<Button android:id="@+id/keypad_6"
android:text="6">
</Button>
</TableRow>
<TableRow>
<Button android:id="@+id/keypad_7"
android:text="7">
</Button>
<Button android:id="@+id/keypad_8"
android:text="8">
</Button>
<Button android:id="@+id/keypad_9"
android:text="9">
</Button>
</TableRow>
<TableRow>
<Button android:id="@+id/keypad_0"
android:text="0">
</Button>
</TableRow>
<TableRow>
<Button android:id="@+id/keypad_del"
android:text="del">
</Button>
<Button android:id="@+id/keypad_minus"
android:text="-">
</Button>
<Button android:id="@+id/keypad_hash"
android:text="#">
</Button>
</TableRow>
</TableLayout>
</LinearLayout>
答案 0 :(得分:1)
您在Easy12()
方法中获得空指针异常。正如Knossos所建议的那样,这可能是由于xml布局中不存在question_label
造成的。确保您的xml包含如下内容:
<TextView android:id="@+id/question_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello" />
您仍然可以使用setText()
方法在运行时更改TextView的文本,android:text
属性只是一个初始值。
如果您仍然无法正常工作或查看问题,请同时发布您的xml布局。如果这是问题所在,您可能需要考虑阅读http://developer.android.com/guide/topics/ui/declaring-layout.html以了解xml布局以及如何更多地使用它们。
答案 1 :(得分:0)
onCreate()是Activity类中的一个方法。你重写它,提供你自己的Activity初始化代码并使用super.onCreate()来允许来自Activity的onCreate()也运行。
请参阅此链接了解Activity Lifecycle。
getPuzzle()返回最初发送给它的相同值。所以回报基本没有意义。
看起来getPuzzle()函数的要点是根据您输入的参数难度设置不同的游戏值。
如果出现TextView错误,您确定在layout xml中存在question_label吗?
答案 2 :(得分:0)
Yeeeyy我现在知道了,问题是我的setContentView(R.layout.gamelayout);在声明了一个设置TextView对象的方法之后,让它无法识别它。所以我在super.onCreate和它的工作下把它移动了。 :)
感谢TheLastBert和Knossoss帮助我实现这个问题。