Android Random дает отрицательный результат, как это исправить?

#android #random

#Android #Случайный

Вопрос:

Я пытаюсь сделать случайное значение от 1 до 12. Но результат уже отрицательный, и это заставляет меня остановить приложение.

Это мои коды :

 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 .
Заранее спасибо =)

Комментарии:

1. Кажется, вы изменили значения max и min? max равно 1, а min равно 12.

2. Большое спасибо!!!! Это была проблема =) Я был ослеплен…

Ответ №1:

Как сказал @cherry-wave: «Вы изменили значения max и min». В будущем рекомендуется обрабатывать эту ошибку путем исключения исключений или, если вы не знаете, какое значение имеет значение, вы также можете сделать что-то подобное:

         //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;
  

Или обработайте вашу операцию с помощью исключения, т.е.:

         //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;
  

Ответ №2:

Просто вы перепутали место baseMin и baseMax. У нас должно быть baseMax> baseMin. Поменяв их местами, ваша проблема будет решена. То есть baseMax = 12, baseMin = 1;