2017-07-26 3 views
0

Je suis tout à fait nouveau à java et très nouveau à faire en boucle. J'ai un problème avec la boucle, j'ai fait une calculatrice de base et lui ai donné une option pour calculer autre chose après avoir calculé quelque chose. Lorsque cette option vient et que j'entre "Y" (majuscule), elle "redémarre" mais si je réponds "y" (minuscule) cela revient à ce que vous avez choisi. Donc par exemple: Si je démarre la calculatrice, j'obtiens 5 options, si je choisis l'option numéro 1 et j'arrive à la fin, j'ai le choix: Si je veux "essayer à nouveau", donc si je choisis de répondre "Y" le tout retourne à l '"écran" où je dois faire mon choix sur ce qu'il faut faire. Mais quand je choisis de répondre "y", cela revient au point de mon choix précédent. Comme si je choisis l'option 1 et que je réponds «y», cela revient à l'option 1.Faire tandis que la boucle commence au mauvais point [Java]

J'ai essayé de chercher en ligne mais je n'ai rien trouvé, donc je ne sais pas utiliser les bons mots-clés ou faire d'autres personnes pas rencontré mon problème très souvent.

Voici la calculatrice, il y a quelques mots hollandais en elle comme calculatrice ou très mauvais anglais, mais aucun d'entre eux comptent en aucune façon:

import java.util.*; 

public class GEKENMCHINENENE { 
    public static void main(String[] args){ 

     char aga = 'y'; 
     while(aga == 'y' || aga == 'Y'){ 
     Scanner antwoord = new Scanner(System.in); 
     int aw; 

do{ 

    System.out.println("enter 1 for addition. enter 2 for subtraction. enter 3 for division. enter 4 for multiplication."); 
    System.out.println("+------------------------------+"); 
    System.out.println("|   Calculator   |"); 
    System.out.println("|------------------------------|"); 
    System.out.println("| Press 1 for addition  |"); 
    System.out.println("| Press 2 for subtraction  |"); 
    System.out.println("| Press 3 for division  |"); 
    System.out.println("| Press 4 for multiplication |"); 
    System.out.println("| Press 5 for my social media |"); 
    System.out.println("| *credit to creepershelp* |"); 
    System.out.println("|  *on pastebin*   |"); 
    System.out.println("+------------------------------+"); 


    aw = antwoord.nextInt(); 

    do{ 

     if (aw > 5){ 
      System.out.println("That number is out of range, try aga within the range of 1 - 4"); 
     aw = antwoord.nextInt(); 

     }else if(aw < 1){ 
      System.out.println("That number is out of range, try aga within the range of 1 - 4"); 
     aw = antwoord.nextInt(); 
     }else if(aw < -1){ 
      System.out.println("That number is out of range, try aga within the range of 1 - 4"); 
     aw = antwoord.nextInt(); 
     } 

     if(aw == 1){ 
      System.out.println("You choose for 1, addition. Enter your first number."); 
     double fnum = antwoord.nextDouble(); 
      System.out.println("Enter your second number"); 
     double snum = antwoord.nextDouble(); 
     double awp = fnum + snum; 
      System.out.println("The answer is " + awp); 
      System.out.println("Wood you like to reken uit something else? [Y/N]"); 
      aga = antwoord.next().charAt(0); 


      if(aga == 'n'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'n'){ 
       aga = 'n'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'N'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'N'){ 
       aga = 'N'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'y'){ 
       System.out.println("Please wait!"); 
      }else if(aga == 'Y'){ 
       System.out.println("Please wait!"); 
      aw = 0; 
      } 
     } 

     if(aw == 2){ 
      System.out.println("You choose for 2, subtraction. Enter your first number."); 
     double fnum = antwoord.nextDouble(); 
      System.out.println("Enter your second number"); 
     double snum = antwoord.nextDouble(); 
     double awp = fnum - snum; 
      System.out.println("The answer is " + awp); 
      System.out.println("Wood you like to reken uit something else? [Y/N]"); 
      aga = antwoord.next().charAt(0); 


      if(aga == 'n'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'n'){ 
       aga = 'n'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'N'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'N'){ 
       aga = 'N'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'y'){ 
       System.out.println("Please wait!"); 
      }else if(aga == 'Y'){ 
       System.out.println("Please wait!"); 
      aw = 0; 
      } 
     } 

     if(aw == 3){ 
      System.out.println("You choose for 3, division. Enter your first number."); 
     double fnum = antwoord.nextDouble(); 
      System.out.println("Enter your second number"); 
     double snum = antwoord.nextDouble(); 
     double awp = fnum/snum; 
      System.out.println("The answer is " + awp); 
      System.out.println("Wood you like to reken uit something else? [Y/N]"); 
      aga = antwoord.next().charAt(0); 


      if(aga == 'n'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'n'){ 
       aga = 'n'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'N'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'N'){ 
       aga = 'N'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'y'){ 
       System.out.println("Please wait!"); 
      }else if(aga == 'Y'){ 
       System.out.println("Please wait!"); 
      aw = 0; 
      } 
     } 

     if(aw == 4){ 
      System.out.println("You choose for 4, multiplication. Enter your first number."); 
     double fnum = antwoord.nextDouble(); 
      System.out.println("Enter your second number"); 
     double snum = antwoord.nextDouble(); 
     double awp = fnum * snum; 
      System.out.println("The answer is " + awp); 
      System.out.println("Wood you like to reken uit something else? [Y/N]"); 
      aga = antwoord.next().charAt(0); 


      if(aga == 'n'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'n'){ 
       aga = 'n'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'N'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'N'){ 
       aga = 'N'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'y'){ 
       System.out.println("Please wait!"); 
      }else if(aga == 'Y'){ 
       System.out.println("Please wait!"); 
      aw = 0; 
      } 

     }if(aw == 5){ 
      System.out.println("Instagram: rubettt, https://www.instagram.com/rubettt/?hl=en"); 
      System.out.println("Snapchat: rubet23-1212121"); 
      System.out.println("Wood you like to reken uit something else? [Y/N]"); 
      aga = antwoord.next().charAt(0); 


      if(aga == 'n'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'n'){ 
       aga = 'n'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'N'){ 
       System.out.println("Shutting down..."); 
      }if(aga == 'N'){ 
       aga = 'N'; 
       antwoord.close(); 
       break; 
      }else if(aga == 'y'){ 
       System.out.println("Please wait!"); 
      }else if(aga == 'Y'){ 
       System.out.println("Please wait!"); 
      aw = 0; 
      } 
     }if(aw == 0){ 
      System.out.println("Succesfully shut down!"); 
     }else if(aga == 'n' || aga == 'N'){ 
      System.out.println("Succesfully shut down!"); 
     } 

     }while(aw > 1 && aw <329108321); 

     }while(aga == 'y' || aga == 'Y'); 


     } 
    } 
} 

