2016-11-27 18 views
0

Мне нужно взять несколько строк текста и подсчитать вхождения каждой буквы в каждой строке. Последняя строка должна заканчиваться через определенный период. Меня попросят создать массив int длиной 26, где arrayName[0] = number of a's, arrayName[1] = number of b's и т. Д., И этот случай письма должен быть проигнорирован. У меня возникают проблемы с проверкой появления каждой буквы и определением индексированных переменных с правильным количеством вхождений. Мой код до сих пор:java - Ввод числа букв в строках в массив int из 26

import java.util.Scanner; 

public class LetterCounter 
{ 
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 

    String[] textBlock = new String[10]; 

    System.out.println("Enter text."); 
    int index; 
    //Allows me to type in something for all "lines" of text until I end one with a period. 
    for(index = 0; index < textBlock.length; index++) 
    { 
     textBlock[index] = input.nextLine(); 

     if(textBlock[index].contains(".")) 
     { 
      System.out.println("Period found"); 
      break; 
     } 
    } 
    //Outputs what the user printed except for the lines not typed in (they return null). 
    System.out.println("Text input by user:"); 
    for(index = 0; index < textBlock.length; index++) 
    { 
     if(textBlock[index] != null) 
     { 
      System.out.println(textBlock[index]); 
     } 
    } 
    //int array 
    int[] occurrences = new int[26]; 

    //used to turn letter into number 
    char letter = 'a' - 49; 
    char letter2 = 'b' - 49; 
    char letter3 = 'c' - 49; 

    //checks that numbers are correct (return "0" for a, "1" for b, and "2" for c) 
    System.out.println("Number value of a: " + letter); 
    System.out.println("Number value of b: " + letter2); 
    System.out.println("Number value of c: " + letter3); 

}// End of main 
}//End of program 
+0

Для начала, я думаю, что вы хотите принять декларацию из массив вне вашего цикла. Вероятно, вы хотите заставить каждую букву читать нижний регистр. Затем, проверив букву в «a» на «z», ++ массив в индексе прочитанного письма - «a». –

+0

Аналогичный вопрос здесь: http://stackoverflow.com/questions/33770180/how-do -i-магазин-это-печатные буквы, в-ан-массив/33770240 # 33770240 – markspace

ответ

1

Подсчитайте появление символа каждой строки. и просто распечатайте их. попробуйте это ...

//final int SIZE = 1000; 
//String[] textBlock = new String[SIZE]; 

Scanner in = new Scanner(System.in); 
String line; 

//frequency array for storing which Character is occurs how many times 
int[] frequencyArray = new int[26]; 
Arrays.fill(frequencyArray, 0); 

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

// take input un-till find the (.) in a line 
// and also count the frequency of Character of current line 
while (true) { 
    line = in.nextLine(); 
    for (int i = 0; i < line.length(); i++) { 
     char ch = Character.toLowerCase(line.charAt(i)); 
     if (Character.isLetter(ch)) { 
      frequencyArray[ch - 'a']++; 
     } 
    } 
    if (line.contains(".")) { 
     break; 
    } 
} 

for (int i = 0; i < 26; i++) { 
    System.out.println("Total Number of " + (char)(i + 'a') + " : " + frequencyArray[i]); 
} 
0

Объявите массив за пределы вашего цикла и увеличивать количество этого массива, когда персонаж Мэйтс

Объявите это внутри цикла

int intialCount = occurrences(charAt(textBlock[index])-49); 
occurrences(charAt(textBlock[index])-49) = intialCount++; 

Вы найдете вхождения 'a' во вхождениях [0], который вернет счет.

0

Если вы не печатать отладочные сообщения, вы можете сделать работу с только 1 строка:

System.out.println("Enter lines of text (period to end):"); 
new Scanner(System.in).useDelimiter("\\.").next().chars() 
    .filter(i -> i >= 'a' && i <= 'c').boxed() 
    .collect(Collectors.groupingBy(i -> i, Collectors.counting()) 
    .forEach((c, n) -> System.out.format("Number value of %s: %d\n", (char)c, n));