2015-03-16 1 views
0

Я пытаюсь написать кусок кода, который создает частоту букв с использованием массивов. Я немного зациклился на том, как сравнить букву в строке с буквой в массиве. мой базовый псевдокод выглядит следующим образом.Сравнение charAt (x) с строковым массивом = буква [y]

import java.util.Scanner; 


public class test { 
    public static void main (String[]args){ 

     Scanner sc = new Scanner (System.in); 

     System.out.print ("Please enter a sentence: "); 
     String str = sc.nextLine(); 

     String [] let = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; 
     Float [] freq = new Float [25]; 



     int x,a = 0,b = 0, strCount = 0; 
     String str1; 

     str1 = str.replaceAll(" ", ""); 

     for (x = 0; x < str1.length(); x++) 
     { 
      strCount++; 
     } 
     System.out.println("The number of Characters in the string is :" + strCount); 
     System.out.println(); 

И теперь я зациклился на том, как сравнить str1 с массивом let. Я пробовал следующее, но у него есть проблема с сравнением.

while (b < strCount) 
    { 
     while (a < let.length) 
     { 
      if (let[a] == str1.charAt(b)) 
      { 
       freq[a] = freq[a]++ ; 
      } 
      if(let[a] != str1.charAt(b)) 
      { 
       a = a++; 
      } 
     } 
     b = b++; 
    } 

Любая помощь будет очень признательна.

спасибо.

+0

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

ответ

0

Ну, я вижу ряд других вопросов, но тот, о котором вы просите, достаточно прост.

if (let[a].charAt(0) == str1.charAt(b)) // <-- one letter 
{ 
    freq[a]++ ; 
} 
else 
{ 
    a++; 
} 

Кроме того, strCount = str1.length(); не требует петли.

0

Возможно, вы захотите избавиться от риска вечных циклов, заменив ваши циклы while на на петель. Также, a = a ++; неверен, а a ++; или a = a + 1; является правильным. Исправьте эти два, и у вас будет исправлена ​​ваша проблема.

0

Позвольте мне рассмотреть некоторые проблемы, которые, как представляется, выделяются. Прежде всего, вы можете увеличить свой Float[], так как он имеет размер и есть буквы в алфавите, что означает, что вы хотели бы сделать Float[] freq = new Float[26] вместо этого. Кроме того, вы используете str.replaceAll(), но str.replace() хватит - они оба заменяют все совпадения в строке.

Чтобы подсчитать количество вхождений, вы можете использовать str.charAt(index) или разбить его на массив символов (str.toCharArray()), чтобы сравнить символ со значениями, хранящимися в массиве. Поскольку все они являются одиночными символами, вы также можете сохранить значения в качестве примитива char вместо String.

Две петли while совершенно не нужны, так как это может быть сделано с помощью одной петли for. Кроме того, использование str.length() вместо создания собственного переменной и с помощью for петли для увеличения strCount, особенно при указании в цикле через него str.length() раз ...

+0

При объявлении массива в uni нам сказали, что это 25, потому что он также считает 0 частью массива, означающей 25 + запись 0 в массиве будет делать 26? Таким образом, массив будет выглядеть примерно как 0 = a, 1 = b ... y = 24, z = 25 Благодарим вас за остальную часть рекомендации, хотя это полезно. Я не думал об использовании массива char. Я также понимаю, что петли while не нужны. – Zoolar

+0

Массив должен иметь длину 26, с действующими индексами от 0 до 25. Однако размер должен быть инициализирован как 26, поскольку Java делает допустимые индексы от 0 до 25, иначе freq [25] предоставит вам исключение NullPointerException. – WillS

Смежные вопросы