Serait-il plus facile de garder le code comme instructions if imbriquées ou à essayer de le convertir à un commutateur ou plusieurs commutateurs

J'ai terminé un codage d'affectation de la classe et a donné de la rétroaction par un ami qui le sous-fi peut paraître beaucoup mieux que les instructions switch

J'ai essayé de le convertir en des interrupteurs, mais il semble être sur la même si ce n'est plus de travail.

//this is the absolute basic frame of the code created
if(arg){
    //code
    if(arg){
        //code
        if(arg){
            //code
        }
        else if(arg){
            //code
        }
    }
    else if(arg){
        //code
    }
else if(arg){
    //code
}

Serait-il plus facile et plus belle si elle a été converti pour passer des déclarations ou serait-il le même si ce n'est pire gâchis?

EDIT: pour ghostcat, c'est la pleine section de code que j'ai simplifié pour la question

while(loop == true){
        System.out.print("Do you have more students to enter (Y for yes, N for no): ");
        yn = input.nextLine();
        if(yn.equals("Y") || yn.equals("y")) {
            System.out.print("Undergraduate or Graduate? (U for undergraduate, G for graduate): ");
            ug = input.nextLine();
            if(ug.equals("U") || ug.equals("u")) {
                System.out.print("Student name: ");
                NAME = input.nextLine();
                System.out.print("Student ID: ");
                ID = input.nextInt();
                System.out.print("Student GPA: ");
                GPA = input.nextFloat();
                System.out.print("Is student a transfer student? (Y for yes, N for no): ");
                input.nextLine();
                transfer = input.nextLine();
                if(transfer.equals("Y") || transfer.equals("y")) {
                    ts = true;
                    students.add(new UndergradStudent(NAME, ID, GPA, ts));
                }
                else if(transfer.equals("N") || transfer.equals("n")) {
                    ts = false;
                    students.add(new UndergradStudent(NAME, ID, GPA, ts));
                }
            }
            else if(ug.equals("G") || ug.equals("g")) {
                System.out.print("Student name: ");
                NAME = input.nextLine();
                System.out.print("Student ID: ");
                ID = input.nextInt();
                System.out.print("Student GPA: ");
                GPA = input.nextFloat();
                System.out.print("What college did the student graduate from: ");
                input.nextLine();
                college = input.nextLine();
                students.add(new GradStudent(NAME, ID, GPA, college));
            }
        }
        else if(yn.equals("N") || yn.equals("n")) {
            loop = false;
        }
    }
+1
2019-09-18 05:19:29
source
1 réponses

L'idée de la file d'attente de priorité, c'est que lorsque vous pop quelque chose, il vous donne la plus haute priorité dans la file d'attente. Vous n'avez pas besoin de régler la chose vous-même. C'est juste de faire du travail supplémentaire.

Si vous voulez sortir le reste de la file d'attente par ordre de priorité, vous pouvez remplacer votre dernière boucle avec ceci:

while (len(priority) > 0)
    print(heapq.heappop(priority));

Chaque appel à heappop sera de retour la plus haute priorité encore dans la file d'attente.

Ne comptez pas sur d'obtenir exactement le résultat que vous attendez, cependant. heapq ne garantit pas la suppression de l'ordre des éléments qui ont la même priorité. Par exemple, si vous insérez des éléments dans cet ordre:

10 1
11 2
12 2
13 3

Et puis les retirer, le résultat sera 10 11 12 13. Mais si vous avez changé l'ordre d'insertion à:

10 1
13 3
11 2
12 2

Alors la sortie sera 10 12 11 13.

+1
2019-09-18 05:35:09

Voir d'autres questions sur les étiquettes