2013-11-10 5 views
0

자바. 그 ASCII 코드 동등한로 문자열을 변환 :부호 주파수, 최고 주파수, 부호 수

public class Loop { 
    public static void main (String[] args) { 
     BralecPodatkov bp = new BralecPodatkov();  // allows me to write string 
     System.out.println("Type string: "); 
     String niz = bp.beriNiz();     // reads my string 
     int[] frequencies = new int [128];  // all 128 ASCII signs 
     int total = 0; 

     System.out.println("N of signs: " + niz.length());  // sum of all signs 

     for (int i = 0; i < niz.length(); i++) { 
      int ascii = (int) niz.charAt(i); 
       frequencies[ascii]++; 
       total += 1; 
     } 

     for (int i = 0; i < frequencies.length; i++) { 
      if (frequencies[i] > 0) 
       System.out.print(" " + (((float) frequencies[i]/total)*100) + "%"); 
      else 
       System.out.print(" 0%");  // prints all sign frequencies in % 
     }    

     int max = frequencies[0]; 
     for (int i = 0; i < niz.length(); i++) { 
      if (frequencies[i] > max) { 
       max = frequencies[i];  // print sign with highest frequency 
      } 
     } 
    System.out.println("\n" + "Max number: " + max);  
    } 
} 

결과 : 문자열을 읽고 인쇄 할 수

Type string: 
1234    // arbitrary string that I insert 
N of signs: 4 
0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 25.0% 25.0% 25.0% 25.0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 
Max number: 0 

코드 : (%)에 모든 징후의 합, 모든 기호의 주파수 가장 높은 빈도를 가진 사인. 질문 :
1) 각 주파수 앞에 적절한 기호를 추가하려면 어떻게합니까? (예 : 1 = 25 %, 2 = 25 % ...)
2) 최대 허용 주파수 코드가 작동하지 않으며 항상 0을 출력합니다. 무엇이 잘못 되었나요?
3) 문자열의 고유 한 기호 수를 계산하는 방법은 무엇입니까?

또한 실수 나 합병증을 발견하거나 의견이 있으면 알려 주시기 바랍니다.

답변

0

1 - Converting stream of int's to char's in java

for (int i = 0; i < frequencies.length; i++) { 
     System.out.print(Character.toChars(i)); 
     System.out.print(" = "); 
     if (frequencies[i] > 0) 

이 전에 답했습니다 - 최대 계수는 오타가 있습니다

int max = frequencies[0]; 
    for (int i = 0; i < niz.length(); i++) { 

사용 frequencies.length 대신 niz.length의().

3 - 당신이 무엇을 요구하고 있는지 확실하지 않습니다. 입력 문자열의 고유 한 문자는 무엇입니까? 최대 루프에서 frequencies[i] > 0이 작동하는지 확인하십시오.

+0

1 - 링크를 읽었으며 ... 내 대답을 찾지 못했거나 대답이 너무 복잡했습니다. 당신은 정교 할 수 있습니까? – user2974951

+0

2 - 작동하지 않는 것처럼 보이지만, 임의의 작은 숫자가 인쇄됩니다 – user2974951