[명품 Java Programming] 6장 Open Challenge

2021. 12. 6. 20:13Java/명품 Java

Open Challenge - 영문자 히스토그램 만들기

텍스트를 입력받아 영문자 히스토그램 만들기. 대문자와 소문자는 모두 같은 것으로 간주하고 세미콜론만 입력되는 라인을 끝으로 한다.

 

**해당 교재 1~6장에서 배운 내용들로만 소스코드 작성했습니다.**

 

 

소스코드

import java.util.*;

public class HistogramEx {

	public static void main(String[] args) {
		//처음지정
		StringBuffer sb = new StringBuffer(); //텍스트 저장할 StringBuffer 지정
		String[] alpha = new String[26]; //A~Z까지 배열에 저장
		int[] count = new int[26]; // A~Z 개수 저장할 배열 지정
		char c = 'A'; //처음 알파벳 지정
		
		//사용자 텍스트 입력
		System.out.println("영문 텍스트를 입력하고 세미콜론을 입력하세요.");
		Scanner scanner = new Scanner(System.in); //텍스트 입력
		
		//입력한 텍스트 StringBuffer에 저장
		for(;;) {
			String s = scanner.nextLine();
			if(s.equals(";")) //;만나면 저장 끝내기
				break;
			else {
				sb.append(s); //계속 저장
			}
		}
		
		//alpha 배열에 A~Z저장
		for(int i = 0; i < alpha.length; i++) { 
			alpha[i] = Character.toString(c); // 알파벳 String 형태로 저장(alpha가 String이므로)
			c++; //다음 알파벳으로 넘어감
		}
		
		//소문자 알파벳 대문자로 변경+개수 세기
		for(int i=0; i<sb.length(); i++) {
			String text = (Character.toString(sb.charAt(i))).toUpperCase(); //입력된 문자를 대문자로 text에 저장
			sb.replace(i, i+1, text); //소문자를 대문자로 변경
			
			for(int j = 0; j<alpha.length; j++) {
				if(text.equals(alpha[j])) {
					count[j]++; //A~Z 중 해당되는 경우의 count 수를 높임
				}
			}
			
		}
		
		//히스토그램 출력
		System.out.println("히스토그램을 그립니다.");
		
		for(int i = 0; i<alpha.length; i++) {
			System.out.print(alpha[i]);
			for(int j = 0; j<count[i]; j++) { //count 수만큼 출력하기 위해 반복
				System.out.print("ㅡ");
			}
			System.out.println("");
		}

	}

}

 

 

 

결과

 

 

 

혹시 틀린 부분 있으면 댓글로 알려주세요~~~!