2011-12-02 2 views
-4

안드로이드에 대한 간단한 퀴즈를 만들려고합니다.자바 객체 참조는 어떻게 사용합니까?

개체 참조를 사용해야한다고 들었습니다. 나는 그것을 할 방법을 아주 확실하지 않다

이 내가 ... 지금까지 질문하고 정확하고 잘못된 답을 캡슐화

package com.aleksei.etb; 
public class ETBetaActivity extends Activity implements View.OnClickListener { 

     private String[] questions = 
     {"Q1", 
     "Q2", 
     "Q3", 
     "Q4", 
     "Q5", //5 
     "Q6", 
     "Q7", 
     "Q8", 
     "Q9", 
     "Q10" //10 
     }; 
     private String[] answers_correct = 
     {"Correct answer - 1", 
     "Correct answer - 2", 
     "Correct answer - 3", 
     "Correct answer - 4", 
     "Correct answer - 5", 
     "Correct answer - 6", 
     "Correct answer - 7", 
     "Correct answer - 8", 
     "Correct answer - 9", 
     "Correct answer - 10" 
     }; 

     private String[][] answers_wrong = 
     { {"Q1-1", "Q1-2" , "Q1-3"}, 
      {"Q2-1", "Q2-2" , "Q2-3"}, 
      {"Q3-1", "Q3-2" , "Q3-3"}, 
      {"Q4-1", "Q4-2" , "Q4-3"}, 
      {"Q5-1", "Q5-2" , "Q5-3"}, 
      {"Q6-1", "Q6-2" , "Q6-3"}, 
      {"Q7-1", "Q7-2" , "Q7-3"}, 
      {"Q8-1", "Q8-2" , "Q8-3"}, 
      {"Q9-1", "Q9-2" , "Q9-3"}, 
      {"Q10-1", "Q10-2" , "Q10-3"} 

     }; 
     private int counter = 0; 
     public Button answer_1, 
     answer_2,answer_3, 
     answer_4,skip; 

     public TextView question_tv, 
     tip_tv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getData(); 
     quizBegin(); 
    } 

    public static int getResults(){ 
     return 5; 
    } 


    @Override 
    public void onClick(View view) { 
     switch(view.getId()){ 
     case R.id.button5: //main 
      break; 
     case R.id.button1: //answer_1 
      break; 
     case R.id.button2: //answer_2 
      break; 
     case R.id.button3: //answer_3 
      break; 
     case R.id.button4: //answer_3 
      break; 
     } 
    } 

    private void getData(){ 
     //Everything 
     skip = (Button) findViewById(R.id.button5); 
     answer_1 = (Button) findViewById(R.id.button1); 
     answer_2 = (Button) findViewById(R.id.button2); 
     answer_3 = (Button) findViewById(R.id.button3); 
     answer_4 = (Button) findViewById(R.id.button4); 
     question_tv = (TextView) findViewById(R.id.question); 
     tip_tv = (TextView) findViewById(R.id.answ1); 

     //Buttons 
     skip.setOnClickListener(this); 
     answer_1.setOnClickListener(this); 
     answer_2.setOnClickListener(this); 
     answer_3.setOnClickListener(this); 
     answer_4.setOnClickListener(this); 

     //Text 
     skip.setText("Begin!"); 
     answer_4.setText(""); 
     answer_3.setText(""); 
     answer_2.setText(""); 
     answer_1.setText(""); 
     tip_tv.setText(""); 
    } 

    private void quizBegin(){ 
     String question = Question.(questions[counter], answers_correct[counter], 
       answers_wrong[counter],counter); //error here. 

     //What am I suppose to do?? 
      // How to use an object reference?? 
      // Help please! 

     question_tv.setText(""); 



     counter++; 
    } 



} 

질문 클래스를, 무슨 짓을했는지입니다.

public class Question { 

    private String question; 
    private String correctAnswer; 
    private List<String> incorrectAnswers; 
    private int counter = 0; 



