0

このコードに問題があります:

package Jensen;

import java.util.Scanner;

public class JensenUppgift7 {

    public static void main(String[] args)
    {
            Scanner scanner = new Scanner(System.in);
            String[] ord = new String[10];

            System.out.println("Hej och välkommen till mitt program. Det här programmet" +
                            " kommer fråga dig att mata in ord som du väljer och sedan skriva " +
                            "ut de i omvänd ordning.");

            for(int x = 0; x < ord.length; x++)
            {
                    System.out.println("Skriv ett ord. Avsluta programmet genom att skriva 'Sluta'");
                    String indata = scanner.next();

                    if(indata.compareTo("Sluta") == 0 || x == ord.length - 1)
                    {
                            for(int i = x; i >= 0; i--)
                                    if(i == 0)
                                            System.out.print(ord[i] + ".");
                                    else
                                            System.out.print(ord[i] + ", ");
                            break;
                    }
                    else
                            ord[x] = indata;
            }
    }
}

プログラムは 10 個以下の文字列を要求し、それらを逆順に出力します。私の問題は、配列を反復処理すると、最初に出力される最後の入力値が null に等しいことです。理由はわかりません。残りの入力は正しく出力されます。

4

2 に答える 2

4

最後の値を配列に割り当てていません。以下のif条件:

if(indata.compareTo("Sluta") == 0 || x == ord.length - 1)

trueの値が最後のインデックスであるxisになり、値を配列に割り当てているブロックにord.length - 1到達しません。else

ifブロックに 2 番目の条件を含める必要はありません。forループはインデックスを処理します。取り除くだけです。

また、同等性をチェックするequals代わりにメソッドを使用することもできます。ユーザー入力の値を比較しているため、大文字と小文字を無視して比較compareToすることをお勧めします。

 if(indata.equalsIgnoreCase("Sluta"))

ifこの条件に基づいて配列を出力し始めているため、実際にはこのブロックのロジックがわかりません。しかし、そこに配列を印刷すると、完全に埋められないことは確かです。メッセージが英語ではないため、何をしようとしているのかを推測するのは困難です。ある種の終了条件ですか?通常、ユーザー入力を配列に格納する場合、終了条件はありません。いつ停止するかは、配列のインデックスに任せます。

実際に何が欲しいかはあなたに決めてもらいます。必要な変更を行ったfor後、指定されたループの後に別のループを実行forして、配列の値を逆に出力できます。

于 2013-08-11T10:38:18.633 に答える
1

最後の要素は入力ループから除外されます。x == ord.length - 1条件を に変更しますx == ord.length

于 2013-08-11T10:41:14.493 に答える