【问题标题】:Android - Crash on generating random numberAndroid - 生成随机数时崩溃
【发布时间】:2012-10-24 06:25:03
【问题描述】:

所以,我在其他地方查看了如何生成随机数,并将其放入 Android 应用程序中。我希望这可以工作,但遗憾的是,它会与这个 LogCat 一起崩溃:

11-03 17:06:48.930: W/dalvikvm(8327): threadid=1: thread exiting with uncaught exception (group=0x41ff0300)
11-03 17:06:48.938: E/AndroidRuntime(8327): FATAL EXCEPTION: main
11-03 17:06:48.938: E/AndroidRuntime(8327): java.lang.IllegalArgumentException
11-03 17:06:48.938: E/AndroidRuntime(8327):     at java.util.Random.nextInt(Random.java:187)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at com.spng453.randomnum.RandomNumber$1.onClick(RandomNumber.java:24)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at android.view.View.performClick(View.java:4084)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at android.view.View$PerformClick.run(View.java:16966)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at android.os.Handler.handleCallback(Handler.java:615)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at android.os.Looper.loop(Looper.java:137)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at android.app.ActivityThread.main(ActivityThread.java:4745)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at java.lang.reflect.Method.invokeNative(Native Method)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at java.lang.reflect.Method.invoke(Method.java:511)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-03 17:06:48.938: E/AndroidRuntime(8327):     at dalvik.system.NativeStart.main(Native Method)
11-03 17:06:51.376: I/Process(8327): Sending signal. PID: 8327 SIG: 9

我已经尝试了我能想到的一切来让它工作,但没有任何效果。代码如下:

private OnClickListener Gen = new OnClickListener() {
    public void onClick(View v) {
        Random rand;
        rand = new Random();
        EditText maxin = (EditText)findViewById(R.id.max);
        EditText minin = (EditText)findViewById(R.id.min);
        TextView out = (TextView)findViewById(R.id.out);
        int max = Integer.parseInt(maxin.getText().toString().trim());
        int min = Integer.parseInt(minin.getText().toString().trim());
        out.setText(Integer.toString(rand.nextInt(max-min) + min));
    }
};

【问题讨论】:

    标签: java android random runtime-error


    【解决方案1】:

    好吧,如果您的 max 文本框的数字小于或等于您的 min 文本框,那肯定会发生这种情况。您应该在调用Random.nextInt(int) 之前验证这一点。正如文档所述:

    投掷:
    IllegalArgumentException - 如果 n 不是正数

    当然你应该处理你的文本框根本没有有效数字的情况。

    最后,有什么理由为什么你将rand的声明和赋值分开?

    Random rand;
    rand = new Random();
    

    为什么不只是:

    Random rand = new Random();
    

    ?

    【讨论】:

    • 好的,我看看。谢谢!编辑:谢谢!我没有意识到,但我切换了两个文本框。我最终总是犯这样的愚蠢错误。
    • 另外,我不只是随机 rand = new Random();因为我认为这可能是问题所在。最后,文本框是只有数字的文本框,如果我想找到一种输入字母的方法,那么我会添加一个字母检查的东西。
    • @spng453:声明怎么可能是问题所在?听起来您需要退后一步,真正查看错误消息和堆栈跟踪。另外,如果文本框只接受数字,你为什么要修剪字符串?如果用户输入了一个无法存储在int 中的数字会怎样?
    • 哦,是的,你是对的。如果他们输入小数,它仍然会出错。而且,我知道错误不是那个,但我只是在尝试一切以防万一,我只是忘了按原样放回去。此外,对于修剪,我只是习惯于使用带有字符串的文本框,有点习惯,我没有意识到。
    【解决方案2】:

    java.lang.IllegalArgumentException 表示您将非法参数传递给nextInt() 函数。我猜你的论点不是零,或者类似的东西。在调试器中检查这些值以确保您的参数有效。

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 2011-05-07
      • 2022-01-14
      • 2013-12-24
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多