2016-03-17 2 views
0

То, что я пытаюсь сделать, - объявить определенное количество строк в соответствии с количеством токенов, сканирующих сканирование в одном входе, а затем эти строки равны следующему входу. Это то, что я пытаюсь:Как объявить персонализированные строки внутри цикла while?

int numberOfTokens = 0; 

boolean mainLoop = true; 

Scanner input = new Scanner(System.in); 

while(mainLoop == true) 
{ 
    while(input.hasNext()) 
    { 
     String int(+ numberOfTokens) = input.next(); (this doesn't work) 
     numberOfTokens += 1; 
    } 
} 

Надеюсь, я разъяснил, что я пытаюсь сделать. Я попытался использовать массивы String, но они не будут работать для того, что я пытаюсь сделать. Спасибо.

+4

'Надеюсь, я дал понять, что я пытаюсь сделать? Nope –

+1

Непонятно, что вы пытаетесь сделать, да; Также: Почему не работает массив? Это похоже на проблему с массивом. –

+0

Что именно вы пытаетесь сделать в 'String int (+ numberOfTokens) = input.next();'? – Guy

ответ

0

Если вы не знаете заранее, сколько строк вам нужно будет хранить то массив является плохим выбором данных структуры, по крайней мере, во время фазы ввода. Вместо этого используйте List - они сохраняют элементы в порядке, но расширяются по мере необходимости для размещения новых элементов. Они удобны для работы в целом, но если вы в конечном итоге должны получить строки в форме массива (например, потому что какой-то внешний API требует эту форму), то легко получить соответствующий массив.

Например:

List<String> tokens = new ArrayList<>(); 

while (input.hasNext()) { 
    tokens.add(input.next()); 
    // a List keeps track of its own length 
} 

Если позже вы хотели массив, то вы могли бы сделать

String[] tokenArray = tokens.toArray(new String[0]); 

количество маркеров, записанных в List доступна в любое время, как tokens.size(), или после того, как вам преобразовать в массив, как tokenArray.length.

В любом случае вы не можете создавать новые переменные во время выполнения на Java.

+0

Это должно сработать, спасибо. –

+0

Бит ошибки, однако, переменная должна быть типом ArrayList вместо List. –

+0

@JavaNoob, 'List' - это интерфейс, который реализует' ArrayList', поэтому вы можете назначить 'ArrayList' переменной типа' List'. Есть основания предпочитать объявление переменной с более абстрактным типом «Список», как я это сделал, но это было бы еще одно обсуждение. –

1

Вы можете сделать:

String[] myStringArray = new String[abc]; 

где а это целое число вы получаете от пользователя

, а затем

myStringArray[index] = input.next(); 

и индекс должен быть допустимым числом между 0 и abc

0

Вместо строковых переменных вы должны объявить одну переменную как это до цикла while.

List<String> tokens = new ArrayList<>(); 
while (input.hasNext()) { 
    tokens.add(input.next()); 
} 

Вы можете работать на лексемы, как это:

int n = tokens.size(); 

for (String token : tokens) { 
    System.out.println(token); 
} 
Смежные вопросы