2013-10-16 9 views
1

문자열을 입력하고 사용 된 각 문자의 수를 출력하는 숙제가 있습니다. 내가 JOptionPane을 사용할 때 논리가 작동하고 있었고 숙제가 이미 돌아 왔습니다. 그러나 JFrame JTextArea 입출력을 사용하도록 코드를 '변환'하려고하면 출력에 올바른 문자 수가 표시되지 않습니다. 나는 이것이 나의 논리에 매우 간단한 무언가를 확신 해요,하지만 난 그것을 여기에루프 논리 오류에 대한 A

같이 출력이 모습입니다 표시되지 않습니다 :

여기 enter image description here

코드

import javax.swing.*; 
import javax.swing.border.Border; 
import java.awt.*; 
import java.awt.event.*; 

public class Launcher extends JFrame 
{ 

    // create panel components 
    private static JTextArea txaUserInput; 
    private static JTextArea txaResults; 
    private static JButton btnSearch; 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("Final Answer"); 
     Border b = BorderFactory.createMatteBorder(1, 1, 1, 1, Color.GRAY); 
     txaUserInput = new JTextArea(); 
     txaUserInput.setPreferredSize(new Dimension(220, 70)); 
     txaUserInput.setBorder(b); 
     txaUserInput.setLineWrap(true); 
     txaResults = new JTextArea("Results"); 
     txaResults.setPreferredSize(new Dimension(200, 500)); 
     txaResults.setBorder(b); 
     btnSearch = new JButton("Count Occurences of Each Letter"); 

     frame.setLayout(new FlowLayout()); 
     frame.add(txaUserInput); 
     frame.add(btnSearch); 
     frame.add(txaResults); 
     createAndShowGUI(); 
     frame.setSize(300, 700); 
     frame.setVisible(true); 
    } 

    private static void createAndShowGUI() 
    { 
     btnSearch.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       // create variables 
       int[] counts = new int[26]; 
       int count = 0; 

       String input = ""; 
       String output =""; 

       for (short i = 0; i < (input).length(); i++) 
       { 
        char temp = Character.toLowerCase((input).charAt(i)); 
        if (temp >= 'a' && temp <= 'z') 
         counts[temp - 'a']++; 
       } 

       for (short i = 0; i < counts.length; i++) 
       { 
        output += (char) ('a' + i) + ":\t " + counts[i] + "\n"; 
       } 

       for (short i = 0; i < (input).length(); i++) 
       { 
        if ((input).charAt(i) == 'a' || (input).charAt(i) == 'A') 
         count++; 
       } 

       txaResults.setText(output); 

      } 

     }); 
    } 
} 
입니다
+0

코드 예제를 발견 한 부분 만 줄일 수 있습니까? –

+1

'input'과'output'을 빈 문자열에 할당하는 이유는 무엇입니까? – SudoRahul

+0

'input' 변수에 대괄호를 쓸 필요가 없습니다. –

답변

4

입력 문자열이 비어 있기 때문에!

이 시도 :

String input = txaUserInput.getText(); 
String output =""; 
+0

감사합니다. 나는 간단한 것을 놓친다는 것을 알았다. $ – user2802785

3

귀하의 입력 문자열이 ""로 설정되어 있습니다.

당신은 당신이 사용자 모두의

1

우선은 간단한 응용 프로그램에 대한 스윙을하지 않아도에서 가져온 입력 텍스트로 설정해야합니다.

당신이해야 할 일은 입력 문자열에있는 문자 발생을 계산하는 것입니다.

당신이해야 할 일은 모든 GUI 직원들로부터 논리를 제거하는 것입니다.

은 그럼 당신은 당신이 그것에 입력을 통과하지 않는 것을 발견 할 것이다

private void countAndPrintCharOccurance(String input) { 

int[] character = new int[1 << 8]; 


    char[] charArray = input.toCharArray(); 

    for(int idx = 0; idx < charArray.length; idx++) { 
     character[Character.toLowerCase(charArray[idx])]++; 
    } 

    for(int i ='a'; i <= 'z'; i++) { 
     System.out.println(((char) i) + " " + character[i]); 
    } 

} 

방법

을 만드는 것이해야 할 일.

+0

답장을 보내 주셔서 감사합니다. 내 스스로 도전하는 부분은 GUI로 전환하여 그 과정에서 저의 머리를 얻을 수있게 도와주는 것이 었습니다. 그러나 위의 코드 스 니펫에 대한 질문이 있습니다. 'int [1 << 8];을 설명 할 수 있습니까? 그 기능을 이해할 수 있을지 모르겠군요 (저는 매우 초보자입니다) – user2802785

+0

그것은 시프트 연산자입니다. 당신은 8 개의 궁전을 이동합니다. '1 0000 0000'은 256입니다. 이것은 배열의 크기가 256임을 의미합니다. 이것은 x0부터 x100까지의 유니 코드 문자를 포함한다는 것을 의미합니다. –