2010-05-06 8 views
2

J'essaie de créer un programme simple qui choisit un nombre aléatoire et prend l'entrée de l'utilisateur. Le programme devrait indiquer à l'utilisateur si la supposition était chaude (-/+ 5 unités) ou froide, mais je n'atteins jamais la condition d'autre.Quel est le problème avec ma logique (syntaxe Java)

est ici la section du code:

public static void giveHint (int guess) { 
    int min = guess - 5; 
    int max = guess + 5; 
    if ((guess > min) && (guess < max)) { 
     System.out.println("Hot.."); 
    } else { 
     System.out.println("Cold.."); 
    } 
} 
+0

Rappelez-vous toujours que vous pouvez développer des expressions: 'deviner> min' ~' deviner> (deviner - 5) '~ hmm? –

+1

@soda: Si vous avez trouvé l'une des solutions mentionnées assez utile pour résoudre votre problème, veuillez en accepter une comme réponse :) –

Répondre

8

Voici votre problème:

int min = guess - 5; 
int max = guess + 5; 

min est toujours moindre que guess et max est toujours supérieure à guess.

+0

+1 @BalusC: Et j'ajouterais que pour corriger la logique de cette fonction , la méthode 'giveHint' devrait prendre deux paramètres:' int guess' et 'int actual'. – bguiz

+0

@bguiz: oui, @nevelis l'a déjà signalé. – BalusC

+0

Je suis obligé de déclarer que 'min' est inférieur à' guess' (et /) ou 'max' est supérieur à' guess'. Considérez 'guess' comme' Integer.MAX_VALUE' et 'Integer.MIN_VALUE' par exemple. –

11
int min = guess - 5; 
int max = guess + 5; 

devrait être:

int min = actualAnswer - 5; 
int max = actualAnswer + 5; 
-1

Vous calculez min et max en fonction de deviner, donc je imagine est toujours entre min et max donc (devinez> min) & & (devinez < max) est toujours vrai.

0

Vous devez passer dans la réponse réelle, non seulement la conjecture, puisque la logique ne peut pas dire ce que le mélange approprié/max devrait en être autrement:

public static void giveHint (int guess, int actual) { 
    int min = actual - 5; 
    int max = actual + 5; 
    if ((guess > min) && (guess < max)) { 
     System.out.println("Hot.."); 
    } else { 
     System.out.println("Cold.."); 
    } 
} 
-1

permet d'utiliser un exemple:

int guess = 20; 
int min = guess - 5 = 15; 
int max = guess + 5 = 25; 

donc

min < guess < max 

Pourquoi? Parce que vous comparez la conjecture à soi-même! Je pense que vous devez avoir la réponse réelle, et non pas la conjecture

1

Vous définissez guess comme étant à la fois > min (parce que int min = guess - 1) et < max (parce que int max = guess + 5). Alors bien sûr, la première condition est toujours remplie. Vous devriez utiliser la valeur secrète réelle pour définir min et max.

-1

Je ne peux pas mettre la chose complète dans un commentaire, alors voici ce que votre code devrait être:

public static void giveHint (int guess, int actual) { 
    int min = actual - 5; 
    int max = actual + 5; 
    if ((guess > min) && (guess < max)) { 
     System.out.println("Hot.."); 
    } else { 
     System.out.println("Cold.."); 
    } 
-1

Une autre solution:

public static void giveHint (int actual, int guess) { 
     if(Math.abs(actual - guess) <= 5) { 
      System.out.println("Hot"); 
      return; 
     } 

     System.out.println("Cold"); 
    } 
+0

à celui qui downvoted: soin d'expliquer pourquoi? –

0

min et max doit utiliser la valeur du joueur cherche (valeur secrète) plutôt que la valeur fournie par le joueur. Tel quel, min et max change chaque fois que le joueur donne une estimation et que vous n'utilisez même pas la valeur secrète.