0

よし、みんな、私は Java の基本的なこつをつかもうとしていて、いつもより少し複雑なものを作ろうと思った。このメソッドで私が持っているのは、最初の文字が int になるかどうかを最初に確認する試みです。そうであれば、その数値が入力でどれだけ進むかを確認したいと思います (したがって、ユーザーが 455+60 を入力した場合、私は455 を引き出して + で止めたいと思います)。

なぜか、入力が500tだとうまくいきます。しかし、インデックスが数値の後に終了する場合 (入力がちょうど 500 であるとします)、問題があります。なんらかの理由で for ループが続いていると思います。誰かが私が台無しにした場所を教えてもらえますか? 停止できるかどうかを確認するために if ステートメントを追加しましたが、役に立ちませんでした。

public void init(){
    int chars = 0;
    /*
     * Input fancy intro here.
     */
    clearArray();
    String uInput = getInput();
    rawInput=uInput.toCharArray();
    cleanArray(rawInput);
    try{Integer.parseInt(Character.toString(rawInput[0]));
    boolean isNum = true;
    for(int i=0;isNum==true;i++){
        if(i != rawInput.length){
        try{Integer.parseInt(Character.toString(rawInput[i]));}
        catch (NumberFormatException s){
            isNum = false;
            chars = i;
            System.out.println("The number has: "+chars+" characters.");
        }
        }
        }       
    }
    catch (NumberFormatException s){
        System.out.println("What is this madness?");

    }



}
4

3 に答える 3

1

ここでは、次のことを求めないようにしrawInput[rawInput.length]ます。

if(i != rawInput.length)

...しかし、あなた次の繰り返しに進みます。

あなたができない理由はありますか:

for (int i = 0; i < rawInput.length && isNum; i++)

? Character.isDigitまた、各文字を文字列に変換して解析し、例外をキャッチするのではなく、またはカスタム チェックを使用することをお勧めします。

は、ASCII 以外の数字に対してCharacter.isDigit返されることに注意してください。これは望ましくない場合があります。trueおそらく、次の簡単なチェックが必要なだけです。

char c = rawInput[i];
if (c < '0' || c > '9') {
    isNum = false;
}

また、正規表現がこれに対するより良い解決策になる可能性があることに注意してください...

ああ、空の文字列がある場合は、現時点では数値と​​してカウントされます...

于 2013-01-18T16:05:00.870 に答える
1

これを解決するには、for ループに追加のチェックを追加して、文字列の最後にいるかどうかを確認します。試す:

for(int i=0;isNum==true && i<rawInput.length;i++){
于 2013-01-18T16:05:10.690 に答える
0

次のようなことを試すことができます:

public int countDigits(String input) {
    int digitsCount = 0;

    for (int i = 0; i < input.length(); ++i) {
        if (Character.isDigit(input.charAt(i))) {
            ++digitsCount;
        } else {
            break;
        }
    }

    return digitsCount;
}
于 2013-01-18T16:11:36.423 に答える