应用程序正在崩溃 - 随机数生成器

时间:2016-10-14 18:45:49

标签: android random numbers

这是我的随机数生成器的java文件。每当我运行应用程序时,它都会崩溃。救救我!

public class MainActivity extends AppCompatActivity {

    int  k;

    public void lol(View v) {

        EditText e1 = (EditText) findViewById(R.id.e1);
        EditText e2 = (EditText) findViewById(R.id.e2);
        TextView t = (TextView) findViewById(R.id.t);
        int h = Integer.parseInt(String.valueOf(e1));
        int i = Integer.parseInt(String.valueOf(e2));
        Random u = new Random();

        k = h + u.nextInt(i);
        t.setText(k);
    }
}

3 个答案:

答案 0 :(得分:2)

您需要从EditText获取文本。此外,您需要在将字符串解析为Integer时使用try catch块,否则如果String无法解析为int,则可能会抛出RuntimeException。

public void lol(View v) {

    EditText e1 = (EditText) findViewById(R.id.e1);
    EditText e2 = (EditText) findViewById(R.id.e2);
    TextView t = (TextView) findViewById(R.id.t);
    String e1Text = e1.getText().toString();
    String e2Text = e2.getText().toString();
    try{
        int h = Integer.parseInt(String.valueOf(e1));
        int i=Integer.parseInt(String.valueOf(e2));
        Random u = new Random();


        k = h + u.nextInt(i);
        t.setText(k);
    }catch(Exception e){
        //some exception
    }
}

答案 1 :(得分:0)

您收到此错误可能是您的随机数小于0(零)。最好在这样的范围内生成随机数

Random rn = new Random();
int range = maximum - minimum + 1;
int randomNum =  rn.nextInt(range) + minimum;

答案 2 :(得分:0)

您还可以尝试以下内容(请注意,这是适用于Android的Xamarin,因此它是C#,而不是Java):

public void lol(View v)
    {
        EditText e1 = (EditText)FindViewById(Resource.Id.e1);
        EditText e2 = (EditText)FindViewById(Resource.Id.e2);
        TextView t = (TextView)FindViewById(Resource.Id.t);

        int h, i, k;

        // TryParse tries to parse the text as an integer and returns a value
        // indicating whether or not it succeeded
        // e1.Text is equivalent to a call to e1.getText()
        if (int.TryParse(e1.Text, out h) && int.TryParse(e2.Text, out i))
        {
            Random u = new Random();

            k = h + u.Next(i);
            // This is equivalent to doing a call to t.setText(...)
            t.Text = k.ToString();
        }
    }

因此,基本上,在尝试使用它之前,请检查以确保它实际上 是一个int。此外,这是从EditText获取文本值的更好方法。