-1

括弧内にユーザーから入力された数値を加算および減算する計算機を作成しようとしています。実行例は次のとおりです。

式プログラムへようこそ 式
の行を入力してください:
( 2 + 3 + -4 + 5 ) (6+7+8+-9)( 3 + -2 +7+0)
「( 2 + 3 + -4 + 5 )」は 6
「(6+7+8+-9)」
の値は 12 「( 3 + -2 +7+0)」の値は 8
さようなら!


Expression Program へようこそ 式
の行を入力してください:
(6) () (hello + friend ) ( 1 * 2 + 4 ) 7+8+9)
The value of “(6)” is 6
エラー: “” is not整数
エラー: “hello” は整数ではありません
エラー: “*” は有効な演算子ではありません
エラー: 不正な開始文字 '7'さようなら!

これは私がこれまでに持っているものですが、機能していません:

import java.util.Scanner;
public class ExprParser 
{
public static void main(String args[])
{
    
    Scanner g=new Scanner(System.in);
    System.out.println("Welcome to the Expression Program!");
    System.out.println("Enter a line of expressions(between parenthesis):");
    String exp=g.next();
    String[] arr=exp.split("\\)");
    
    for (int i = 0; i < arr.length; ++i) 
    {   System.out.println(arr[i]+")");
        int result=calculate(arr[i]);
        System.out.println(calculate(Integer.toString(result)));
    }
}
    
public static int calculate(String a)
{
    int sum=0;
    for (int i=0;i<a.length();++i)
    {
        
        char sign='+';
        a.indexOf(sign);

             sum+=Integer.parseInt(a.substring(0,sign))+Integer.parseInt(a.substring(sign+1,sign));
        
    }
    return sum;
}   
}
4

2 に答える 2

1

あなたが探しているのは、式を評価できる逆ポーランド記法だと思います。それがどのように機能するかを説明するビデオがここにあります: http://www.youtube.com/watch?v=QzVVjboyb0s

于 2013-09-23T21:21:15.470 に答える
0

このコードでは:

    char sign='+';
    a.indexOf(sign);   
    sum+=Integer.parseInt(a.substring(0,sign))+Integer.parseInt(a.substring(sign+1,sign));

signは文字であり、文字は実際には整数値です。文字'+'の値は 43 です (これは、ASCII チャートのプラス記号の場所です)。を計算しようとしていますが、が 43 文字より短いa.substring(0,43)場合、範囲外エラーが発生します。a

あなたindexOfはサインがどこにあるかを見つけていましたが'+'、結果を捨てました。の結果を変数に格納し、呼び出しでindexOfではなくその変数を使用します。また、-1 が返された場合 (プラス記号が見つからない場合) を処理するようにしてください。それを単に に渡すと、別の範囲外エラーが発生します。signsubstringindexOfa.substring

于 2013-09-23T21:30:47.713 に答える