首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初学者计算器,支持M,D,A,S两个数字运算

初学者计算器,支持M,D,A,S两个数字运算
EN

Code Review用户
提问于 2018-11-07 01:10:42
回答 1查看 96关注 0票数 1

我对编程很陌生,我有点理解方法的概念,但是,我对这个程序并不太感兴趣,我想用方法来缩短它,使它更容易阅读和理解。

代码语言:javascript
复制
import java.util.Scanner;

public class NewCalculator { 
   public static void main(String[] args) { 
      String usrInput = "";
      String Num1Input = "";
      String Num2Input = "";
      int Num1Int = 0;
      int Num2Int = 0;
      int SumOfTwo = 0;
      Scanner scnr = new Scanner(System.in);
      Scanner Num1 = new Scanner(System.in);
      Scanner Num2 = new Scanner(System.in);
      System.out.println("Please Enter (M)ultiplication, (D)ivision, (A)ddition, or (S)ubtraction");
      usrInput = scnr.next();
      System.out.println(usrInput);
      if (usrInput.equals("M")|| usrInput.equals("m")||
          usrInput.equals("D")|| usrInput.equals("d")||
          usrInput.equals("A")|| usrInput.equals("a")||
          usrInput.equals("S")|| usrInput.equals("s")
      )
          { //If Bracket
           switch (usrInput) {//Switch Bracket
            case "M":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int * Num2Int;
            System.out.println("The Answser to " + Num1Input + " * " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "m":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int * Num2Int;
            System.out.println("The Answser to " + Num1Input + " * " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "D":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int / Num2Int;
            System.out.println("The Answser to " + Num1Input + " / " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "d":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int / Num2Int;
            System.out.println("The Answser to " + Num1Input + " / " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "A":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int + Num2Int;
            System.out.println("The Answser to " + Num1Input + " + " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "a":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int + Num2Int;
            System.out.println("The Answser to " + Num1Input + " + " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "S":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int - Num2Int;
            System.out.println("The Answser to " + Num1Input + " - " + Num2Input + " Equals " + SumOfTwo);
            break;
            case "s":
            System.out.println("Please enter Number 1");
            Num1Input = Num1.next();
            System.out.println("Please enter Number 2");
            Num2Input = Num2.next();
            Num1Int = Integer.parseInt(Num1Input);
            Num2Int = Integer.parseInt(Num2Input);
            SumOfTwo = Num1Int - Num2Int;
            System.out.println("The Answser to " + Num1Input + " - " + Num2Input + " Equals " + SumOfTwo);
            break;
            default: 
            System.out.println("We are in the case");
             break;
             }}else{
           System.out.println("You may only enter 'M', 'D', 'A', or 'S'");

          }

   }//Main Bracket
}//Class Bracket
EN

回答 1

Code Review用户

发布于 2018-11-07 05:28:03

实际上,将代码分解为方法是您最不需要解决的问题。

您可以对每个输入重复使用相同的Scanner

Scanner类有一个nextInt()。使用它可以删除字符串来存储输入。

开关块中的default:大小写处理任何错误输入,检查的条件是多余的。

每个case:块包含相同的代码。您可以先询问号码,然后再进行操作。这样你只写一次。

可以堆叠case:语句来处理不同case:'s的相同代码。

将数字存储在数组中可以通过引用方法传递数字。

PrintStream类(System.out)有一个Format方法,它可以很好地连接不同对象的字符串输出。

我把所有这些都放在一起,展示了几种方法可以做些什么:

代码语言:javascript
复制
public static void main(String[] args) {
    Integer[] nums = {0,0,0};
    var in = new Scanner(System.in);
    getNums( in, System.out,nums);
    getResult(in, System.out, nums);
}
public static void getResult(Scanner in, PrintStream out,Integer[] nums){
    var goodInput = false;
    while (!goodInput) {
        goodInput = true;
        System.out.println("Please Enter (M)ultiplication, (D)ivision, (A)ddition, or (S)ubtraction");
        var usrInput = in.next();
        switch (usrInput) {
            case "M":
            case "m":
                nums[2] = nums[0] * nums[1];
                printResult(out, nums, '*');
                break;

            case "D":
            case "d":
                nums[2] = nums[0] / nums[1];
                printResult(out, nums, '/');
                break;

            case "A":
            case "a":
                nums[2] = nums[0] + nums[1];
                printResult(out, nums, '+');
                break;
            case "S":
            case "s":
                nums[2] = nums[0] - nums[1];
                printResult(out, nums, '-');
                break;
            default:
                out.println("You may only enter 'M', 'D', 'A', or 'S'");
                goodInput = false;
        }
    }        
}
public static void getNums(Scanner in, PrintStream out,Integer[] nums) {
    out.println("\nPlease enter the first number:");
    nums[0] = in.nextInt();
    out.println("\nPlease enter the second number:");
    nums[1] = in.nextInt();
}

public static void printResult(PrintStream out, Integer[] nums, char operand) {
    out.format("The Answser to %1$d %2$c %3$d = %4$d\n", nums[0], operand, nums[1], nums[2]);
}

这只是许多可以做到的方法之一。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/207117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档