我刚刚开始学习Android并且遇到了一些误解。我正在尝试创建一个显示textView和按钮的应用程序。每次单击按钮都会生成一个新的随机数,该数字应显示在textView中。
但遗憾的是我的代码会导致错误列表。这是:
public class FirstAndroidProjectActivity extends Activity {
public OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) findViewById(R.id.display);
Random r = new Random();
int i = r.nextInt(101);
tv.setText(i);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(listener);
}
}
如果我不使用随机并使用除 i 之外的其他字符串 (例如 tv.setText(“99”); )一切正常,但它不能用变量作为setText()的参数。
哪里出错?
希望得到你的帮助。
答案 0 :(得分:5)
在TextView
上设置文本之前,您需要将随机数转换为字符串尝试
tv.setText(i +"");
答案 1 :(得分:2)
尝试:
tv.setText(String.valueOf(i));
答案 2 :(得分:1)
Java不会自动转换类型。当一个或多个参数是String时,+运算符被重载以将传递给它的参数转换为String。所以,当你传递i +“”到setText()时,你传递一个String,但是如果你只是传递i,那么编译器会看到你将一个int传递给一个需要一个String的方法,让你知道那个不能完成。
答案 3 :(得分:0)
我是一个int,试试tv.setText(“”+ i);
答案 4 :(得分:0)
在将整数设置为textView之前将其转换为String。您还应该在方法之外移动Random r = new Random();
,否则您的数字可能不是随机的:
Random r = new Random();
@Override
public void onClick(View v) {
TextView tv = (TextView) findViewById(R.id.display);
int i = r.nextInt(101);
tv.setText(Integer.toString(i));
}
来自文档:
如果使用相同的种子创建了两个Random实例,并且为每个实例创建了相同的方法调用序列,则它们将生成并返回相同的数字序列
如果您过快地创建了两个Random
个对象(例如用户非常快速地点击按钮两次),它们将共享相同的种子(系统时钟用于生成它)并因此你会得到两次相同的号码。
通过在全局变量中只创建一个Random
实例,可以避免此问题。
答案 5 :(得分:0)
使用
tv.setText(new Integer(i).toString()) ;