9

キーボードから文字列を入力しなければならない運動をしています。文字列は、「2 + 4 + 6-8+3-7」などの単純な算術演算になります。はい、フォーマットはこのようにする必要があります。間に単一のスペース。

アイデアは、この文字列を取得し、最終的にそれに対する答えを印刷することです。これまでのところ、これは私のコードです:

public class AddemUp {
  public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);
    System.out.print("Enter something like 8 + 33 + 1345 + 137: ");
    String s = kb.nextLine();
    Scanner sc = new Scanner(s);
    sc.useDelimiter("\\s*\\+\\s*|\\s*\\-\\s*");
    int sum = 0;
    int theInt;
    Scanner sc1 = new Scanner(s);
    sc1.useDelimiter("\\s*\\s*");
    String plusOrMinus = sc1.next();
    int count = 0;
    if(s.startsWith("-"))
    {
        sum -= sc.nextInt();
    }
    while(sc.hasNextInt())
    {
        theInt = sc.nextInt();
        if(count == 0)
        {
            sum += theInt;
        }
        else if(plusOrMinus.equals("+"))
        {
            sum += theInt;
        }
        else
        {
            sum -= theInt;
        }
        sc1.next();
        count++;
    }
    System.out.println("Sum is: " + sum);
    }
  }
}

「sc1.delimiter」がある25行目では、コードですべての整数を(スペースとともに)スキップし、「+」または「-」のいずれかのみを分離する方法がわかりません。これが達成されたら、それをwhileループに実装するだけです。

4

8 に答える 8

4

数値を削除してオペランドの配列を残したい場合は、プラスまたはマイナス以外の文字で分割します。

String[] ops = str.split("[^+-]+");

参考までに、マイナス記号が文字クラスの最初または最後にある場合、それは文字通りのマイナスです(そうでない場合は範囲​​です)

于 2014-02-23T05:19:59.433 に答える
2

代わりにsplit()( JavaDoc ) メソッドを使用してみてください。はるかに簡単です。

"8 + 33 + 1345 + 137".split("\\+|\\-")

数値の配列を返す必要があります。

于 2012-12-13T01:44:06.067 に答える
-1

代わりにこれを試してください:

String str = ...
int total = 0;
int operand;
for(int  i = 0; i < str.length(); i++){
    if(Character.isWhiteSpace(str.charAt(i)))
    ; // empty
    else if(Character.isDigit(str.charAt(i))){
        StringBuilder number = new StringBuilder();
        while(Character.isDigit(str.charAt(i))){
            number.append(str.charAt(i));
            i++;
        }
        operand = Integer.parseInt(number.toString);
    }
    else if(str.charAt(i)) == '+')
        total += operand;
    else if(str.charAt(i)) == '-)
        total -= operand;
    else
        throw new IllegalArgumentException();
}

もちろん、違法なエントリについては、より適切なチェックを行う必要があります。私はちょうどあなたにアイデアを与えました。

于 2012-12-13T02:34:54.833 に答える
-2
int total = 0;
    final String s = "9 - 15";
    final String[] arr = s.split(" ");
    int i = 0;
    while (i != arr.length)
    {
        switch (arr[i])
        {
            case ("+"):
                total += Integer.parseInt(arr[++i]);
                break;
            case ("-"):
                total -= Integer.parseInt(arr[++i]);
                break;
            case ("*"):
                total *= Integer.parseInt(arr[++i]);
                break;
            case ("/"):
                total /= Integer.parseInt(arr[++i]);
                break;
            default:
                total = Integer.parseInt(arr[i++]);
        }
        if (i == arr.length - 1)
        {
            break;
        }
    }
    System.out.println(total);

これがあなたに役立つことを願っています....thnx

于 2016-06-10T10:30:36.190 に答える