2012-11-04 97 views
4

所以,我已經看過其他地方如何產生一個隨機數,並把它放到一個Android應用程序。我希望它可以工作,但可悲的是,它與此logcat的崩潰:Android - 碰撞產生隨機數

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)); 
    } 
}; 

回答

4

好吧,如果你的max文本框中有小於或等於您min文本框中輸入一個數字,肯定會發生。在致電Random.nextInt(int)之前,您應該驗證一下。由於文檔狀態:

拋出:
- 如果n不是正

當然,你應該處理情況的文本框沒有一個有效的中數字在所有。

最後,是否有任何理由爲什麼你是分開的聲明和轉讓rand

Random rand; 
rand = new Random(); 

爲什麼不乾脆:

Random rand = new Random(); 

+0

好吧,我會看看。謝謝!編輯:謝謝!我沒有意識到,但是我切換了兩個文本框。我最終總是犯這樣的愚蠢錯誤。 – Aearnus

+0

此外,我不只是隨機rand = new Random();因爲我認爲這可能是問題所在。最後,文本框是僅限數字的文本框,如果我想要找出一種輸入字母的方法,那麼我會添加一個字母檢查的事情。 – Aearnus

+0

@ spng453:聲明怎麼可能是問題?這聽起來像你需要更多的退後一步,並真正看到錯誤消息和堆棧跟蹤時,一些事情發生。另外,如果文本框只允許輸入數字,爲什麼要修剪字符串?如果用戶輸入的數字不能存儲在「int」中,會發生什麼? –

1

java.lang.IllegalArgumentException表示您正在向您傳遞非法參數nextInt()函數。我猜你的論點不是零,或者類似的東西。在調試器中檢查這些值以確保您的參數是有效的。