0

2 つのユーザー入力を使用して 2 次元リスト配列を作成しようとしています。

私が抱えている問題は、以下のコードで、1 番目のforステートメントが期待どおりの結果を生成していないことです。2 番目のステートメントforは必要なことを行っています。また、以下のコードではスキャナーを閉じることができません。

public static void main(String[] args) {

    ArrayList<String> listCon = new ArrayList<String>();
    ArrayList<String> listCol = new ArrayList<String>();

    Scanner txtInput = new Scanner(System.in);

    char addTo = 'y';

    do {

        System.out.println("\nCurrent list is " + listCon + listCol + "\n");

        System.out.println("Would you like to add a country to the list?\n\t"
                            + "( y ) = YES\n\t( n ) = NO");

        addTo = txtInput.next().toLowerCase().charAt(0);

        if (addTo == 'y') {

            System.out.println("Enter country name: ");

            listCon.add(txtInput.next().toLowerCase());

            System.out.println("Enter colour: ");

            listCol.add(txtInput.next().toLowerCase()); 

        } else if (addTo == 'n') { 

            int i = 1;

            int countCon = listCon.size();

            if(countCon == 0) {

                System.out.println("No countries have been entered.");

            } else {

                String str = "country";

                if(countCon > 1) {  

                    str = "countries";
                }

                System.out.println("Thankyou for your input.  We found " + countCon + " " + 
                                    str + " in the list.");

                System.out.println("Listed " + str + ":\n");

                for(String n : listCon) {

                    char[] conDigit = n.toCharArray();

                    conDigit[0] = Character.toUpperCase(conDigit[0]);

                    n = new String(conDigit);

                    for(String b : listCol) {

                        char[] colDigit = b.toCharArray();

                        colDigit[0] = Character.toUpperCase(colDigit[0]);

                        b = new String(colDigit);

                        System.out.println("Country " + i + " : " + n + " - \t" + b);

                        i = i + 1;

                    }
                    break;  
                }
                break;
            }  
        } else { 
            System.out.println("Incorrect input detected.  please try again. \n");              
        }
    } while (true);
} 
      } 
4

1 に答える 1

1

break反復するには、最初のforループから余分なものを削除する必要があります。そうしないと、最初の反復後に壊れます。

for(String n : listCon) {
....
    for(String b : listCol) {
    ...
    }
    break;  //remove this! 
}
break;

編集

後の結果は、 国 1 : フランス - 青 国 2 : イギリス - 白 国 3 : アイルランド - 緑

次のように繰り返す必要があります。

for (int i = 0; i < listCon.size() && i < listCol.size(); i++) {
    String n = listCon.get(i);
    char[] conDigit = n.toCharArray();
    conDigit[0] = Character.toUpperCase(conDigit[0]);
    n = new String(conDigit);

    String b = listCol.get(i);
    char[] colDigit = b.toCharArray();
    colDigit[0] = Character.toUpperCase(colDigit[0]);
    b = new String(colDigit);

    System.out.println("Country " + i + " : " + n + " - \t" + b);
}
于 2013-08-13T09:34:24.813 に答える