2014-11-28 4 views
1

Я создал программу, которая проверяет текстовый файл, сколько слов определенной длины появляется в нем. Я хотел напечатать количество слов, найденных моей программой этой конкретной длины, а затем распечатать этот список слов. Тем не менее, список слов печатает в моем цикле while, потому что мне приходится печатать счет за пределами этого цикла. Должен ли я сделать этот неизвестный нумерованный список в массив, а затем вернуть массив, чтобы напечатать его в основном методе, чтобы это напечатало второе? Вот то, что я до сих пор:Печать неизвестного списка номеров слов

public static void countLetters(PartArray part, int num) throws Exception{ 
Scanner inputFile = new Scanner(new File("2of12inf.txt")); 

int count = 0; 
while(inputFile.hasNext()){ 
    String word = inputFile.next(); 

    if (word.length() == num) 
    { 
    count++; 

    expandArray (part , 2*MAX_SIZE); 
    System.out.println(word); 
    } 
} 
System.out.println("I found " + count + " " + num + "-letter words."); 
System.out.println("The list of words is: "); 
inputFile.close(); 
+1

Должен ли я сделать этот неизвестный нумерованный список в массив, а затем вернуть массив, чтобы напечатать его в основном методе, чтобы это напечатало второе? Да, если вы хотите сначала напечатать счетчик, а затем список слов. – Diptendu

+1

«ArrayList» - это то, что вы ищете здесь, так как размер массива не будет статическим. –

+0

Использует 'ArrayList' единственный способ сделать это? Мой профессор не рекомендовал этого, потому что он хочет, чтобы мы изучили реальные концепции массивов. Я надеялся сделать это в Object и вернуть его и напечатать массив слов. Это имело бы смысл? – hello

ответ

0

Если вы хотите, чтобы избежать печати слова в то время цикла, вы можете взять Println из петли. Вам не нужно добавлять каждое слово в структуру данных, если вы этого не хотите. Вы можете добавить каждое слово к «wordBuffer» StringBuffer (String Buffer конкатенация быстрее и эффективнее, чем струны), для получения дополнительной информации по этому вопросу прочитать: http://www.javaworld.com/article/2076072/build-ci-sdlc/stringbuffer-versus-string.html

так:

int count = 0; 
StringBuffer wordBuffer = new StringBuffer (""); 

while(inputFile.hasNext()){ 
    String word = inputFile.next(); 

    if (word.length() == num) 
    { 
    count++; 
    //Adding \n assuming you want new line between elements 
    wordBuffer.append(word+"\n"); 
    } 
} 
System.out.println("I found " + count + " " + num + "-letter words."); 
System.out.println("The list of words is: "wordBuffer); 
inputFile.close(); 

ли это то, что вы искали?

+0

StringBuilder может быть даже лучше, чем StringBuffer. StringBuffer синхронизирован, поэтому вы можете использовать его в многопоточных контекстах, но синхронизация также добавляет накладные расходы, которые в этом случае не нужны. – user384842

+0

Ничего себе! Это именно то, что я искал! Спасибо!! Я никогда не слышал о методе String «Buffer», но на основе замечательной ссылки, которую вы предоставили, мне удалось просто преобразовать ее в код, который мне знаком! – hello

+0

@hello Я рад, что помог, я ценю чек =] –

0

Проблема с массивами в этом контексте - массив имеет неизменный размер после инициализации. Если вы извлекаете измененную коллекцию, вам нужен сборщик, у которого нет такого ограничения. ArrayList достигнет этого.

public static void countLetters(PartArray part, int num) throws Exception { 
Scanner inputFile = new Scanner(new File("2of12inf.txt")); 

int count = 0; 
ArrayList<String> words = new ArrayList(); 

while(inputFile.hasNext()){ 
    String word = inputFile.next(); 

    if (word.length() == num) 
    { 
    count++; 
    //expandArray (part , 2*MAX_SIZE); 
    //System.out.println(word); 
    words.add(word);//adding each word to a new index with each iteration 
    } 
} 
System.out.println("I found " + count + " " + num + "-letter words."); 
System.out.println("The list of words is: "); 

for (String w in words) {//for each word in the words ArrayList 
    System.out.println(w);//print out the values 
} 

inputFile.close(); 
Смежные вопросы