0
votes

Comment modifier la valeur d'une variable en haut de la même variable existante - plusieurs fois? (Java)

Donc, je me suis défié de créer une simple calculatrice ayant incorporé un système d'entrée utilisateur.

Le premier bit de code (indiqué ci-dessous) demande à l'utilisateur quel est leur numéro et le stocke dans un double double fort> appelé "num." strong> p>

Le programme demande ensuite à l'utilisateur ce qu'ils veulent faire (ajouter, soustraire, multiplier, diviser ou montrer la réponse) et je mets ceci Dans une boucle tandis que la boucle, forte> parce que je pense qu'ils voudront peut-être travailler avec plus de 2 chiffres. Si l'utilisateur veut la réponse, ils choisiront que la boucle tandis que la boucle s'arrête. P>

Mon problème est que je souhaite que le programme puisse prendre le numéro et ajouter, soustraire, etc., avec le nombre existant d'avant. Essentiellement, je veux que la valeur de la variable change à plusieurs reprises, mais je ne sais tout simplement pas comment faire cela. Strong> p>

Par exemple, si l'utilisateur commence avec le numéro 2, et Ajoute 2, puis la multiplie par 4, la réponse devrait alors être de 16 ans. Je ne peux tout simplement pas obtenir mon code pour le faire. P>

Je me rends compte que mon code a tort, considérant que je l'ai testé, mais je ne peux tout simplement pas envelopper la tête autour de ce que je dois faire. Je me sens comme si je suis proche, mais tout peut aller comme je suis toujours en quelque sorte nouveau à Java. P>

Toute aide serait appréciée! Merci! P>

Je pense que ce lien pourrait vous emmener sur le site pour le modifier et que ce n'est pas le cas: https://repl.it/@angelramirez6/basic-calculator p>

Voici mon code: p>

import java.util.Scanner;

class Main {

  public static void main(String args[]) {

    Scanner userWhatWillDo = new Scanner(System.in);
    Scanner userNum = new Scanner(System.in);

    double num, answer;
    int what, numOfNums, keepGoing = 1;

    while (keepGoing == 1) {

       System.out.print("Enter a number: ");
       num = userNum.nextDouble();

       System.out.println("1=Add; 2=Subtract; 3=Multiply; 4=Divide; 5=Answer");
       what = userWhatWillDo.nextInt();

       switch(what) {
         case 1:
            num += num;
            break;

        case 2:
            num -= num;
            break;

        case 3:
            num *= num;

        case 4:
            num /= num;
      }

      if(what == 5) {
        keepGoing = 2;
        System.out.println(answer);
      }
  }
 }
}


2 commentaires

Votre commutateur manque des relevés de pause.


Premièrement: Ne créez pas à Scanner S pour le même flux d'entrée - cela entraînera des problèmes si les utilisateurs entrent plusieurs valeurs sur la même ligne. Deuxièmement: après avoir entré l'opération, l'utilisateur a besoin d'un moyen d'entrer la deuxième valeur.


3 Réponses :


0
votes
  • Utilisez PrintLN au lieu d'imprimer pour chasser la sortie, ou affleurez manuellement li>
  • Vous n'avez besoin que d'un scanner li>
  • init réponse code> à 0 li>
  • Les lignes de votre commutateur doivent altérer réponse code> li>
    Scanner sc = new Scanner(System.in);
    
    double num, answer=0;
    int what, numOfNums, keepGoing = 1;
    
    while (keepGoing == 1) {
    
        System.out.println("Enter a number: ");
        num = sc.nextDouble();
    
        System.out.println("1=Add; 2=Subtract; 3=Multiply; 4=Divide; 5=Answer");
        what = sc.nextInt();
    
        switch(what) {
          case 1:
          answer += num;
          break;
    
          case 2:
          answer -= num;
          break;
    
          case 3:
          answer *= num;
          break;
    
          case 4:
          answer /= num;
          break
        }
    
        if(what == 5) {
          keepGoing = 2;
          System.out.println(answer);
        }
    }
    
    • Utilisez break code> dans chaque cas code> li> ul>

      Aussi: p>

      • Vérifiez que Divisez par 0 CODE> LI>
      • attrape des erreurs d'entrée non valides li> ul> xxx pré>

        pour corriger votre logique de calcul: p>

        • Demandez le numéro et attribuer à Réponse CODE> LI>
        • Démarrez votre boucle Demander une opération, puis le numéro. Li> ul> ul>

4 commentaires

J'ai pris soin des scanners supplémentaires, corrigé mon erreur de modifier la variable NUM au lieu de la variable de réponse et a ajouté des pauses après chaque cas, et le programme peut fonctionner, mais les calculs semblent être tous gâchés. Lorsque je l'ai saisi 4 et divisé par 2 (essentiellement 4/2), le programme m'a donné 0,0 pour ma réponse. Une chose que j'ai remarquée, cependant, est que lorsque j'ai essayé de faire 5 + 5 + 5 + 5, la réponse a toujours été 5 de moins que la valeur qu'elle était censée donner. Par exemple, 5 + 5 + 5 + 5 = 15 au lieu de 20. Je pense que cela a quelque chose à voir avec la manière dont les valeurs sont stockées, puis utilisées?


Vous obtenez la mauvaise réponse car votre opération s'applique à la valeur précédente. Vous ignorez la dernière valeur lors de la sortie. Vous devez demander le numéro, définir la réponse à celle-ci, puis commencer la boucle, demandant d'abord l'opération.


> Lorsque je l'ai saisi 4 et divisé par 2. Vous faites 0/4, puis ignorez le 2.


