[英]Check if user decided correct
我目前正在做一個學校項目(一個小型的android游戲),到目前為止,我已經編寫了一個代碼,該代碼在啟動InGame
活動2秒后會生成一個random equation
並將其顯示在textview
。 再過5秒鍾后,第二個等式將生成並顯示在不同的文本視圖中。 現在,用戶必須通過按bigger
或smaller
的按鈕來確定第二個方程式的結果是否大於第一個方程式。 如果正確,則應顯示下一個等式,它將繼續這樣,直到用戶確定錯誤為止。 到目前為止,這是我的代碼:(第一個方程式的代碼):
// Generate random equation and display it in textview
String[] operationSet = new String[]{"+", "-", "/", "*"};
String equation;
static double doubleAnswer1;
public void start1() {
Random random = new Random();
int numOfOperations = random.nextInt(2) + 1;
List<String> operations = new ArrayList<>();
for (int i = 0; i < numOfOperations; i++) {
String operation = operationSet[random.nextInt(4)];
operations.add(operation);
}
int numOfNumbers = numOfOperations + 1;
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < numOfNumbers; i++) {
int number = random.nextInt(10)+1;
numbers.add(number);
}
String equation = "";
for (int i = 0; i < numOfOperations; i++) {
equation += numbers.get(i);
equation += operations.get(i);
}
equation += numbers.get(numbers.size() -1);
TextView TextEquation = (TextView)findViewById(R.id.textView_first_equation);
TextEquation.setText(equation);
// Evaluate the result of the equation
double doubleAnswer1 = eval(equation);
String stringAnswer = Double.toString(doubleAnswer1);
TextView textAnswer = (TextView)findViewById(R.id.textView4);
textAnswer.setText(stringAnswer);
}
(第二個方程式的代碼(與第一個方程式基本相同,只是字符串和雙精度名稱不同)):
String equation2;
static double doubleAnswer2;
public void start2() {
Random random = new Random();
int numOfOperations = random.nextInt(2) + 1;
List<String> operations = new ArrayList<>();
for (int i = 0; i < numOfOperations; i++) {
String operation = operationSet[random.nextInt(4)];
operations.add(operation);
}
int numOfNumbers = numOfOperations + 1;
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < numOfNumbers; i++) {
int number = random.nextInt(10)+1;
numbers.add(number);
}
String equation2 = "";
for (int i = 0; i < numOfOperations; i++) {
equation2 += numbers.get(i);
equation2 += operations.get(i);
}
equation2 += numbers.get(numbers.size() -1);
TextView TextEquation = (TextView)findViewById(R.id.textView3);
TextEquation.setText(equation2);
// Evaluate the result of the equation
double doubleAnswer2 = eval(equation2);
String stringAnswer = Double.toString(doubleAnswer2);
TextView textAnswer = (TextView)findViewById(R.id.textView_result2);
textAnswer.setText(stringAnswer);
}
這是我的onCreate代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ingame);
// Display first equation 2 seconds after the activity is launched
final Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
start1();
}
}, 2000);
final Handler handler2 = new Handler();
handler2.postDelayed(new Runnable() {
@Override
public void run() {
start2();
}
}, 7000);
// Check if user was right or wrong
final Button buttonBigger = (Button)findViewById(R.id.button_bigger);
final Button buttonSmaller = (Button)findViewById(R.id.button_smaller);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.equals(buttonBigger) && doubleAnswer1 < doubleAnswer2) {
Log.v("TAG", "you are right");
} else if(v.equals(buttonSmaller) && doubleAnswer1 > doubleAnswer2) {
Log.v("TAG", "you are right");
} else {
Log.v("TAG", "you are wrong");
}
}
};
buttonBigger.setOnClickListener(listener);
buttonSmaller.setOnClickListener(listener);
}
該應用程序可以正確啟動,並且還顯示第first and second
方程式,但是當我按下其中一個按鈕時,它會在logcat
告訴我you are wrong
但我決定100%正確。 但是,如果我調試該應用程序,它會告訴我doubleAnswer1和doubleAnswer2都both = 0.
這就是為什么所有方法都告訴我“你錯了”。 我不知道如何解決此問題,也許我需要將doubleAnswer1和doubleAnswer2存儲在某個地方。 我真的不知道該怎么辦,所以如果有人知道該怎么做,那對我真的很有幫助。
如果我的問題不清楚,請隨時提出,我將盡力澄清問題。
預先感謝您的幫助!
我認為您的問題出在這里:
double doubleAnswer1 = eval(equation);
我進行了快速的Internet搜索,但未找到任何名為eval()的本機函數。 相反,您應該查看Java的腳本引擎管理器:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String foo = "40+2";
System.out.println(engine.eval(foo));
或顯示在此處的exp4j: 在Android中執行數學方程式
編輯:更改以下內容:
double doubleAnswer1 = eval(equation);
至:
doubleAnswer1 = eval(equation);
類似地對doubleAnswer2做同樣的事情
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.