2014-11-11 4 views
0

저는 학생들이 퀴즈 점수를 받도록하는 수업을 만들고 있습니다. 여기에 사양이 있습니다 : 생성자는 입니다. 입력 매개 변수 길이를 사용하여 int 유형 배열의 인스턴스를 만듭니다. 배열의 각 요소는 -1로 초기화됩니다. b. 개수는 0으로 설정됩니다. 배열의 길이는 아니지만 유효한 점수의 수입니다. 즉, 스코어는 부분적으로 채워진 배열이며, 카운트는 유효한 점수의 END 위치로 사용되는 입니다. c. 두 번째 입력 매개 변수로 이름을 설정하십시오.배열이 가득 찰 때까지 값을 계속 입력 하시겠습니까?

add 메소드에 문제가 있습니다. 나는 학생들이 몇 개의 퀴즈를 뽑을 지에 대한 크기를 입력해야하고 배열이 가득 찰 때까지 퀴즈마다 점수를 더해야합니다.

예 : 퀴즈의 크기를 3으로 입력하면 3 가지 점수를 추가 할 수 있지만 3을 초과하면 "배열이 꽉 찼습니다."와 같은 메시지가 표시됩니다 _____ 추가 할 수 없습니다 ".

여기 내 클래스에 대한 지금까지이 작업은 다음과 같습니다

public class Quiz { 

    private static int [] scores; 
    private int count; 
    private static String name; 


    public Quiz (int[] scores, int count, String name){ 
     int size=0; 
     scores=new int [size]; 
     count=0; 
     name=" "; 
    } 

    public void addScores(int [] scores){ 
     int size=0; 
     scores=new int [size]; 
     for(int i=0; i<size;i++) 
      if(i<size) 
       System.out.println(scores[i]); 
      else 
       System.out.println("Array is full! the value"+ " " + scores + " "+ "cannot be added."); 

} 

여기에 테스트 드라이버 코드의 일부 : 당신의 addScores 방법의 코드에서

Scanner in = new Scanner (System.in); 

do { 
    System.out.println("\nPlease enter a command or type ?"); 
    String choice; 

    choice = in.next().toLowerCase(); 
    command = choice.charAt(0); 
    switch (command) { 
     case 'n': 
      System.out.println("[Create a new data]"); 
      System.out.println("[Input the size of quizzes]:"+ " "); 
      int size=in.nextInt(); 
      String linebreak = in.nextLine(); 
      System.out.println("[Input the name of student]:"+ " "); 
      String name=in.nextLine(); 

      break; 

     case 'a': 
      System.out.println("a [Add a score]:"+ " ");{ 

      int i=0;    
      i=in.nextInt(); 

      break; 
    } 
} 
+2

왜이 생성자'public quiz (int [] scores, int count, String name)'는 일부 인수가 필요합니까? 다음 일 :'scores = new int [size];'...'size'는'0'으로 설정되었으므로'0' 항목을 허용합니다 ...별로 유용하지 않습니다, 그렇죠? 그리고 마지막으로 (현재) : 새로운 배열을 만드는 대신에'addScores' 메소드에서 기존의 배열을 사용하는 것이 더 합리적이지 않습니까? – Tom

+0

두 가지 관찰 : 1) 생성자 인수 중 하나에 필드를 초기화하는 매우 일반적인 관용구를 채택하는 경우 생성자의 일부 행을 'this.count = count;'와 비슷하게 변경하려고합니다. –

+0

2)'name '이나'scores'가 정적 인 것을 원하지 않을 것입니다. 그들은 분명히 개별적인'Quiz' 인스턴스에 속합니다! 그렇지 않으면 두 번째 퀴즈가 코드의 다른 곳에서 만들어진 경우 갑자기 첫 번째 퀴즈의 이름과 점수가 업데이트됩니다. 그것은 객체를 가지고있는 목적을 모두 무효로합니다 ... –

답변

2

봐가. 당신은 그것을 int 배열 scores을 전달하지만 당신은 다음 줄을 생략 할 필요가 크기 0의 새로운 배열에 값을 설정 :

scores=new int [size]; 

그리고 당신은 입력 배열의 크기로 크기 변수를 설정해야합니다.

int size = scores.length; 
+1

코멘트를 남길 필요가 없습니다 - 이것은 답변이며 올바른 AFAICT입니다. –

+1

이것은 아주 좋습니다. OP는 for 루프에서 if/else 블록을 피하기 위해 코드를 변경할 수도 있습니다 (별개의 답변을 만들고 싶지 않기 때문에 원하는대로 편집 할 수 있습니다). for 루프는 배열의 전체 길이가 될 것이므로 for 루프 안에 첫 번째 print 함수가있을 수 있습니다. 그런 다음 루프가 끝나면 값이 꽉 찼다 고 말할 수 있습니다. – AdamMc331