2013-07-16 2 views
0

작성하려고하는 주사위 롤링 프로그램에 문제가 있습니다 (콘솔 만 사용함). 다음은 주사위입니다 롤링 클래스 파일 자체 :for 루프 관련 Java 문제

import java.util.Random; 

public class rtd 
{ 
    public static int[] rollthedice(int numSides, int numRolls) 
    { 
     int[] rollCounter = new int[numSides]; 
     for (int counter = 0; counter < numRolls; counter++) 
     { 
      Random randRoll = new Random(); 
      int die = randRoll.nextInt(numSides) + 1; 
      if ((counter + 1) == die) 
      { 
       rollCounter[counter] = die; 
      } 
     } 
     return rollCounter; 
    } 
} 

클래스에 대한 문제는 어떤 이유로, for 루프가 나는 그것이 다음 클래스의 작동 있는지 확인하기 위해 클래스를 테스트입니다 때 작동을 거부한다는 것입니다 같은 폴더 : 나는 "테스터"클래스를 실행하면

public class tester 
{ 
    public static void main(String[] args) 
    { 
     rtd roller = new rtd(); 
     int[] results = new int[6]; 
     results = rtd.rollthedice(6, 20); 
     int rollNumber = 1; 
     for (int counter = 0; counter < results.length; counter++) 
     { 
      System.out.println(rollNumber + " " + results[counter]); 
      rollNumber++; 
     } 
    } 
} 

, 결과는 단 하나의 롤 for 루프 롤의 지정된 번호의 코드를 반복하지 않았다는 것을 의미 완료되었음을 보여줍니다. 아무도 내게 가능한 해결책이나 설명을 제공 할 수 있습니까? 다른 결함이 있으면 알려주십시오.

문제가 내 IDE (BlueJ)에있을 수 있다고 생각합니다.

+0

각 루프마다 무작위 객체를 생성합니다. – nachokk

+1

코드에 여러 가지 문제가있는 것 같습니다. [int [] rollCounter = new int [numSides];'int []이어야합니다. rollCounter = new int [numRolls] ; ', 하나? 'if ((counter + 1) == die)'가 달성해야하는 것은 무엇인지 모르겠다. – Blorgbeard

+0

'if ((counter + 1) == die)'조건은 나에게 이해가 가지 않는다. –

답변

1

우선 언어의 naming conventions을 따라야합니다. 당신이 방금 시작한 걸 압니다. 읽을 시간을 찾아주십시오.

원하는 경우에도 클래스 및 메소드 이름을 변경하지 않고 코드를 수정했습니다. 나는 그것을 당신에게 운동으로 남겨 둘 것입니다.

다음은 rtd 클래스의 수정 된 버전입니다. 소스 코드의 주석을 참조하십시오.

public class rtd 
{ 
    public static int[] rollthedice(int numSides, int numRolls) 
    { 
     // An array of total number of rolls (NOT sides) to save the result of all rolls 
     int[] rollCounter = new int[numRolls]; 

     // Let's roll n-th times where n is numRolls 
     for (int counter = 0; counter < numRolls; counter++) 
     { 
      // Let's get a random number between 1 to numSides (A die usually has 6 sides with 1 to 6 dots) 
      int randomSide = getRand(1, numSides); 

      // Let's store the current roll result in array 
      rollCounter[counter] = randomSide; 
     } 

     return rollCounter; 
    } 

    /** 
    * This method returns a number between a given range inclusive 
    */ 
    public static int getRand(int min, int max) 
    { 
     return min + (int)(Math.random() * ((max - min) + 1)); 
    } 
} 

또한, 당신은 아주 쉽게 이해해야 소스의 this-

public class tester 
{ 
    public static void main(String[] args) 
    {    
     int[] results = rtd.rollthedice(6, 20); 

     // Since counter starts with 0, we always add 1 so we can read from 1 to 20    

     for (int counter = 0; counter < results.length; counter++) 
     { 
      System.out.println("Roll Number: " + (counter + 1) + " Side Picked: " + results[counter]);    
     } 
    } 
} 

코멘트처럼 테스터 클래스를 향상시킬 수 있습니다. 궁금한 점이 있으면 질문하십시오.

+0

도움을 주셔서 감사합니다! (내 문제는 IDE 관련이 아닌 것으로 밝혀졌다.) –

+0

도와 드리겠습니다. :) –