1

2 つの問題があります。

  1. x.substring(i,1)の休憩try/catch
  2. それとおそらく他の理由で、このメソッドを機能させることができません。max lengthユーザーが小数を入力すると、のEditTextが増加しますが、ユーザーが大きすぎる数値を入力するmax lengthと元に戻るようにしようとしています。max length

    boolean tooBig = false;
    EditText txt = (EditText)findViewById(R.id.num1);
    TextView display = (TextView)findViewById(R.id.display);
    String x = txt.getText().toString(); // the String in the EditText
    String str = "didn't work";
    try
    {
        if (x.contains(".")) 
        {
            // set the max length to be 15
            if (x.length() >= 10)
            {
                // see if the decimal is contained after 10 digits
                for (int i = 10; i < x.length(); i++)
                {
                    str = x.subtring(i,1); // breaks here (test)
                    if (x.substring(i,1).equals(".")) // also breaks here
                    {
                        tooBig = true;
                    }
                }
            }
    
            if (tooBig)
            {
                // set text to be blank and max length to be 8
            }
        }
    }
    catch (Exception e) 
    {
        txt.setText(str); // "didn't work"
    }
    

x.substring(i,1)この問題を解決するにはどうすればよいですか?

4

4 に答える 4

2

問題は

   for (int i = 10; i < x.length(); i++)
    {
        str = x.subtring(i,1); // breaks here (test)
        if (x.substring(i,1).equals(".")) // startIndex say 10 is 
          greater than 1 which is wrong.
        {

startIndex は常に endIndex よりも大きく、これは明らかに間違っており、java.lang.StringIndexOutOfBoundsException を引き起こす可能性があります

于 2013-08-10T20:27:48.953 に答える
1

これは私の新しく変更されたコードになります:

boolean tooBig = false;
EditText txt = (EditText)findViewById(R.id.num1);
String x = txt.getText().toString(); // the String in the EditText
try
{
    if (x.contains(".")) 
    {
        // set the max length to be 15
        if (x.length() >= 10)
        {
            // see if the decimal is contained after 10 digits
            for (int i = 10; i < x.length(); i++)
            {
                if (x.substring(i,i+1).equals("."))
                {
                    tooBig = true;
                }
            }
        }

        if (tooBig)
        {
            // set text to be blank and max length to be 9
        }
    }
    else // no decimal
    {
        // set the max length to be 9
    }
}
catch (Exception e) {}
于 2013-08-11T23:19:41.227 に答える
0

に変更(i,1)する必要(i, i+1)があります。Java では、2 番目の数字は であり、index end point他の言語のように「文字数」ではありません。で開始しi、 より 1 多い時点で終了しiます。

indexOf(".")代わりに、問題を解決するために簡単に使用できます。また、ユーザーが小数を消去した場合に備えて、元に戻すelseステートメントを用意してください。max lengthmax length

tryこれを次のように変更します。

if (x.contains(".")) 
{
    // set the max length to be 15

    if (x.indexOf(".") > 9)
    {
        txt.setText(x.substring(0,9));   
        // set length to be 9
    }
}
else
{
    // set max length back to original
}
于 2013-08-10T20:30:51.580 に答える