2015-08-19 3 views
1

У меня есть быстрый вопрос. Как найти наиболее распространенный символ в строке в Java. Я логически знаю, как это сделать, но я не уверен, что мой синтаксис правильно:Как найти наиболее распространенный символ в строке

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


    String votes = "ABBAB"; 

    char[] StoringArray = votes.toCharArray(); 

    int numOFB = 0; 
    int numOFA = 0; 

    if (StoringArray.contains("A")) { 
     numOFA++; 
    } else if (StoringArray.contains("B")) { 
       numOFAB++; 
       } 

    if (numOFA = numOFB) { 
    System.out.println("Tie"); 
    } else if (numOFA > B) { 
    System.out.println("A"); 
    } else { 
    System.out.println("B"); 
    } 

    } 
} 

Может кто-нибудь помочь мне с тем, как правильно это сделать в Java?

+1

Похоже, что вы испытываете частоту конкретных символов, а не подстрок. – UnknownOctopus

+0

Что вы имеете в виду подстрокой? Вы имеете в виду персонажа? Синтаксис можно легко проверить с помощью любой подходящей среды. – cvesters

+0

Использовать == оператор для проверки равенства, numOFA = numOFB назначает numOFB для numOFA –

ответ

0

На самом деле, я работал с ним, и я обнаружил, что это самый хороший способ сделать это:

String votes = "ABBAB"; 

char[] StoringArray = votes.toCharArray(); 

int B = 0; 
int A = 0; 

for (int i = 0; i < StoringArray.length; i ++) { 
if (StoringArray[i] == 'A') { 
    A++; 
} else if (StoringArray[i] == 'B') { 
      B++; 
      } 

} 

if (A == B) { 
System.out.println("Tie"); 
} else if (A > B) { 
System.out.println("A"); 
} else { 
System.out.println("B"); 
} 
+0

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

0

Как сказано в комментариях; похоже, вы подсчитываете количество A или B, а не самую длинную подстроку. Вы анализируете только строку, состоящую из A и B?

Кроме того, вы используете = для проверки равенства, когда вы должны использовать ==. Я бы рекомендовал использовать IDE, например Eclipse, который покажет вам, когда вы это сделаете.

Редактировать: также вы не перебираете массив. Вы просто проверяете, содержит ли String A или B и добавляет 1, если это так. Вам нужно пройти через весь массив.

1

Вы не можете сравнить массив символов со строкой ниже логика должна работать и дать вам то, что вам нужно:

public static void main(String[] args){ 

     String votes = "ABBAB"; 

     char[] storingArray = votes.toCharArray(); 

     int numOFB = 0; 
     int numOFA = 0; 
     for(char c : storingArray) { 
      if(c == 'A') { 
       numOFA++; 
      } 
      if(c == 'B') { 
       numOFB++; 
      } 
     } 
     if (numOFA == numOFB) { 
      System.out.println("Tie"); 
     } else if (numOFA > numOFB) { 
      System.out.println("A"); 
     } else { 
      System.out.println("B"); 
     } 

    } 

Есть несколько ошибок в коде:

  1. Вы не можете использовать if (numOFA = numOFB) Недействительное выражение. Вы должны использовать == для сравнения
  2. Вы не можете сравнить char Array с методом contains. Он должен быть использован на String объекта
+1

. Можно ли просто дать код тому, что явно является домашней проблемой? –

+2

@ DanielPaczuskiBak кажется, что новичок так исправил код и объяснил, что он сделал не так. –

0

Я хотел бы дать вам более абстрактное решение:

public class Counter{ 
     private char c; 
     private int count; 

     Counter(char c, int count){ 
      this.c=c; 
      this.count=count; 
     } 

     public char getC() { 
      return c; 
     } 
     public void setC(char c) { 
      this.c = c; 
     } 
     public int getCount() { 
      return count; 
     } 
     public void addOcurrence() { 
      this.count++; 
     } 

     @Override 
     public boolean equals(Object obj) { 

      if(obj!=null) 
       if(((Counter)obj).getC()== this.c) 
        return true;    

      return false; 
     } 
} 



public static void main(String[] args){ 

     String votes = "whateveryouwanttoputhereorcanbefromaparameter"; 

      char[] storingArray = votes.toCharArray(); 

      List<Counter> listCounter = new ArrayList<Counter>(); 

      for(char aChar : storingArray){ 
       Counter compareCounter = new Counter(aChar,1); 
       if(listCounter.contains(compareCounter)){ 
        listCounter.get(listCounter.indexOf(compareCounter)).addOcurrence(); 
       }else{ 
        listCounter.add(compareCounter); 
       } 
      } 

      Counter max = listCounter.get(0); 
      for(Counter c : listCounter){ 
       if(c.getCount() > max.getCount()){ 
        max = c; 
       } 
      } 

      System.out.println("the character with more ocurrence is: "+max.getC()); 
     } 
Смежные вопросы