2016-04-09 10 views
0

私は、1つのアクティビティでランダムな評価の最大値を選択し、別のアクティビティで使用できるようにする簡単なコードを作成しようとしています。 (最小は1です)ユーザーが選択するランダムなmaxを設定する方法

私はアクティビティAからアクティビティBへのint変数を呼び出すことに成功しましたが、ランダムに使用するとアプリケーションがクラッシュしました。

ここで私はint型のために呼び出します。

Intent intent = getIntent(); 
highNum = intent.getIntExtra("highNum", 0); 

とランダムに置く:

Random random = new Random(); 
mainNum = random.nextInt(highNum) + 1; 

私はすでにintは本当にdefualtよりも高い数値に等しいことを確認 - 0

スタックフローの重要な部分が私の厚さです:

0私は mainNumを設定する場所
Caused by: java.lang.IllegalArgumentException: n <= 0: 0 
at java.util.Random.nextInt(Random.java:182) 
at com.appstudio.shirdn.sevenboom.MainActivity.randomNumber(MainActivity.java:148) 
at com.appstudio.shirdn.sevenboom.MainActivity.onCreate(MainActivity.java:40) 

ライン148であり、ライン40は、私は、ランダムなクラスを求めるonCreate クラスです。

ありがとうございました!

+6

クラッシュのスタックトレースとは何ですか?それは常に知っておくことが重要です。 –

+0

Activity-Aにはどこに特別な "highNum"を入れますか? – Yazan

答えて

0

スタックトレースは、AndroidプラットフォームのAPIレベル23からのコードの実際の線であり、あなたがRandom.nextInt()に渡される数は、実際にここでは0であることを語っている:

public int nextInt(int n) { 
    if (n <= 0) { 
     throw new IllegalArgumentException("n <= 0: " + n); 
    } 
    ... 
} 

は、あなたがメッセージであることがわかりますnの値を例外エラーメッセージに挿入します。これは、あなたのhighNumの値に相当します。

このメソッドに渡される直前のhighNumの値を確認してください。ここ

mainNum = random.nextInt(highNum) + 1; 

あることを起こるあなたは乱数を生成しようとしているが、あなたは、パラメータ**として渡さバインドを検証していないので

0

この例外はあります変数highNumは正である必要があります

ソリューション:

nextIntメソッドに値を渡す前に、変数highNumを検証:あなたがそれを必要とする場合は、公式Documentationに見てみ

if (highNum > 0) { 
    mainNum = random.nextInt(highNum) + 1; 
} 

は、のような単純な何かを

パラメータ:上限(上限)を拘束します。正でなければなりません。

関連する問題