任何人都可以提供帮助吗? 我只是从一些非常基本的android开发开始。我正在开发一个初始应用程序,以帮助我的女儿学习她的时间表。想法(在第一个版本中)会随机生成1到12之间的2个数字。然后单击计算按钮将给出答案。 我有它,以便它随机生成2个数字,但是,当我单击“计算”时,它不会计算,只是显示0。 我相信这与下一个方法(计算)看不到的变量(digit1和digit2)的值有关。如果我将2个数字硬编码到计算方法中,则可以正常工作。我只是无法计算随机生成的数字。 非常感激任何的帮助。 MainActivity.java:
package uk.co.myrayner.sophiestimestables;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int digit1;
int digit2;
int show_answer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void randomise_digits(View view) {
Random rand1 = new Random();
int digit1 = rand1.nextInt(12) + 1;
displaydigit1(digit1);
Random rand2 = new Random();
int digit2 = rand2.nextInt(12) + 1;
displaydigit2(digit2);
}
public void calculate(View view) {
show_answer = (digit1 * digit2);
displayanswer(show_answer);
}
private void displaydigit1(int number) {
TextView digit1TextView = (TextView) findViewById(R.id.digit1);
digit1TextView.setText("" + number);
}
private void displaydigit2(int number) {
TextView digit2TextView = (TextView) findViewById(R.id.digit2);
digit2TextView.setText("" + number);
}
private void displayanswer(int number) {
TextView answerTextView = (TextView) findViewById(R.id.show_answer);
answerTextView.setText("" + number);
}
}
答案 0 :(得分:1)
您的实现存在几个问题。
1)在您的randomise_digits内部,您要设置digit1和digit2的值,但这些值是局部变量,而不是在方法外部声明的实例变量。因此,randomise_digits()中对digit1和digit2所做的任何更改都不会反映在MainActivity对象的digit1和digit2上。这就是为什么要获得0的原因,因为它们实际上没有设置为任何值(因为您在calculate()方法中引用了digit1和digit2的实例变量)。您的randomise_digits()方法中的本地digit1和digit2现在已超出范围/不再存在。
2)更改方法的名称,以更好地反映它们的作用。您的calculate()方法可能应该重命名为show()。您无需将View对象作为所有方法的参数传递。您没有使用它们,为什么要包含它们?
3)您不需要创建两个随机对象即可计算两个随机数。一个就可以了。
您的课程可能看起来像这样:
package uk.co.myrayner.sophiestimestables;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int digit1;
int digit2;
int show_answer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button calculateButton = findViewById(R.id.your_calculate_button_id);
calculateButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
randomise_digits();
calculate();
}
});
}
public void randomise_digits() {
Random rand1 = new Random();
digit1 = rand1.nextInt(12) + 1;
displaydigit1(digit1);
digit2 = rand1.nextInt(12) + 1;
displaydigit2(digit2);
}
public void calculate() {
show_answer = (digit1 * digit2);
displayanswer(show_answer);
}
private void displaydigit1(int number) {
TextView digit1TextView = (TextView) findViewById(R.id.digit1);
digit1TextView.setText("" + number);
}
private void displaydigit2(int number) {
TextView digit2TextView = (TextView) findViewById(R.id.digit2);
digit2TextView.setText("" + number);
}
private void displayanswer(int number) {
TextView answerTextView = (TextView) findViewById(R.id.show_answer);
answerTextView.setText("" + number);
}
}
如果您决定复制并粘贴上面的代码,请确保删除活动布局xml中的所有onclick事件。
答案 1 :(得分:0)
我没有在机器上测试您的代码。但是我认为这可能是由于您尚未设置全局变量“ digit1”和“ digit2”的值引起的。 在您的方法“ randomise_digits”中,您只需创建新的局部变量“ digit1”和“ digit2”。
答案 2 :(得分:0)
好吧,我没有测试您的代码,但是显然,您将digit1
和digit2
声明为全局变量,但是当您使用它们时,您再次声明了它,所以现在代码将生成随机数并分配给本地digit1
和digit2
而不是全局变量,当您尝试调用calculate()
时,全局digit1
和digit2
仍为0(原始整数默认为零),因此基本上结果将为零。
只需将randromise_digits函数修改为
public void randomise_digits(View view) {
Random rand1 = new Random();
digit1 = rand1.nextInt(12) + 1;
displaydigit1(digit1);
Random rand2 = new Random();
digit2 = rand2.nextInt(12) + 1;
displaydigit2(digit2);
}
答案 3 :(得分:0)
您需要做的就是在定义digit1和digit2之前删除“ int”,因此您的代码应如下所示:
package uk.co.myrayner.sophiestimestables;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int digit1;
int digit2;
int show_answer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void randomise_digits(View view) {
Random rand1 = new Random();
digit1 = rand1.nextInt(12) + 1;
displaydigit1(digit1);
Random rand2 = new Random();
digit2 = rand2.nextInt(12) + 1;
displaydigit2(digit2);
}
public void calculate(View view) {
show_answer = (digit1 * digit2);
displayanswer(show_answer);
}
private void displaydigit1(int number) {
TextView digit1TextView = (TextView) findViewById(R.id.digit1);
digit1TextView.setText("" + number);
}
private void displaydigit2(int number) {
TextView digit2TextView = (TextView) findViewById(R.id.digit2);
digit2TextView.setText("" + number);
}
private void displayanswer(int number) {
TextView answerTextView = (TextView) findViewById(R.id.show_answer);
answerTextView.setText("" + number);
}
}