    public Question(final String question, final String correctAnswer, 
      final String[] incorrectAnswers, int counter) { 
    // TODO: empty strings/nulls checks 
    this.question = question; 
    this.correctAnswer = correctAnswer; 
    this.incorrectAnswers = Arrays.asList(incorrectAnswers); 
    } 

    public List<String> getPossibleAnswers() { 
     final List<String> result = new ArrayList<String>(); 
     result.addAll(incorrectAnswers); 
     result.add(correctAnswer); 
     Collections.shuffle(result); 
     return result; 
    } 

    public boolean isCorrectAnswer(final String answer) { 
     if (answer.equals(correctAnswer)) { 
      return true; 
     } 
     return false; 
    } 

    public String getQuestion() { 
     return question; 
    } 

} 
+3

당신이하고 싶은 일을 명확히하고 이것을 코드 덤프로 사용하지 마십시오. –

+0

나는 그것을 알아 냈다. 질문과 비슷한 형태로 보였다. q_class = 새로운 질문 (질문 [counter], answers_correct [counter], \t \t \t \t answers_wrong [counter], counter); \t \t \t \t 문자열 질문 = q_class.getQuestion(); \t \t \t \t question_tv.setText (질문); 예? – Alex

+0

질문에 대해 혼란 스러웠던 것이 오해의 소지가 있다면 [object instantiation'] (http://searchcio-midmarket.techtarget.com/definition/instantiation) (자세한 내용은 내 질문에 편집으로 추가됨) . –

답변

2

난 단지 실제 질문에 대한 추측 할 수 있지만, 당신은 문자열의 배열을 사용하는 이유, 답변 올바른 질문, 잘못된 답변을 표현하기 위해? Question 개체 배열을 사용하고 올바르게 응답했거나 잘못 입력 한 경우 Question 개체를 관리하도록하십시오.

편집

객체의 instance 만들 지정된 파라미터의 종류, 순서 및 수를 소요 Question 클래스의 생성자를 호출 new Question(questions[counter], answers_correct[counter], answers_wrong[counter],counter); 문.

Question q = new Question(); 

새로운 Question 객체 인스턴스를 생성하고 q 변수 참조를 할당이 변수는 참조하는 Question isntance 클래스의 정보에 액세스하기 위해 사용될 수있다. 이것은 객체 지향 프로그래밍의 기본 개념입니다.

이 줄 당신을 위해 작동합니다

두 번째 편집 :.

문자열 [] SL = (문자열 []) q_class.getPossibleAnswers() toArray (새로운 String [0]);

그러나 문자열 배열에 캐스트 ((String[]))는 무의미합니다. 메서드 toArray(T[])generics을 사용하고 전달한 배열의 형식과 동일한 형식의 배열을 반환합니다. 따라서 new String[0]을 전달하면 String[]이 다시 전송됩니다. 따라서 String[]String[]으로 전송 중입니다.

처음에이 작업을 정말로하고 싶습니까? 배열 대신 List<String>을 사용할 수없는 이유는 무엇입니까?

유형별로 많은 형변환을 수행하는 경우 단일 유형에서 작동하도록 코드를 조정할 수 있는지 스스로 물어야합니다.

(사이드 젯, 백틱 (`)을 사용하여 인라인 코드 섹션을 나타낼 수 있으므로 주석에 넣은 코드 스 니펫을 쉽게 꺼내 읽을 수 있습니다.)

+0

아, 고마워. 하지만 배열을 배열로 변환하는 방법을 말해 줄 수 있습니까? 나는 잊었다. – Alex

+0

@John 당신이 새로운 것으로 보였기 때문에 대답을주는 대신 [ArrayList']에 대한 API 링크를 제공합니다 (http://docs.oracle.com/javase/7/). docs/api/java/util/ArrayList.html) 클래스에 있습니다. 여러분은'toArray' 메소드에 관심이있을 것입니다. –

+0

@ 존 내 잘못, 나는 당신이 변수를 'List '으로 선언하고 있다는 것을 몰랐다. 그것은 당신이 찾고있는 것을 바꾸지 않는다. 둘 다 당신의 필요에 맞는'toArray' 메쏘드를 가지고있다. –

관련 문제