2012-05-04 3 views
0

배열에서 10 개의 임의의 질문을 선택하는 수업을 위해 Android에서 상당히 단단한 퀴즈 게임을 만들었습니다. 현재 작동하는 방식은 사용자가 EditText 필드에 대답을 입력하는 것입니다. 또한 간단한 셔플 알고리즘을 사용하여 중복 질문을하지 않는 방법을 알아낼 수있어서 사용자에게 던져지는 모든 질문이 독특하다는 사실을 알게되어 기쁩니다 (저는 실제로 그 사실을 자랑스럽게 생각합니다).무작위 대답 가능성

이상적으로 게임을 객관식으로 만들고 싶었지만 시간이 없어서 위와 같이 제출했습니다. 하지만 게임을 더 좋게 만들고 사용자 친화적 인 방법을 생각해 왔으며 EditText 선택이 이상적인 IMO가 아니라고 생각합니다. 그래서 나는 이것을 다음과 같이 다시 쓰려고 생각하고 있었다 :

  1. 임의의 질문이 선택되었다;
  2. 질문에 4 개의 무작위 응답 선택 사항이 표시되며, 그 중 하나가 정답입니다.
  3. 답변 선택에 RadioButtons 및 RadioGroup을 사용합니다.
  4. 까다로운 부분 : 나는 예를 들어, 응답 선택이 표시 무작위로 정렬하려면 :
    • 질문 x는 임의의 순서로 A, B, C, rightAnswer을 표시됩니다 선택과 선택에 대답됩니다;
    • 는 y는 ㄱ됩니다 선택과 선택에 대답됩니다 질문, rightAnswer, C, A
    • 등 ...
    • 그래서 누군가가 올바른 방향으로 날 지점 수 있는지 궁금

이것을 달성하는 방법. 나는 전체 코드를 요구하지 않고, 단지 그것에 대해 더 많은 것을 읽을 수 있고 알아낼 수있게 도와 줄 곳이다. 내가 찾은 것 모두가 무작위 질문을하는 방법입니다.

미리 감사드립니다.

+0

무엇을 달성? 구체적으로 설명하십시오 - 정확히 * 당신이 문제가 있습니까? – amit

+3

질문에 사용하는 것과 동일한 셔플 알고리즘을 사용하지 않고 답변을 표시하기 전에 셔플을 할 수 없습니까? – digitaljoel

+0

죄송 합니다만, 달성하려는 의미는 "4. 까다로운 부분 : ..." – Roberto

답변

1

답변을 저장할 배열을 만듭니다. 그런 다음 0- [array.length]에서 임의의 숫자를 선택하고 배열의 해당 색인을 정답으로 설정하십시오. 예 :

int[] answers = new int[4]; 
answers[0] = getRandomAnswer(); 
answers[1] = getRandomAnswer(); 
answers[2] = getRandomAnswer(); 
answers[3] = getRandomAnswer(); 

int correctIndex = Random.nextInt(0,4); // Maybe off by 1? I didn't compile 
answers[correctIndex] = correctAnswer; 

이제 임의의 답변 3 개와 정답 1 개가 포함 된 배열이 있습니다. getRandomAnswer() 메소드가 올바른 답을 반환하지 않도록하거나, 정답의 여러 인스턴스에 대해이 시점에서 배열을 점검하고, 존재하는 경우 하나만 제외하고 모두 제거해야합니다.

배열의 응답으로 RadioGroup을 채울 수 있으며 그룹의 라디오 버튼 중 하나를 선택할 때 correctIndex 변수를 검사하여 사용자가 올바른지 알 수 있습니다.

+0

쿨, 그 시작이 올바른 방향입니다. 그렇게 명백하다! 이 답변과 셔플 알고리즘을 통해 독특한 답변을 얻으 려합니다. – Roberto

1

독점적으로 4 개 임의의 장소를 설정하는 아마 더 효율적이거나 우아한 방법이 있습니다, 이것은 나의 제안이다 :

int setPlace[4] = {0,0,0,0}; 

    setPlace[0] = Random.nextInt(3) + 1; 

    for (loop = 1; loop<=3; Loop++) 
{ 
    do 
    { 
    fix1 = Random.nextInt(3) + 1; 
    if ((fix1!=setPlace[0])&&(fix1!=setPlace[1])&&(fix1!=setPlace[2])(fix1!=setPlace[3])) 
    { 
    setPlace[loop]=fix1; 
    fix1=0; 
    } 
    } 
    while{fix1!=0} 
}