постепенно заполняя массив данными от пользователя - PullRequest
2 голосов
/ 15 мая 2010

Я пытаюсь заполнить массив словами, введенными пользователем. Каждое слово должно быть на одну букву длиннее предыдущего и на одну букву короче следующего. Их длина равна индексу строки таблицы, считая от 2. Слова в итоге создадут одностороннюю пирамиду, например:
A
AB
ABC
ABCD

Scanner sc = new Scanner(System.in);
System.out.println("Give the height of array: ");
height = sc.nextInt();
String[] words = new String[height];
for(int i=2; i<height+2; i++){
    System.out.println("Give word with "+i+" letters.");
    words[i-2] = sc.next();
    while( words[i-2].length()>i-2 || words[i-2].length()<words[i-3].length() ){
        words[i-2] = sc.next();
    }
}

Как можно ограничить количество слов, считываемых со сканера, чтобы соответствовать требованиям? В настоящее время цикл while не влияет на сканер вообще: /

Это не домашняя работа. Я пытаюсь создать простое приложение, а затем графический интерфейс для него.

1 Ответ

1 голос
/ 15 мая 2010
  • Вы не читали height из Scanner (какое значение?)
  • Вы уверены, что вам не разрешено использовать List<String> и другие динамически растущие структуры данных?
  • Что должно произойти, если требование длины не выполнено?
  • Почему смещения 2 и -2?
    • Когда i = 2, вы также получаете доступ к words[i-3]. который бросит ArrayIndexOutOfBoundsException

Вот переписывание, которое делает логику более понятной:

    Scanner sc = new Scanner(System.in);

    System.out.println("Height?");
    while (!sc.hasNextInt()) {
        System.out.println("int, please!");
        sc.next();
    }
    final int N = sc.nextInt();

    String[] arr = new String[N];
    for (int L = 1; L <= N; L++) {
        String s;
        do {
            System.out.println("Length " + L + ", please!");
            s = sc.next();
        } while (s.length() != L);
        arr[L - 1] = s;
    }

    for (String s : arr) {
        System.out.println(s);
    }

Похожие вопросы

...