Несколько исключений в Java - PullRequest
0 голосов
/ 21 ноября 2018

Есть 3 различных типа выходов, случайным образом.Может кто-нибудь объяснить, почему выходы такие?

Out1 => "m1_1 m1_3 m1_4 m2_1 m2_3 m3_1 m3_3" Исключение Case3.

Out2 => «m1_1 m2_2 m2_3 m3_1 m3_3» Исключение кейса2.

Out3 => «m1_1 m3_2 m3_3» Исключение кейса1.

Классы:

class Exception1 extends Exception {
}

class Exception2 extends Exception {
}

class Exception3 extends Exception {
}

public class C {

  public void method1() throws Exception1, Exception2 {
    try {
        System.out.println(Math.random()+"\n");
        System.out.println("m1_1");
        //some code here that will randomly throw Exception1,2,or3
        if (Math.random() <= 0.3) {
            throw new Exception1();
        }
        if (Math.random() < 0.6) {
            throw new Exception2();
        }
        if (Math.random() < 0.9) {
            throw new Exception3();
        }
        System.out.println("m1_2");
    } catch (Exception3 e3) {
        System.out.println("m1_3");
    }
    System.out.println("m1_4");
  }

  public void method2() throws Exception1 {
    try {
        method1();
        System.out.println("m2_1");
    } catch (Exception2 e2) {

        System.out.println("m2_2");
    }
    System.out.println("m2_3");
  }

  public void method3() {
    try {
        method2();
        System.out.println("m3_1");
    } catch (Exception1 e1) {

        System.out.println("m3_2");
    }
    System.out.println("m3_3");
  }
}

тестер классов {

public static void main(String[] a) {
    C c = new C();
    c.method3();
}

}

1 Ответ

0 голосов
/ 21 ноября 2018

Ваши две проблемы заключаются в том, что у вас есть несколько вызовов Math.random и несколько if, которые соответствуют одному условию.

Вам необходимо получить 1 число из Math.random () и использовать его, например:

double rand = Math.random();

Затем вам нужно будет переключить перекрывающиеся ifs на else ifs, так как, если бы rand был равен 0.1, он бы подходил всем 3, если условия.

Таким образом, в конце method1 должен выглядеть примерно такэто:

public void method1() throws Exception1, Exception2 {
    try {
        double rand = Math.random();
        System.out.println(rand+"\n");
        System.out.println("m1_1");
        //some code here that will randomly throw Exception1,2,or3
        if (rand <= 0.3) {
            throw new Exception1();
        }
        else if (rand < 0.6) {
            throw new Exception2();
        }
        else if (rand < 0.9) {
            throw new Exception3();
        }
        System.out.println("m1_2");
    } catch (Exception3 e3) {
        System.out.println("m1_3");
    }
    System.out.println("m1_4");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...