-1

以下のプログラムは、最初の編集ボックスから1つのテキストを取得し、単語vyshと一致させて、2番目の編集ボックスに出力を生成しようとしています。2番目の編集ボックスには最初にドットがあり、各単語が単語VYSHと一致すると、ドットが置き換えられます。

プログラムの実行中にエラーが発生しました。エラーは次のとおりです。

09-14 19:47:25.593: D/AndroidRuntime(469): Shutting down VM
09-14 19:47:25.593: W/dalvikvm(469): threadid=1: thread exiting with uncaught exception (group=0x40014760)
09-14 19:47:25.593: E/AndroidRuntime(469): FATAL EXCEPTION: main
09-14 19:47:25.593: E/AndroidRuntime(469): java.lang.NullPointerException
09-14 19:47:25.593: E/AndroidRuntime(469):  at java.lang.String.<init>(String.java:505)
09-14 19:47:25.593: E/AndroidRuntime(469):  at com.example.testinput.MainActivity$1.onClick(MainActivity.java:46)
09-14 19:47:25.593: E/AndroidRuntime(469):  at android.view.View.performClick(View.java:3110)
09-14 19:47:25.593: E/AndroidRuntime(469):  at android.view.View$PerformClick.run(View.java:11934)
09-14 19:47:25.593: E/AndroidRuntime(469):  at android.os.Handler.handleCallback(Handler.java:587)
09-14 19:47:25.593: E/AndroidRuntime(469):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-14 19:47:25.593: E/AndroidRuntime(469):  at android.os.Looper.loop(Looper.java:132)
09-14 19:47:25.593: E/AndroidRuntime(469):  at android.app.ActivityThread.main(ActivityThread.java:4123)
09-14 19:47:25.593: E/AndroidRuntime(469):  at java.lang.reflect.Method.invokeNative(Native Method)
09-14 19:47:25.593: E/AndroidRuntime(469):  at java.lang.reflect.Method.invoke(Method.java:491)
09-14 19:47:25.593: E/AndroidRuntime(469):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-14 19:47:25.593: E/AndroidRuntime(469):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-14 19:47:25.593: E/AndroidRuntime(469):  at dalvik.system.NativeStart.main(Native Method)
09-14 19:47:30.175: I/Process(469): Sending signal. PID: 469 SIG: 9

プログラムを以下に示します。

package com.example.testinput;

public class MainActivity extends Activity {

String rword="vysh";
private StringBuffer gword=new StringBuffer();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Button button=(Button) findViewById(R.id.button1);

    final EditText output=(EditText) findViewById(R.id.editText2);
  //input dots in edittext
    char positions[] = new char[rword.length()];
    for (int i=0; i<rword.length(); i++) {
        positions[i] = '.';

}
    String dots=new String(positions);
    output.setText(dots);
    //end of input dots

    button.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            EditText text=(EditText)findViewById(R.id.editText1);
                            String str="";

            str=text.getText().toString();
            if(!TextUtils.isEmpty(str))
            {           
            //String t=new String(gword);
            char a=str.charAt(0);
            //replace dots with text 
            for (int i=0; i<rword.length(); i++)
            {
                if((rword.charAt(i))==a)
                {
                    gword.setCharAt( i, a);
                }

            }
            //print the output
            output.setText(gword);
            }end of iftextutils         
        }
    }); 
     }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;}

}

stringbufferを初期化して、以下のソリューションに基づいてプログラムを編集しようとしましたが、プログラムが機能しません...次のエラーが発生します:09-17 10:48:11.169:09-17 11:36:03.439:E / AndroidRuntime(926 ):java.lang.StringIndexOutOfBoundsException:index = 0 length = 0 09-17 11:36:03.439:E / AndroidRuntime(926):at java.lang.AbstractStringBuilder.indexAndLength(AbstractStringBuilder.java:214)09-17 11: 36:03.439:E / AndroidRuntime(926):at java.lang.AbstractStringBuilder.setCharAt(AbstractStringBuilder.java:544)09-17 11:36:03.439:E / AndroidRuntime(926):at java.lang.StringBuffer.setCharAt (StringBuffer.java:698)09-17 11:36:03.439:E / AndroidRuntime(926):com.example.testinput.MainActivity $ 1.onClick(MainActivity.java:60)09-17 11:36:03.439: E / AndroidRuntime(926):android.view.View.performClick(View.java:3110)で

String.charat関数にエラーがあることを示しています。基本的に、編集ボックスのドットをvyshという単語と一致する場合は、最初のボックスの文字に置き換えたいと思います。

4

4 に答える 4

1

この行String t=new String(gword);では、変数gwordがnullであるため、例外が発生します。私が見る限り、あなたはtとにかく使用していないので、...行を削除するかt、単純なで作成しますnew String()

于 2012-09-14T20:11:27.757 に答える
0

が宣言されているが初期化されていないNullPointerExceptionため、取得しています。gwordしたがって、初期化すると正常に動作します。次のようなことをします:

private StringBuffer gword = new StringBuffer();

于 2012-09-14T23:26:02.280 に答える
0

これを試して、

String str="";
str=text.getText().toString();
if(!TextUtils.isEmpty(str)){
        //String t=new String(gword);
        char a=str.charAt(0);
        //replace dots with text 
        for (int i=0; i<rword.length(); i++)
        {
            if((rword.charAt(i))==a)
            {
                gword.setCharAt( i, a);
            }

        }
        //print the output
        output.setText(gword);

}
于 2012-09-17T11:07:09.357 に答える
0

正しいコードは次のとおりです。packagecom.example.testinput; パブリッククラスMainActivityはActivity{を拡張します

String rword="vysh";
private StringBuffer gword=new StringBuffer();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Button button=(Button) findViewById(R.id.button1);

    final EditText output=(EditText) findViewById(R.id.editText2);
  //input dots in edittext
    char positions[] = new char[rword.length()];
    for (int i=0; i<rword.length(); i++) {
        positions[i] = '.';gword.append(" ");

}
    String dots=new String(positions);
    output.setText(dots);
    //end of input dots

    button.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            // to get input edibox
            EditText text=(EditText) findViewById(R.id.editText1);
            String str="";
            str=text.getText().toString();


            if(!TextUtils.isEmpty(str))
            {
            //String t=new String(gword);


            char a=str.charAt(0);
            //replace dots with text 
            for (int i=0; i<rword.length(); i++)
            {
                if((rword.charAt(i))==a)
                {
                    gword.setCharAt( i, a);


                }

            }
            //print the output
            output.setText(gword);
            }   //end of if textuitls       
        }
    }); 
     }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}    

}

于 2012-09-17T12:41:54.483 に答える