2015년 1월 27일 화요일

자바 Quiz 예제

*예제는 남궁성님의 코드 초보 스터디 카페에 있는 Java 1000제에서 가져왔습니다.

 주어진 문자열 데이터를 가지고 실행결과와 같이 출력되도록 코드를 완성하세요.
 데이터의 형식은 문제, 답, 선택지의 순서로 되어 있으며 구분자는 `(숫자1옆의 키)입니다.

[실행결과]
[1] 다음 중 키워드가 아닌 것은?
1.final 2.True  3.if    4.public

[2] 다음 중 자바의 연산자가 아닌 것은?
1.&     2.|     3.++    4.!=    5./     6.^

[3] 다음 중 메서드의 반환값이 없음을 의미하는 키워드는?
1.void  2.null  3.false
public static void main(String[] args) { 
           String[] data = { 
                 "다음 중 키워드가 아닌 것은?`2`final`True`if`public", 
                 "다음 중 자바의 연산자가 아닌 것은?`5`&`|`++`!=`/`^", 
                 "다음 중 메서드의 반환값이 없음을 의미하는 키워드는?`1`void`null`false", 
           }; 
           for(int i=0;i<data.length;i++) {
            String[] dataArray = {};
            String[] dataArray2 = {};
            dataArray2=data[i].split("`",2);
                System.out.println(dataArray2[0]);
                dataArray=dataArray2[1].split("`");
                 for(int j =0; j<dataArray.length;j++){
                 System.out.print(dataArray[j]+" ");
                 }System.out.println();
           } 
     }
}


문제1에서 완성된 코드에 사용자 입력을 받아서 정답여부를 판단하여 마지막에 최종점수 실행결과와 같이 출력하도록 코드를 완성하세요.

[실행결과]
[1] 다음 중 키워드가 아닌 것은?
1.final 2.True  3.if    4.public
[답]2

[2] 다음 중 자바의 연산자가 아닌 것은?
1.&     2.|     3.++    4.!=    5./     6.^
[답]6

[3] 다음 중 메서드의 반환값이 없음을 의미하는 키워드는?
1.void  2.null  3.false
[답]1

정답개수/전체문항수 :3/3

import java.util.*;
public class QuizEx2 {
     public static void main(String[] args) { 
           String[] data = { 
                 "다음 중 키워드가 아닌 것은?`2`final`True`if`public", 
                 "다음 중 자바의 연산자가 아닌 것은?`6`&`|`++`!=`/`^", 
                 "다음 중 메서드의 반환값이 없음을 의미하는 키워드는?`1`void`null`false`", 
           }; 
           
           Scanner s = new Scanner(System.in); 
           int score = 0; 

           for(int i=0;i < data.length;i++) { 
                 String[] tmp = data[i].split("`",3); 

                 String question = tmp[0]; 
                 String answer = tmp[1]; 
                 String[] choices = tmp[2].split("`"); 

                 System.out.println("["+(i+1)+"] "+question); 
                 
                 for(int x=0;x < choices.length;x++) { 
                       System.out.print((x+1)+"."+choices[x]+"\t"); 
                 } 
                 System.out.println(); 
                 String solution = s.nextLine();
                 if(solution.equals(tmp[1])){
                 score++;
                 }
               
 
                 System.out.println(); 
                 System.out.println(); 
           } 
          
          System.out.print("정답개수/전체문항수: "+score+"/3");
     } // main 
}

문제2에서 완성된 코드를 이용해서, 문제의 순서를 임의로 바꾸고, 선택지도 임의로 바뀌어 출력되도록 하세요.

[실행결과]
[1] 다음 중 자바의 연산자가 아닌 것은?
1./     2.|     3.++    4.!=    5.^     6.&
[답]5

[2] 다음 중 키워드가 아닌 것은?
1.final 2.True  3.if    4.public
[답]2

[3] 다음 중 메서드의 반환값이 없음을 의미하는 키워드는?
1.null  2.void  3.false
[답]2

정답개수/전체문항수 :3/3

import java.util.*; 
class QuizEx3 { 
      public static void main(String[] args) { 
            String[] data = { 
                  "다음 중 키워드가 아닌 것은?`2`final`True`if`public", 
                  "다음 중 자바의 연산자가 아닌 것은?`6`&`|`++`!=`/`^", 
                  "다음 중 메서드의 반환값이 없음을 의미하는 키워드는?`1`void`null`false`", 
            }; 
            
            Scanner s = new Scanner(System.in); 
            int score = 0; 

            shuffle(data); // 문제를 섞는다.

            for(int i=0;i < data.length;i++) { 
                  String[] tmp = data[i].split("`",3); 

                  String question = tmp[0]; 
                  String answer = tmp[1]; 
                  String[] choices = tmp[2].split("`"); 

                  shuffle(choices); // 선택지를 섞는다.

                  System.out.println("["+(i+1)+"] "+question); 

                  for(int x=0;x < choices.length;x++) { 
                 System.out.print((x+1)+"."+choices[x]+"\t");
                  } 

                  System.out.println(); 
                  System.out.print("[답]"); 
                  String input = s.nextLine(); 
                  
                  if(input.equals(answer)) { 
                        score++; 
                  } 

                  System.out.println(); 
                  System.out.println(); 
            } 

            System.out.println("정답개수/전체문항수 :"+score+"/"+data.length); 
      } // main 

      public static void shuffle(String[] data) {
           // 코드를 완성하세요.
           if(data.length<=0){
         System.out.print("장난치냐? 잘하자~ 응?");
       
           }else{
          for(int i=0; i<data.length*2;i++){
         int idx = (int) (Math.random()*data.length);
          String temp = data[0];
          data[0]=data[idx];
          data[idx]=temp;
           }
           //  ScrambledWord 문제의 적용
      } // shuffle() 
   }
}






[출처] [Java1000제] Simple Quiz 2 - 간단한 다지선다형 문제 (남궁성의 코드초보스터디(자바 java, c언어)) |작성자 남궁성

댓글 없음:

댓글 쓰기