-1

Windows フォームを介して文字列を逆にしようとしていますがfor、コードを実行しているときに何らかの理由でループが例外を与えています。

System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません

Button_Click イベント

string input=textBox1.Text;
input=Convert.ToString(Console.ReadLine());
string output="";

if(textBox1.Text=="")
{
    MessageBox.Show("Sorry! You have not given any input for perform action");
}
else
{
    try{

        for(int i=input.Length-1; i>=0; i--)
        {
            output= output+input[i];
        }

            textBox2.Text=output;
            }

        catch(Exception ex)
        {
            MessageBox.Show(""+ex);
        }
    }
 }

同じロジックがコンソール アプリケーションで完全に機能している間。非常に基本的なことが欠けていることはわかっていますが、現時点ではアイデアがありません。

4

5 に答える 5

13

winform では、Console.ReadLine()戻りますnull( console がないため)。同様に、 をConvert.ToString((string)null)返しますnull.Lengthまた、 で ( 内でfor) を呼び出すことはできませんnull。コードの重要な部分:

input=Convert.ToString(Console.ReadLine());
...
for(int i=input.Length-1; i>=0; i--)

また、マイナーな点として、連結による文字列の構築は非常に非効率的です。

于 2012-11-13T07:32:41.107 に答える
2

マークはあなたのエラーを正しく指摘しました。しかし、私はあなたのコードを次のようにリファクタリングしました(私はあなたが逆入力をtextBox2に入れたいと理解しているので):

string input = textBox1.Text;

if(String.IsNullOrWhiteSpace(input))
{
    MessageBox.Show("Sorry! You have not given any input for perform action");
    return;
}

textBox2.Text = new String(input.Reverse().ToArray());
于 2012-11-13T07:41:53.583 に答える
1

私はそれがあるべきだと思います:

output += input[i];

これを行う簡単な方法は、この方法です

public static string ReverseString(string s)
{
    char[] arr = s.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}
于 2012-11-13T07:34:37.430 に答える
0

ConsoleWinFormsで関数を使用しているのはなぜですか?あなたの問題はこの行にあり、他の今後のエラーにつながります。

input=Convert.ToString(Console.ReadLine());

このように変更します。

string input=textBox1.Text;
input=Convert.ToString(input); //However i don't think you even require this line
于 2012-11-13T07:46:05.507 に答える
0

input値がないか、単一の要素しかない可能性がありますが、それを介しinput[1]てアクセスしようとしているということは、NullPointer例外が発生する2番目の要素を意味します。

output= output+input[1]; //I guess you did this by mistake

このようにする必要があります。

for(int i=input.Length-1; i>=0; i--)
    {
        output= output+input[i]; //Change '1' with 'i'
    }

これで問題が解決することを願っています。

于 2012-11-13T07:40:56.113 に答える