2016-10-07 5 views
-3

私は1と12の間のランダムを作りようとしていますが、結果はすでに否定的であり、それは私にアプリの停止をさせます。Android Randomは否定的な結果になります。どのように修正するのですか?

これは私のコードです:

public class PlacementPerso extends AireDeJeu{ 
private boolean trou1, trou2, trou3, trou4, trou5, trou6, trou7, trou8, trou9, trou10, trou11, trou12; 

private Random r = new Random(); 
private int random, baseMax, baseMin; 

public void PlacementPerso(){ 
    trou1 = true; trou2 = true; trou3 = true; trou4 = true; trou5 = true; trou6 = true; trou7 = true; trou8 = true; trou9 = true; trou10 = true; trou11 = true; trou12 = true; 
    random = 1; baseMax = 1; baseMin = 12; 

} 

public void aPlacer(Perso pPerso){ 
    final int ressource = pPerso.getRessource(); 


//This is the crash line 
    random = r.nextInt((baseMax - baseMin) + 1) + baseMin; 
/** 
* 
* AND MORE .... 
* 
*/ 

、呼び出し元:

public class GenerateurPartie extends GenerateurPerso{ 

private int mNiveau; 
public static int mAvancement = 0; 
private int mDelai; 
private Thread mThread; 
private Perso mPerso; 

private final HandlerDelai handlerDelai = new HandlerDelai(); 

protected static PlacementPerso mPlacementPerso = new PlacementPerso(); 

public GenerateurPartie(int pNiveau) { 
    this.mNiveau = pNiveau; 
    this.mDelai = 2500; 

    mPlacementPerso.PlacementPerso(); 
    mThread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
      int i = 0; 
       while (mAvancement < 100) { 

        i += 1; 

        if (mAvancement >= 80) 
         mDelai = mDelai/2; 

         Thread.sleep(mDelai); 

        handlerDelai.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          mPerso = GenerateurPerso(mNiveau, mAvancement); 

          mPlacementPerso.aPlacer(mPerso); 
         } 
        }, mDelai); 
       } 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
    }}); 
    mThread.start(); 


    } 
} 

私はすでにStackOverflowの上でいくつかのスレッドを読んで、彼らが行うことをお勧め何しようと試みたが、何も私の問題を解決しませんしました。 私は "random = 1;"のままにしようとしました。私のクラス "PlacementPerso"では、しかし方法はすでに同じです。

これは私のログです:

10-07 10:42:17.885 490-490/com.dunomade.ecraseurdetaupe E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.dunomade.ecraseurdetaupe, PID: 490 
                     java.lang.IllegalArgumentException: n <= 0: -10 
                      at java.util.Random.nextInt(Random.java:182) 
                      at com.dunomade.ecraseurdetaupe.PlacementPerso.aPlacer(PlacementPerso.java:27) 
                      at com.dunomade.ecraseurdetaupe.GenerateurPartie$1$1.run(GenerateurPartie.java:56) 
                      at android.os.Handler.handleCallback(Handler.java:815) 
                      at android.os.Handler.dispatchMessage(Handler.java:104) 
                      at android.os.Looper.loop(Looper.java:207) 
                      at android.app.ActivityThread.main(ActivityThread.java:5728) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 

たぶん誰かがそれを解決する方法を知っています。なぜ私の結果が既に< = 0であるのか分かりません。 ありがとうございます=)

+6

最大値と最小値を反転したようですか?最大は1、最小は12です。 –

+1

ありがとうございました!!!!それは問題だった=)私は盲目だった... – LeNomade

答えて

1

@ cherry-waveは「あなたは最大値と最小値を反転しました」と言っています。

 //your values in class 
     int baseMax = 1; 
     int baseMin = 12; 

     //when calling method to do math, first find the right min and max value 
     int fixedMax = Math.max(baseMax, baseMin); 
     int fixedMin = Math.min(baseMax, baseMin); 

     //your further coce 
     Random r = new Random(); 
     int random = r.nextInt((fixedMax - fixedMin) + 1) + fixedMin; 

または例外すなわちによってあなたの操作を扱う:

将来的には、あなたがまた、このような何かを行うことができますwchichある値がわからない場合は、例外をthorwingかによって、そのエラーを処理するために良い方法です
 //checking if all is OK, because it MUST BE OK 
     if (baseMax < baseMin) { 
      throw new UnsupportedOperationException("hey first value is smaller than second"); 
     } 
     random = r.nextInt((baseMax - baseMin) + 1) + baseMin; 
0

単にbaseMinとbaseMaxの場所を間違えたことがあります。 baseMax> baseMinが必要です。それらを交換することで、問題は解決されます。 これはbaseMax = 12、baseMin = 1です。

関連する問題