2013-03-10 9 views
0

저는 java의 초보자이고 온라인 질문을 연습하고 있습니다. 나는이 질문을 가로 질러 꽤 오랫동안 붙어있었습니다.For 루프는 내가 원하는 것을 출력하지 않습니다.

사용자에게 원하는 합계를 묻는 diceSum 클래스를 작성한 다음, 합계가 원하는 합계가 될 때까지 두 개의 6 면체 주사위를 반복 굴립니다. 다음은 사용자와의 대화 예상입니다.

Desired dice sum: 9 
4 and 3 = 7 
3 and 5 = 8 
5 and 6 = 11 
5 and 6 = 11 
1 and 5 = 6 
6 and 3 = 9 

이것은 내가 수행 한 것입니다.

import java.util.Random; 
import java.util.Scanner; 
public class diceSum{ 
    public static void main(String[] args){ 
     System.out.print("Desired dice sum: "); 
     Scanner sc=new Scanner(System.in); 
     int input=sc.nextInt(); 

     Random rnd=new Random(); 
     int r1=rnd.nextInt(7); 
     int r2=rnd.nextInt(7); 

     int sum=0; 
     for(int i=0;i<6;i++){ 
      sum=r1+r2; 
      System.out.println(r1 + "and" + r2 + "=" + sum); 

     } 

    } 
} 

내 출력은 내가 몇 INT R3 =을 작성해야하는 경우 다른 임의의 number.I가 생각하고를 제공하지 않고 6 시간 0과 2를 인쇄합니다 오는 방법을 이해 해달라고

Desired dice sum:9 
0 and 2=2 
0 and 2=2 
0 and 2=2 
0 and 2=2 
0 and 2=2 
0 and 2=2 

입니다 rnd.nextInt (7), int r4 = rnd.nextInt (7). 하지만 길어질 것이라고 생각했지만 가능한 방법입니다.

+1

당신은 당신이 외부 난수를 만들기 때문에 실제로 ... 거기 루프 – nneonneo

+0

더 많은 임의의 int를 얻을 필요 고리. –

+0

그래서 더 int r3, int r4 등을 만들어야합니까? – user2148463

답변

3

사용 :

int r1; 
int r2; 
for(int i=0;i<6;i++){ 
    r1=rnd.nextInt(6) + 1; 
    r2=rnd.nextInt(6) + 1; 
    sum=r1+r2; 
    System.out.println(r1 + "and" + r2 + "=" + sum); 
    if (sum == input){ 
     // This will break once you get the value. 
     break; 
    } 
} 

계속 새로운 난수를 얻을 수 있습니다. rnd.nextInt(6) + 1을 사용하여 1 - 6을 얻으십시오 (0 제외).

당신은 6 번뿐만 아니라 찾을 때까지 계속 점검을해야합니다. 대신 while 루프를 사용해야합니다.

+0

나는 루프에 r1과 r2를 넣어두면 루핑을 계속하고 새로운 결과물을 나에게 줄 것이다.내가 항상 그 변수를 넣어야하는지 모르겠다. 내 루프를 안팎으로? – user2148463

+0

루프 밖에서 변수를 선언해야하지만 내부에서 할당해야합니다. – BobTheBuilder

+0

죄송합니다. 다시 명확히하기 위해 루프 외부에서 int r1 = 0 및 r2 = 0을 초기화하고 r1 = rnd.nextInt (6) + 1; 및 r2 = rnd.nextInt (6) + 1; 루프 내부 – user2148463

1
int r1; 
int r2; 
for(int i=0;i<6;i++){ 
    r1=rnd.nextInt(6) + 1; 
    r2=rnd.nextInt(6) + 1; 
    sum=r1+r2; 
    System.out.println(r1 + "and" + r2 + "=" + sum); 
    if (sum == input){ 
     break; 
    } 
} 

그러나 여기 또한 당신은 루프에 r1r2의 선언/초기화를 이동해야

4 and 3 = 7 
3 and 5 = 8 
5 and 6 = 11 
5 and 6 = 11 
1 and 5 = 6  
6 and 3 = 9 
+0

코드를 올바르게 작성하고 명시 적으로 수행 할 작업을 보여줍니다. –

1

처럼 같은 번호를 받아보실 수 없습니다. 그렇지 않으면, 그들은 한 번 설정되고, 나머지 프로그램 실행을 통해 그 자리에 남아 있습니다.

6 개의 던지기를 요구하지는 않으며 원하는 합계에 도달하는 데 필요한만큼 많은 작업을 수행해야합니다. 루프가이 될 수 있으려면 입력 된 숫자가 최소 2 개에서 많아야 12 개인지 확인해야합니다.

int r2=rnd.nextInt(7); 

그것은 당신에게 0에서 6 (포함)에 수를 제공하지만, 실제 주사위 던지기는 0을 생성 할 수 없습니다

는 또한, 이것은 잘못된 것입니다. 대신, 당신은 다음과 같아야합니다

int r2=rnd.nextInt(6)+1; 

귀하의 루프를 작성해야합니다

int sum; 
do { 
    int r1=rnd.nextInt(6) + 1; 
    int r2=rnd.nextInt(6) + 1; 
    sum=r1+r2; 
    System.out.println(r1 + "and" + r2 + "=" + sum); 
} while (sum != input); 
관련 문제