2016-11-01 4 views
0

저는 현재 Java 1 클래스에 있으며 재미있는 게임을 추측합니다. 기본 테이크 입력은 너무 높거나 낮 으면 알려주고 다시 추측 할 수있게 해줍니다. 나는 컴퓨터가 추측 할 수있게 만드는 것이 흥미로울 것이라고 생각하고 추측을 그것과 비교합니다. 나는 모든 세대를 가지고 일하는 것을 비교하지만, 더 큰 것을 고려하지 않고 숫자를 추측한다. 내가 가진 :이전 난수보다 크거나 작은 난수를 생성하려면 어떻게해야합니까?

public static void autoPlay(int num){ 
    Random rand = new Random(); 
    int guess1 = rand.nextInt(100) + 1; 
    int counter = 0; 
    while(guess1 != num){ 
     counter++; 
     int guess = rand.nextInt(100) + 1; 
     int initialHigh = 100; 
     int initialLow = 0; 
     // I want it to guess smart and recognize if it were too high or too low, and generate a number between there 

     if(guess1 > num){ 
      int newGuess = rand.nextInt(initialHigh - guess1) + 1; 
     }else if(guess1 < num){ 
      int newGuess2 = rand.nextInt(initialLow + guess1) + 1; 
     } 
     initialLow = guess; 
     initialHigh = guess; 
     guess1 = guess; 
     System.out.printf("%3d", guess1); 
    } 
    System.out.println("It took " + counter + " guesses to get the correct number"); 
} 

나는 문 경우, 또는 경우 프로그래머 내 수학 나는 그렇게 호출 할 수 있습니다 뭔가 잘못이 무엇인지 말할 수 없다. 당신이 중복을 피하려면

답변

0

후 해당 번호를 생성하고 (전체 랜덤 함수)를 셔플 :

List<Integer> values = IntStream.range(0, /* max */).collect(Collectors.toList()); 
Collections.shuffle(values); 
int guesses = values.indexOf(/* some number */) + 1; 

당신이 순서대로 추측에는 요, 그래서 목록은 완전히 무작위로 정렬된다 무작위 목록, 따라서 인덱스는 추측 수입니다 (-1, 0으로 인덱싱 된 이후이므로)

0

코드의 문제는 방금 임의의 숫자에 대해 동일한 경계를 사용하고 있다는 것입니다.

if(guess1 > num){ 
      int newGuess = rand.nextInt(initialHigh - guess1) + 1; 
     }else if(guess1 < num){ 
      int newGuess2 = rand.nextInt(initialLow + guess1) + 1; 
     } 

그러나 당신은 당신이 당신이 전의 값 재사용, 그들을 전혀 사용하지 않는 : 당신은 여기에 새로운 경계를 생성하면해야 newGuessnewGuess2에 의해 생성 된 값을 사용 (

 initialLow = guess; 
     initialHigh = guess; 
     guess1 = guess; 
     System.out.printf("%3d", guess1); 

을 비록이 두 변수를 필요로하지 않지만, 그것들 중 하나를 if의 바깥에 선언하고, if의 값을 if의 내부에 할당합니다. 그런 다음 업데이트 된 값을 사용하게됩니다.

guessguess1과 같은 값을 저장하는 많은 변수를 만들었으므로 필요하지 않은 변수 중 하나를 선언하고 나중에 다시 사용해야합니다 (메모리를 절약 할 수 있도록).).

또한 initialHigh 및 initialLow를 모두 guess으로 설정하는 데 문제가있는 이유는 무엇입니까?

코드 논리를 검토하고 일부 변수를 정리해보십시오. 일부 변수는 복제됩니다.

그러나 요약하면 문제는 새로운 경계를 생성하지만 사용하지 않는 것입니다.

이것이 도움이되었는지 알려 주시고이 답변을 upvote/올바른 것으로 선택하신 것을 기억해주십시오.). 여전히 질문이 있으면 다시 게시하십시오.

관련 문제