1

我写了这个“计算器”,我希望它在计算后输出结果,但由于某种原因它不会!
样本输入为
2
1 + 1 * 2 =

输出为 4

提前致谢

import java.util.Scanner;


public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int n=input.nextInt();
    for (int i=0;i<n;i++){
        int result=input.nextInt();
        String operand=input.next();
        int flag=0;
        while (flag==0){
            int temp=input.nextInt();
            if (operand.equals("*"))
                result*=temp;
            else if (operand.equals("/"))
                result/=temp;
            else if (operand.equals("+"))
                result+=temp;
            else if (operand.equals("-"))
                result-=temp;
            else if (operand.equals("=")){
                flag=1;
                System.out.println(result);
            }
            operand=input.next();
        }
    }

}

  }

public class Main 
{
    public static void main(String[] args) 
    {
         Scanner input=new Scanner(System.in);
         int n=input.nextInt();
         for (int i=0;i<n;i++)
         {
             int result=input.nextInt();
             String operand=input.next();
             int flag=0;
             while (flag==0)
             {
                 int temp=input.nextInt();
                 if (operand.equals("*"))
                     result*=temp;
                 else if (operand.equals("/"))
                     result/=temp;
                 else if (operand.equals("+"))
                     result+=temp;
                 else if (operand.equals("-"))
                     result-=temp;
                 else if (operand.equals("="))
                 {
                     flag=1;
                     System.out.println(result);
                 }
            operand=input.next();
            }
        }
    }
}
4

3 回答 3

0

这是一个非常简单的测试示例:1 + 1 =

第一次迭代:

 int result=input.nextInt();  //===> (1) + 1 =
 String operand=input.next();  //===> 1 (+) 1 =
 int temp=input.nextInt(); //===> 1 + (1) =
 result+=temp;  //===> result == 2
 operand=input.next(); //===> 1 + 1 (=)

第二次迭代:

 int temp=input.nextInt(); //===> ooops nothing to read : wait for a user input!

这是您的算法的改编版本,应该可以工作:

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int n=input.nextInt();
    for (int i=0;i<n;i++){
      int result=input.nextInt();
      String operand=input.next();
      while (true){
        if (operand.equals("=")) {
          System.out.println(result);
          break;
        } else {
          int temp=input.nextInt();
          if (operand.equals("*"))
            result*=temp;
          else if (operand.equals("/"))
            result/=temp;
          else if (operand.equals("+"))
            result+=temp;
          else if (operand.equals("-"))
            result-=temp;
          operand=input.next();
        }
      }
    }

}

}

于 2012-07-05T13:51:02.630 回答
0

进入 while 循环后,您永远不会输入任何内容。运行一个

operand=input.next(); 

再次在您的 while 循环上的右括号之前。

否则您的 1 + 1 * 2 = 将读取为 1+1+2 (从不更新您的运营商)

while (flag==0)
        {
        int temp=input.nextInt();
        if (operand.equals("*"))
            result*=temp;
        else if (operand.equals("/"))
            result/=temp;
        else if (operand.equals("+"))
            result+=temp;
        else if (operand.equals("-"))
            result-=temp;
        else if (operand.equals("="))
             {
             flag=1;
             System.out.println(result);
             }
        operand=input.next();// needs to be inside closing bracket

public class Main 
{
    public static void main(String[] args) 
    {
         Scanner input=new Scanner(System.in);
         int n=input.nextInt();
         for (int i=0;i<n;i++)
         {
             int result=input.nextInt();
             String operand=input.next();
             int flag=0;
             while (flag==0)
             {
                 int temp=input.nextInt();
                 if (operand.equals("*"))
                     result*=temp;
                 else if (operand.equals("/"))
                     result/=temp;
                 else if (operand.equals("+"))
                     result+=temp;
                 else if (operand.equals("-"))
                     result-=temp;
                 else if (operand.equals("="))
                 {
                     flag=1;
                     System.out.println(result);
                 }
            operand=input.next();
            }
        }
    }
}
于 2012-07-05T12:54:12.060 回答
0

控件正在等待下一行的输入

    while (flag==0){
        int temp=input.nextInt(); <- its waiting for input after you enter =
于 2012-07-05T13:25:29.797 回答