1

この「電卓」を書いて、計算後に結果を出力したいのですが、どういうわけか出力されません!!
サンプル入力は 21+ 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

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 に答える
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 (=)

2回目の反復:

 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 に答える