문제1)
getAnswer(String[] strArr)는 배열strArr의 요소중의 하나를 임의로 골라서 반환한다.(Math.random()사용)
getScrambledWord(String str)는 주어진 문자열 str의 각 문자의 순서를 뒤섞은 다음, 새로운 문자열로 반환한다.
*(Math.random()사용)
public static String getAnswer(String[] strArr){
int getNumber = (int) (Math.random()*strArr.length);
//Math.random이 0.0부터 1.0 사이의 난수를 반환하기 때문에. strArr.length를 곱해준다.
// 그 후 int 캐스팅으로 소수점을 잘라준다.
String anwser = strArr[getNumber];
return anwser;
}
public static String getScrambledWord(String str) {
char[] chArr = str.toCharArray();
for(int i=0;i<str.length()*2;i++) {
int idx = (int)(Math.random()*str.length());
char tmp = chArr[0]; // 임시로 변수를 만든후 chArr[0]를 저장한다.
chArr[0] = chArr[idx]; // chArr의 임의의 문자를 chArr[0]에 저장한다.
chArr[idx] = tmp; // 변수에 저장된 값을 chArr의 임의의 장소에 저장한다.
} // for문으로 충분히 섞어준다.
return new String(chArr);
}
==> getScrambledWord 메소드의 단점: 작은 확률이긴 하지만 섞이지 않은 채로 str이 그대로 나올 수 있다.
그래서 내가 생각한 방법
public static String getScrambledWord(String str){
int [] Numbers = {0};
char []words = str.toCharArray();
String word= new String();
try{
for(int i =0; i<str.length();i++){
int getNumber = (int) (Math.random()*str.length());
for(int j = 0;j < Numbers.length;j++){
if((getNumber == Numbers[j])){
break;
}
}
word+=words[getNumber];
Numbers[i]=getNumber;
}
}catch(ArrayIndexOutOfBoundsException ee){
System.out.println(ee);
}
return word;
}
==> 실패했다 ... <= 실패한 이유: 반복문과 배열을 너무 계획없이 쓴 것같다.
그 때문에 ArrayIndexOutOfBoundsException이 생겼고
이 문제를 해결하는 데 너무 오랜 시간이 걸려 접었다.
장점: 절대로 str이 그대로 나올 수 없다. <= if문으로 제한을 걸어 뒀기 때문
문제2)
public static String getAnswer(String[] strArr){
int getNumber = (int) (Math.random()*strArr.length);
//Math.random이 0.0부터 1.0 사이의 난수를 반환하기 때문에. strArr.length를 곱해준다.
// 그 후 int 캐스팅으로 소수점을 잘라준다.
String anwser = strArr[getNumber];
return anwser;
}
public static String getScrambledWord(String str) {
char[] chArr = str.toCharArray();
for(int i=0;i<str.length()*2;i++) {
int idx = (int)(Math.random()*str.length());
char tmp = chArr[0]; // 임시로 변수를 만든후 chArr[0]를 저장한다.
chArr[0] = chArr[idx]; // chArr의 임의의 문자를 chArr[0]에 저장한다.
chArr[idx] = tmp; // 변수에 저장된 값을 chArr의 임의의 장소에 저장한다.
} // for문으로 충분히 섞어준다.
return new String(chArr);
}
==> getScrambledWord 메소드의 단점: 작은 확률이긴 하지만 섞이지 않은 채로 str이 그대로 나올 수 있다.
그래서 내가 생각한 방법
public static String getScrambledWord(String str){
int [] Numbers = {0};
char []words = str.toCharArray();
String word= new String();
try{
for(int i =0; i<str.length();i++){
int getNumber = (int) (Math.random()*str.length());
for(int j = 0;j < Numbers.length;j++){
if((getNumber == Numbers[j])){
break;
}
}
word+=words[getNumber];
Numbers[i]=getNumber;
}
}catch(ArrayIndexOutOfBoundsException ee){
System.out.println(ee);
}
return word;
}
==> 실패했다 ... <= 실패한 이유: 반복문과 배열을 너무 계획없이 쓴 것같다.
그 때문에 ArrayIndexOutOfBoundsException이 생겼고
이 문제를 해결하는 데 너무 오랜 시간이 걸려 접었다.
장점: 절대로 str이 그대로 나올 수 없다. <= if문으로 제한을 걸어 뒀기 때문
문제2)
1. 화면을 통해 사용자의 입력을 받는다.(Scanner클래스 사용)
2. 사용자가 q 또는 Q를 입력하면 프로그램을 종료한다.
3. 사용자가 정답을 맞출때까지 반복하다가
4. 사용자가 정답을 맞추면, while문을 빠져나간다.
while(true){ //3.
System.out.println("Question: "+question);
System.out.print("Your answer is : ");
Scanner ic = new Scanner(System.in); //1.
String sk = ic.next();
if(sk.equals("Q")||sk.equals("q")){ //2. 답에서는 equalsIgnoreCase 메소드를 사용.
System.out.print("프로그램을 종료합니다.");
break;
}
if(sk.equals(answer.toLowerCase())||sk.equals(answer.toUpperCase())){
System.out.print("정답입니다");
break; //4. break만 삭제하면 문제3)의 답이 된다.
}else{
System.out.println(sk+"는 정답이 아닙니다. 다시 시도해주세요");
}
}
문제3)
문제2의 예제를 변경해서, 문제를 맞추더라도 프로그램이 종료되지 않고 다음문제를 보여주도록 하세요.
문제4) getHint를 완성하시오.
String getHint(String answer, char[] hint) - 문제의 답의 일부를 보여주는 메서드
한번 틀릴 때마다 한글자씩 더 보여준다.
answer - 문제의 정답
hint - 문제의 문자개수를 '_'로 표현해줌. ex) LOVE => ____
public static String getHint(String answer, char[] hint) {
int count = 0; //힌트에 포함된 '_'의 개수
char[]hintArray=answer.toCharArray();
for(int i=0;i<hint.length;i++){ // 이 for문을 통해 '_' 의 갯수를 센다.
char temp = hint[i];
if(temp=='_'){
count++;
}
}
if(count > 2){ // 너무 많은 힌트를 주는 것을 방지하기 위해
int idx = (int) (Math.random()*hint.length); //'_' 갯수가 2개 이상이어야 힌트를 준다.
hint[idx]=hintArray[idx];
}
return new String(hint);
}
[출처]
[Java1000제]Word Scramble 4 - 단어 맞추기(3번답 포함) (남궁성의 코드초보스터디(자바 java, c언어)) |작성자 남궁성[출처] [Java1000제]Word Scramble 3 - 단어 맞추기 (남궁성의 코드초보스터디(자바 java, c언어)) |작성자 남궁성
[Java1000제]Word Scramble 4 - 단어 맞추기(3번답 포함) (남궁성의 코드초보스터디(자바 java, c언어)) |작성자 남궁성[출처] [Java1000제]Word Scramble 3 - 단어 맞추기 (남궁성의 코드초보스터디(자바 java, c언어)) |작성자 남궁성
[출처] [Java1000제]Word Scramble 2 - 단어 맞추기(1번답 포함) (남궁성의 코드초보스터디(자바 java, c언어)) |작성자 남궁성
댓글 없음:
댓글 쓰기