0

我刚开始学习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() 的参数。

哪里有错?

希望得到您的帮助。

4

6 回答 6

5

在 TextView 上设置文本之前,您需要将随机数转换为字符串

尝试

tv.setText(i +"");
于 2012-06-26T16:37:37.280 回答
2

尝试:

tv.setText(String.valueOf(i));
于 2012-06-26T16:39:29.950 回答
1

Java 不会自动转换类型。当其中一个或多个参数是字符串时,+ 运算符被重载以将传递给它的参数转换为字符串。因此,当您将 i + "" 传递给 setText() 时,您传递的是一个字符串,但是如果您只是传递 i,那么编译器会看到您将一个 int 传递给一个需要字符串的方法,并让您知道这不可能完毕。

于 2012-06-26T16:40:33.587 回答
0

i 是一个 int,试试 tv.setText("" + i);

于 2012-06-26T16:39:41.683 回答
0

在将整数设置为 textView 之前将其转换为字符串。您还应该移出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在全局变量中仅创建一个实例,您可以避免此问题。

于 2012-06-26T16:39:51.027 回答
0

利用

tv.setText(new Integer(i).toString()) ;
于 2012-06-26T16:40:12.620 回答