**package** Test;
**import** java.util.Scanner;
**public** **class** Ex03 {
**public** **static** **void** main(String[] args) {
/*
Ex.3 (20점)
[ 애국가 타자연습 PRORGRAM ]
애국가의 가사를 4단계로 나누어 입력받는 속도와 정확도를 계산한다.
- 속도 = 문자열길이 * 60(초) * 1000 / 입력시간
- 정확도 = 일치하는 개수 / 문자열길이 * 100(백분율)
hint.
1. System.currentTimeMillis() : 밀리세컨드(1/1000초) 값을 반환
↑ 위의 메서드를 이용하여 문자열을 입력받기 전, 후의 시간차로 속도 계산
2. String 클래스의 toCharArray()를 이용하여
애국가와 입력받은 문자열의 문자 하나하나를 비교하여 정확도를 계산
*/
Scanner scan = **new** Scanner(System.***in***);
**int** index = 4;
String lyric[] = **new** String[index];
lyric[0] = "동해물과 백두산이 마르고 닳도록";
lyric[1] = "하느님이 보우하사 우리나라 만세";
lyric[2] = "무궁화 삼천리 화려강산 대한사람";
lyric[3] = "대한으로 길이 보전하세";
String input[] = **new** String[index];
**for** (**int** i = 0; i < lyric.length; i++) {
**int** Speed = 0;
**int** cnt = 0;
**double** accuracy = 0.0;
System.***out***.println("( " + (i + 1) + " / 4 )");
System.***out***.println(lyric[i]);
//타자속도
**long** sTime = System.*currentTimeMillis*();
input[i] = scan.nextLine();
**long** eTime = System.*currentTimeMillis*();
**long** Time = eTime - sTime;
**int** Count = input[i].length();
Speed = (**int**)(Count * 60 * 1000 /Time);
//정확도
**char**[] inputArray = input[i].toCharArray();
**char**[] lyricArray = lyric[i].toCharArray();
**if**(inputArray.length <= lyricArray.length) {
**for** (**int** j = 0; j <inputArray.length; j++) {
**if** (inputArray[j] == lyricArray[j]) { // 같은 위치의 문자가 일치하는 경우
cnt++; // 일치하는 문자 개수 증가
}
}
//예를 들어 cnt가 0 이고 lyricArray.lenght 16 이면 accuracy는 0
//예를 들어 cnt가 5 이고 lyricArray.lenght 16 이면 accuracy는 31.25 즉 실수가 나온다
//즉
//정확도를 계산할 때, 일반적으로 정확도를 퍼센트로 나타내기 위해서는 소수점 이하 값을 필요로 함.
//그러나 cnt와 lyricArray.length는 모두 정수형 데이터임
//따라서 정수형으로 나누기 연산을 수행하면 소수점 이하 값은 버려지고 결과는 정수형으로 반환되어버림
//결론 형변환을 해줘야 한다
// accuracy = (int) (cnt /(double)lyricArray.length * 100); 1번
// accuracy = (int) ((double) cnt /lyricArray.length * 100); 2번
// accuracy = (int) ((double) cnt /(double) lyricArray.length * 100); 3번
// 1,2,3번 모두 동일한 결과가 나옴..
//나는 선생님의 문제영상에 65%으로 나와서 Math.round를 사용하여 반올림 해주었음 (이때 int는 지워줘야함. 반올림해야해서)
/*
하느님이 보우하사 우리나라 만세
하느님이 보우하사 oooo oo
■타자속도 : 85타 /분 ■정확도 : 65%
*/
accuracy = Math.*round*(((**double**) cnt /(**double**)lyricArray.length * 100));
//결과 출력
System.***out***.println("\u25A0" + "타자속도 : " + Speed + "타 /분 " + "\u25A0" + "정확도 : " + (**int**) accuracy+ "%");
} **else** {
System.***out***.println("입력 글자수가 넘어갔습니다");
}
}
}
}
package Test;
import java.util.Scanner;
public class Ex03 {
public static void main(String[] args) {
/*
Ex.3 (20점)
[ 애국가 타자연습 PRORGRAM ]
애국가의 가사를 4단계로 나누어 입력받는 속도와 정확도를 계산한다.
- 속도 = 문자열길이 * 60(초) * 1000 / 입력시간
- 정확도 = 일치하는 개수 / 문자열길이 * 100(백분율)
hint.
1. System.currentTimeMillis() : 밀리세컨드(1/1000초) 값을 반환
↑ 위의 메서드를 이용하여 문자열을 입력받기 전, 후의 시간차로 속도 계산
2. String 클래스의 toCharArray()를 이용하여
애국가와 입력받은 문자열의 문자 하나하나를 비교하여 정확도를 계산
*/
Scanner scan = new Scanner(System.in);
int index = 4;
String lyric[] = new String[index];
lyric[0] = "동해물과 백두산이 마르고 닳도록";
lyric[1] = "하느님이 보우하사 우리나라 만세";
lyric[2] = "무궁화 삼천리 화려강산 대한사람";
lyric[3] = "대한으로 길이 보전하세";
String input[] = new String[index];
for (int i = 0; i < lyric.length; i++) {
int speed = 0;
int cnt = 0;
double accuracy = 0.0;
System.out.println("( " + (i + 1) + " / 4 )");
System.out.println(lyric[i]);
//타자속도
long sTime = System.currentTimeMillis();
input[i] = scan.nextLine();
long eTime = System.currentTimeMillis();
long Time = eTime - sTime;
int Count = input[i].length();
int Speed = (int)(Count * 60 * 1000 /Time);
//정확도
char[] inputArray = input[i].toCharArray();
char[] lyricArray = lyric[i].toCharArray();
if(inputArray.length <= lyricArray.length) {
for (int j = 0; j <inputArray.length; j++) {
if (inputArray[j] == lyricArray[j]) { // 같은 위치의 문자가 일치하는 경우
cnt++; // 일치하는 문자 개수 증가
}
}
//예를 들어 cnt가 0 이고 lyricArray.lenght 16 이면 accuracy는 0
//예를 들어 cnt가 5 이고 lyricArray.lenght 16 이면 accuracy는 31.25 즉 실수가 나온다
//즉
//정확도를 계산할 때, 일반적으로 정확도를 퍼센트로 나타내기 위해서는 소수점 이하 값을 필요로 함.
//그러나 cnt와 lyricArray.length는 모두 정수형 데이터임
//따라서 정수형으로 나누기 연산을 수행하면 소수점 이하 값은 버려지고 결과는 정수형으로 반환되어버림
//결론 형변환을 해줘야 한다
// accuracy = (int) (cnt /(double)lyricArray.length * 100); 1번
// accuracy = (int) ((double) cnt /lyricArray.length * 100); 2번
// accuracy = (int) ((double) cnt /(double) lyricArray.length * 100); 3번
// 1,2,3번 모두 동일한 결과가 나옴
//나는 선생님의 문제영상에 65%으로 나와서 Math.round를 사용하여 반올림 해주었음 (이때 int는 지워줘야함. 반올림해야해서)
/*
하느님이 보우하사 우리나라 만세
하느님이 보우하사 oooo oo
■타자속도 : 85타 /분 ■정확도 : 65%
*/
accuracy = Math.round(((double) cnt /(double)lyricArray.length * 100));
//결과 출력
System.out.println("\u25A0" + "타자속도 : " + Speed + "타 /분 " + "\u25A0" + "정확도 : " + (int) accuracy+ "%");
} else {
System.out.println("입력 글자수가 넘어갔습니다");
}
}
}
}