【问题标题】:How do I change the value of a variable on top of the same existing variable -- multiple times? (Java)如何在同一个现有变量之上更改变量的值 - 多次? (爪哇)
【发布时间】:2019-02-24 11:43:13
【问题描述】:

因此,我挑战自己创建一个包含用户输入系统的简单计算器。

第一段代码(如下所示)询问用户他们的号码是多少,并将其存储在一个名为“num”的double中。

然后程序会询问用户他们想要做什么(加、减、乘、除或显示答案),我把它放在 while 循环中, 因为我在想他们可能希望使用超过 2 个数字。如果用户想要答案,那么他们会选择那个,while 循环将停止。

我的问题是,我希望程序能够将数字与之前的现有数字相加、减法等。本质上,我希望变量的值反复改变,但我只是不知道该怎么做。

例如,如果用户从数字 2 开始,然后加 2,然后乘以 4,那么答案应该是 16。我只是无法让我的代码这样做。

考虑到我已经对其进行了测试,我意识到我的代码是错误的,但我无法完全理解我需要做什么。我觉得我已经很接近了,但是任何事情都可以进行,因为我对 Java 还是有点陌生​​。

任何帮助将不胜感激!谢谢!

我认为此链接可以将您带到该站点进行编辑,什么不是:https://repl.it/@ANGELRAMIREZ6/Basic-Calculator

这是我的代码:

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);
      }
  }
 }
}

【问题讨论】:

  • 您的 switch 缺少 break 语句。
  • 第一:不要为同一输入流创建到Scanners - 如果用户在同一行输入多个值,这将导致问题。第二:输入操作后,用户需要输入第二个值的方法。

标签: java variables calculator


【解决方案1】:

感谢所有贡献并帮助调整我的代码的人,我设法让我的第一个计算器工作了!这是非常基础的,真的可以做很多工作;这么多的工作,但基本已经完成了!它本质上是一个工作计算器!虽然,它只能做加法、减法、乘法和除法。它不能做更多的事情。如果有人想看看我现在拥有的东西,我会发布代码的链接,以便您可以根据需要运行它。再次感谢大家。

链接:https://repl.it/@ANGELRAMIREZ6/Basic-Calculator-1Fixed

(我如何修复我的代码 - 解释) -- 好的,回顾我的第一段代码,我确实有一些不必要的扫描仪,我最终取出了(为 Thomas Kläger 和 Steven 干杯斯彭金)。

之后,我修正了计算的完成方式。最初,我无法理解它们应该如何工作,所以我非常笨拙地让它们都与同一段代码相关:num += num,本质上是 num = num + num(对 tshimkus、Daniel Rivero Capellan 和 Steven Spungin 的支持让我对这个愚蠢的错误大开眼界。我将其更改为 answer += num,这样会产生更多感觉。

修复计算后,我认为我的代码可以工作,但我停下来,因为我得到的计算是完全随机的,根本不正确。或者,更确切地说,程序在做我错误地编码它要做的事情时做的事情是正确的。特别感谢 Steven Spungin,他一刀切,帮助我理解问题出在我的价值观被存储的方式上。

循环不断询问要使用哪些数字以及要对它们做什么(加、减等)之前,我提示用户输入他们想要的数字首先将该值设置为 answer,,然后我运行 循环。 在此循环中,由同一提示输入的任何数字,输入一个数字,将被存储到 num 变量中,并最终与初始数字相加、相减、相乘或相除,其值为 answer。 并且在逻辑上/从数学上讲,这是有道理的,考虑到第一个值是 answer,,后面的数字是 num,,当您查看以下代码时,这是有道理的:answer += num

总而言之,这是一个简单的程序,启动起来有点棘手(至少对我而言)。我向所有 Java 编码初学者推荐这个小项目。该程序远未完成,我确信代码可以更有效地执行,但我会继续使用我的 char = W;对于这个。 (我什至添加了一个“除以零”的错误。你自己试试吧!)

非常感谢所有帮助过的人!

如果链接不起作用,这是我的工作代码:

导入 java.util.Scanner;

扫描仪 sc = new Scanner(System.in);

双数=0,答案=0; int 什么,keepGoing = 1,keepAsking = 1;

System.out.println("输入一个数字:"); 答案 = sc.nextDouble();

while (keepGoing == 1) {

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

  if (what != 5) {
      do {
      System.out.println("Enter a number: ");
      num = sc.nextDouble();
      keepAsking = 2;
    }
  while (keepAsking == 1);
  }

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

    case 2:
    answer -= num;
    break;

    case 3:
    answer *= num;
    break;

    case 4:
    answer /= num;
    break;
  }

  if (what == 4 && answer == 0) {
    System.out.println("ERROR. Cannot divide by zero. Try again.");
    keepGoing = 2;
  }

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

【讨论】:

    【解决方案2】:
    • 使用 println 代替 print 来刷新输出,或手动刷新
    • 您只需要一台扫描仪
    • answer初始化为0
    • 你的开关中的行应该改变answer
          case 1:
          answer += num;
          break;
    
    • 在每个case 中使用break

    还有:

    • 检查divide by 0
    • 捕获无效输入错误
    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);
        }
    }
    

    修正你的计算逻辑:

    • 询问号码并分配给answer
    • 开始循环请求操作,然后是数字。

    【讨论】:

    • 我处理了额外的 Scanners,修正了我更改 num 变量而不是 answer 变量的错误,并在每个 case 之后添加了中断,程序可以运行,但计算似乎全部弄乱。当我输入 4 并将其除以 2(基本上是 4/2)时,程序给了我 0.0 的答案。然而,我确实注意到的一件事是,当我尝试做 5+5+5+5 时,答案总是比它应该给出的值小 5。例如,5+5+5+5 = 15 而不是 20。我认为这与值的存储和使用方式有关?
    • 您得到了错误的答案,因为您的操作适用于前面的值。退出时忽略最后一个值。您需要询问号码,设置答案,然后开始循环,首先询问操作。
    • > 当我输入 4 并除以 2 时。你在做 0/4,然后忽略 2。
    • 天哪!谢谢!代码本身一点也不难,但它让我思考了哪些值将分配给哪些变量!我就是这样做的;在您的更正下修复了我的代码,运行了我的代码,但唯一的是,在我结束循环(设置 keepGoing = 2)后,while 循环最终将再次运行我的代码,它会让我输入另一个数字那根本没有做任何事情,但是之后,它会给我任何计算的正确答案。剩下要做的就是用一个简单的 do...while 循环来解决这个问题。非常感谢!
    【解决方案3】:

    Appart 其他用户已经注意到了。错误的 switch case 语句和同一流中的多个读取器。我建议以下。

    您必须在使用变量 answer 之前对其进行初始化。例如到 0。

    Second num+=num 表示num = num + num,您想要的是将运算结果累积到答案中,例如answer = answer+num。这可以通过answer+=num 来实现。

    通过此更改,您的计算器应该可以正常工作。

    【讨论】:

    • 我处理了额外的 Scanners,修正了我更改 num 变量而不是 answer 变量的错误,并在每个 case 之后添加了中断,程序可以运行,但计算似乎全部弄乱。当我输入 4 并将其除以 2(基本上是 4/2)时,程序给了我 0.0 的答案。然而,我确实注意到的一件事是,当我尝试做 5+5+5+5 时,答案总是比它应该给出的值小 5。例如,5+5+5+5 = 15 而不是 20。我认为这与值的存储和使用方式有关?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多