Oh mon Dieu! Merci! Le code lui-même n'était pas du tout difficile, mais il était enroulé de la tête autour de quelles valeurs seraient assignées à quelles variables! J'ai fait ça juste; Correction de mon code sous vos corrections, couru mon code, mais la seule chose que la boucle tandis que la boucle tandis que de manquerait de mon code à la fin après avoir terminé la boucle (réglage de la maintenance = 2) et il me serait saisir un autre numéro Cela n'a rien fait du tout, mais ensuite, cela me donnerait la bonne réponse à tout calcul. Tout ce qu'il y avait laissé faire était de résoudre ce problème avec une simple boucle. Merci beaucoup!



0
votes

appart Les autres utilisateurs ont remarqué. Instruction de cas de commutation incorrecte et plusieurs lecteurs dans le même flux. Je suggère ce qui suit.

Vous devez initialiser la réponse variable avant de l'utiliser. Par exemple à 0.

second num + = num signifie num = num + num et ce que vous voulez accumuler l'opération Résultats dans la réponse, Réponse = Réponse + Num . Qui peut être atteint avec réponse + = num .

Avec cette modification de votre calculatrice doit fonctionner correctement.


1 commentaires

J'ai pris soin des scanners supplémentaires, corrigé mon erreur de modifier la variable NUM au lieu de la variable de réponse et a ajouté des pauses après chaque cas, et le programme peut fonctionner, mais les calculs semblent être tous gâchés. Lorsque je l'ai saisi 4 et divisé par 2 (essentiellement 4/2), le programme m'a donné 0,0 pour ma réponse. Une chose que j'ai remarquée, cependant, est que lorsque j'ai essayé de faire 5 + 5 + 5 + 5, la réponse a toujours été 5 de moins que la valeur qu'elle était censée donner. Par exemple, 5 + 5 + 5 + 5 = 15 au lieu de 20. Je pense que cela a quelque chose à voir avec la manière dont les valeurs sont stockées, puis utilisées?



1
votes

Merci à tous ceux qui ont contribué et ont aidé à modifier mon code, j'ai réussi à obtenir ma toute première calculatrice de travail! C'est très basique et pourrait vraiment utiliser beaucoup de travail; Tant de travail, mais les bases sont très bien faites! C'est essentiellement une calculatrice de travail! Cependant, cela ne peut faire que des additions, une soustraction, une multiplication et une division. Cela ne peut pas faire beaucoup plus que cela. Si quelqu'un veut voir ce que j'ai maintenant, je posterai le lien vers le code afin que vous puissiez l'exécuter si vous le souhaitez. Encore une fois, merci à tous.

lien: https://repl.it/@angelramirez6/basic-Calculator-1Fixed

(comment j'ai réparé mon code - explications) - D'accord, je suis donc en train de regarder mon premier code, j'ai eu des scanners inutiles que j'ai mis fin à prendre Out (acclamations à Thomas Kläger et Steven Spungin).

Après cela, j'ai ensuite fixé comment les calculs ont été effectués. Initialement, je ne pouvais pas envelopper ma tête autour de la façon dont ils étaient censés travailler, alors je les ai donc fabriqués très maladroitement de ce même morceau de code: num + = num + = Num , qui était essentiellement NUM = NUM ​​+ NUM (accessoires à Tshimkus, Daniel Rivero Capellan et Steven Spungin qui ouvrit mes yeux sur cette erreur idiote. Je l'ai changé à Réponse + = Num , ce qui fait beaucoup plus sens.

Après avoir fixé les calculs, je pensais que mon code fonctionnerait, mais je suis arrivé à un arrêt, car les calculs que je recevais étaient complètement aléatoires et non corrects du tout. Ou, plutôt, le programme était Faire la bonne chose à faire ce que j'avais mal codé à faire. Spécial grâce à Steven Spungin qui a tout mis en pierre et m'a aidé à comprendre que le problème menti dans la manière dont mes valeurs étaient stockées.

Avant une boucle demanderait en permanence quels chiffres voudraient être utilisés et ce qui allait leur être fait (ajouter, soustraire, etc.), j'ai incité l'utilisateur Avec quel nombre ils voulaient commencer avec et définir cette valeur sur réponse, , puis j'ai couru la boucle. dans cette boucle, tout numéro entré par la même invite, < Strong> Entrez un nombre , serait stocké dans la variable num et serait ajouté, soustrait, multiplié, multiplié ou divisé au nombre initial, dont la valeur était réponse. < / fort> et logiquement / mathématiquement, cela a du sens, compte tenu de la première valeur serait réponse, et les chiffres suivants seraient num, et il est logique quand vous regardez Ce code: réponse + = num .

Au total, c'était un programme simple avec un peu une exécution délicate pour le démarrer (au moins pour moi). Je recommande ce petit projet pour tous ceux qui sont un débutant dans le codage de Java. Le programme est loin d'être terminé et je suis sûr que le code pourrait être exécuté beaucoup plus efficacement, mais je vais aller de l'avant et prendre mon char = w; Pour celui-ci. (J'ai même ajouté une erreur "Divide par zéro". Allez-y et essayez-le vous-même!)

gros merci à tous ceux qui ont aidé!

au cas où Le lien ne fonctionne pas, voici mon code de travail:

importer java.util.scanner;

scanner SC = nouveau scanner (système.in);

double num = 0, réponse = 0; int quoi, retenir = 1, retenue = 1;

system.out.println ("Entrez un numéro:"); Réponse = SC.NextDouble ();

tandis que (redevable == 1) { xxx


0 commentaires