J'ai essayé de le faire changer « y » dans " Y "mais cela n'a pas fonctionné non plus. Si quelqu'un a des idées, aidez s'il vous plaît. J'aimerais savoir pourquoi c'est et comment je peux le réparer. Merci à l'avance,

-Rubet23

+2

Que voulez-vous dire "Ne fonctionne pas"? StackOverflow n'est pas un remplacement de debugger –

+0

Il est difficile de trouver des erreurs dans votre code, car il est vraiment déroutant de répéter des cas et est difficile à lire. Au lieu d'essayer de trouver l'erreur, vous devriez probablement réécrire le code et avant de le faire, vous devriez le planifier. Si tu veux, je peux t'aider mais à part ça, je ne peux pas faire grand-chose. – tomtzook

+0

Créez un nouveau projet et supprimez tout votre code sauf la boucle do while. À la fin de votre boucle while do pose la question et sélectionnez une option. Si cela fonctionne correctement, commencez à ajouter votre autre code. – Sedrick

Répondre

0

Note: Ce n'est pas une réponse, juste une critique sur la structure du code

Votre pour entrer « oui » et « non » est sujette à des erreurs parce que vous réutilisez le même code sur et encore. Créez une méthode qui renvoie une valeur booléenne.par exemple:

/** 
* This method will return true for yes and false for no. 
* It is private, because it is unnecessary for other 
* Classes to use it. 
*/ 
private boolean sayYes(String text){ 
    Scanner keyboard = new Scanner(System.in); 
    while(true){ 
     System.out.print(text); 
     // Gets keyboard input, trims it, and makes it lower case. 
     String input = keyboard.nextLine().trim().toLowerCase; 
     // Checks for "Yes" 
     if(input.equals("y") || input.equals("yes")) 
      return true; 
     // Checks for "No" 
     if(input.equals("n") || input.equals("no")) 
      return false; 
     // If we got here, then it was neither a "yes" or "no", 
     // so we complain, and go around the loop again 
     System.out.println("Invalid input."); 
    } 
    // The keyboard Scanner is not closed so the program can 
    // continue to receive keyboard input from other places. 
} 

Vous pouvez ensuite appeler cette méthode avec:

if(sayYes("Wood you like to reken uit something else? [Y/N]\n")){ 
    aw = 0; 
} else { 
    antwoord.close(); 
    break; 
} 

Cela permet également le système d'entrée pour être plus robuste, car ils sont donnés plusieurs coups à taper dans une réponse, et ils peut saisir le charabia complet sans casser le code. Vous pouvez également créer un système similaire pour récupérer des nombres.

+0

Rubet23 C'est le genre de chose dont je parle dans le commentaire de ma réponse. –

0

Vous avez oublié de mettre aw à 0 lors de l'enregistrement pour la minuscule « y » de sorte que les répétitions de la boucle while parce que vous ne modifiez le nombre. Au bas, votre code devrait dire:

//The stuff above this 
else if(aga == 'y'){ 
    System.out.println("Please wait!"); 
    aw = 0; 
} 
//The rest of your code` 

Cela n'a rien à voir avec votre question, mais je pense que vous devriez utiliser aga.toUpper() pour l'entrée en majuscules à chaque fois. De cette façon, vous n'avez pas besoin d'écrire deux fois le même code pour faire les deux cas; vous pouvez simplement tester l'instance en majuscule de la lettre.

Bonne chance!

+0

Je crois que ma solution fonctionnera; cependant, je vous recommande humblement de suivre les conseils des commentateurs ci-dessus et de passer du temps à nettoyer votre code et à supprimer les lignes inutiles avant de poursuivre votre projet. Cela rendra les choses plus faciles pour vous et vous serez un meilleur programmeur pour l'effort. :) –

0

Vous avez deux boucles qui exécutent while(aga == 'y' || aga == 'Y');. Il n'y a pas de distinction entre les deux. Si vous voulez que les deux possibilités se comportent de deux manières différentes, vous devez les utiliser de deux manières différentes.

Il semble que cela devrait se comporter comme vous le voulez quand vous déplacez l'une des comparaisons à l'autre while état:

while(aw > 1 && aw <329108321 && aga != 'y'); 

Notez que votre code est très difficile à lire parce que votre empreinte est ver incompatible .