728x90
저는 Histogram클래스를 따로 만들어줬습니다.
멤버변수와 멤버함수는 다음과 같습니다.
final static int alpha_size = 26; | a~z까지의 알파벳 개수 |
int[] histro; | 인덱스 0~25까지는 각각 알파벳 A~Z에 대응됨. 사용자가 입력한 문자열에 각각의 알파벳이 몇 개 들어있는지 저장해주는 배열. |
public Histrogram() | 생성자. histro배열을 26사이즈로 만들어주고, 각각의 값을 0으로 초기화해줌. |
void show_histro() | 히스토그램을 화면에 그려주는 함수. |
void init_histro() | 히스토그램 배열의 각각 원소 값을 0으로 초기화해주는 함수 |
void make_histro(String str) | String문자열을 입력받아 각각의 알파벳이 몇 번 출력됐는지 히스토그램 배열에 저장해주는 함수. |
코드
import java.util.Scanner;
class Histrogram {
final static int alpha_size = 26; // a~z 개수
int[] histro;
public Histrogram() {
histro = new int[alpha_size];
init_histro();
}
void show_histro() {
for (int i = 0; i < histro.length; i++) {
char alpha = (char) (i + 65);
System.out.print(alpha + "(" + histro[i] + ") ");
for (int j = 0; j < histro[i]; j++) {
System.out.print('-');
}
System.out.println();
}
}
void init_histro() {
for (int i = 0; i < histro.length; i++)
histro[i] = 0;
}
void make_histro(String str) {
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
int low_alpha = ch - 65;
int upper_alpha = ch - 97;
if (0 <= low_alpha && low_alpha <= 25)
histro[low_alpha]++;
if (0 <= upper_alpha && upper_alpha <= 25)
histro[upper_alpha]++;
}
}
}
여기서는 아스키코드값이 이용되는데요.
A~Z는 65~90
a~z는 97~122
의 아스키코드값을 가집니다.
배열 0~25는 A~Z에 해당되니까
대문자라면 A -65 = 0/ B - 65 = 1
소문자라면 a - 65 = 0/ b - 65 = 1
이런식으로 연산을 적용하여 배열에 넣어주면 됩니다.
make_histro(String str)함수를 보면
if (0 <= low_alpha && low_alpha <= 25)
histro[low_alpha]++;
if (0 <= upper_alpha && upper_alpha <= 25)
histro[upper_alpha]++;
이런식으로 대소문자 모두 넣어줄 수 있도록 만들어줬습니다.
다음은 main함수를 포함하는 클래스입니다.
public class ex {
static String readString() {
Scanner scanner = new Scanner(System.in);
StringBuffer sb = new StringBuffer();
while (true) {
String line = scanner.nextLine();
if (line.equals(";"))
break;
sb.append(line);
}
scanner.close();
return sb.toString();
}
public static void main(String[] args) {
String str = readString();
Histrogram h = new Histrogram();
h.make_histro(str);
h.show_histro();
}
}
main 너무 간결해서 좋네요!!!><><><><
str을 함수로 입력받고(이건 교재에 있는 코드 그대로 사용했습니다)
히스토그램 클래스를 만들어준 뒤,
str을 이용하여 히스토그램을 만들어주고
화면에 출력도 해줍니다.
클래스를 사용하니 main에 코드가 정말 깔끔해지네요!
기분 좋습니다
728x90
'프로그래밍 언어 > javastudy' 카테고리의 다른 글
명품 Java Essential 6단원 Bonus 1 ~ 3 (0) | 2021.07.16 |
---|---|
명품 Java Essential 6단원 실습문제 1~6 (0) | 2021.07.15 |
명품 Java Essential 5단원 실습문제 #2 (0) | 2021.07.14 |
명품 Java Essential 5단원 실습문제 #1 (0) | 2021.07.14 |
명품 자바 에센셜 5단원/ Bear와 Fish 먹기 게임 (0) | 2021.07.13 |