首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用while循环执行6次循环

尝试使用while循环执行6次循环
EN

Stack Overflow用户
提问于 2020-10-25 08:24:34
回答 3查看 192关注 0票数 0

我正在尝试让我的程序循环6次。我的问题是,它一直在运行,并且在6次之后没有停止。我将answer、userGuess和numOfGuesses作为实例变量。

代码语言:javascript
复制
public static int guess(int userGuess){ 

System.out.println("Enter your guess");    
  
  while (numOfGuesses <= 6){  // this is my problem     
    numOfGuesses = numOfGuesses + 1 ;
    
  while (userGuess != answer){
       userGuess = scan.nextInt();    
                            
  if(userGuess < answer){                 
       System.out.println("Too low, try again");
    }
            
  else if(userGuess > answer){  
       System.out.println("Too high, try again");
    }                  
                       
  else{                   
   }                   
  } 
 }
// rest of method works fine 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-28 06:19:04

我想通了。我会在我的项目评分后发布整个答案,但它需要一个for循环。

另外,我希望这对将来在猜谜游戏项目中遇到困难的学生有所帮助。显然,不要复制和粘贴,但要以此为起点。这是教授们看你是否抄袭代码的第一个地方。

代码语言:javascript
复制
private static int setGuess(int userGuess){  
  int differential = answer - guess;
  String low = "Too low, try again ";
  String high = "Too high, try again ";
  String colder = "Getting colder";
  String warmer = "Getting warmer";
 
       
  System.out.println("Enter your guess.");
       
  for(int i = 0; i < 6; i++){
                         
     while(userGuess != answer){
        userGuess = scan.nextInt();
        
        if (userGuess < answer){
           System.out.println(low);
           
           if(differential < 15){
              System.out.println(colder);
           }
           else if (differential >= 15){
              System.out.println(warmer);
           } 
           
           else{
           }          
        }  
        
        else if (userGuess > answer){
           System.out.println(high);
            
           if(differential <= 15){
              System.out.println(warmer);
           }
           
           else if (differential > 15){
              System.out.println(colder);
           } 
           
           else{
           }  
        }
        
        else{
        }
     }
  }
     
     if (userGuess == answer){
        System.out.println("Congratulations! You guessed the number!");
     } 
            
     if (numOfGuesses == MAX_GUESSES_ALLOWED){
      gameOver = true;
   
  }
    
   return userGuess;
  }
票数 0
EN

Stack Overflow用户

发布于 2020-10-25 09:22:55

这种循环结构可能不是您想要的。在有2个while循环的情况下,您实际上并没有以任何方式限制猜测的数量-您所要做的就是重新运行猜测程序6次。此外,由于内部while循环会一直执行,直到答案完全正确,所以用户无法知道他们的猜测是过低还是过高。你可能想要类似这样的东西:

代码语言:javascript
复制
public static int guess(int userGuess){ 
    do {
        System.out.println("Enter your guess: ");   
        userGuess = scan.nextInt();
        if (userGuess < answer) {                 
           System.out.println("Too low, try again");
        } else if (userGuess > answer) {  
            System.out.println("Too high, try again");
        } else {                   
            // todo tell the user they were right
        }
        numOfGuesses = numOfGuesses + 1;
    } while (numOfGuesses <= 6 && userGuess != answer);
    // in the case the user used up all their guesses, tell them they didn't get it right
    // todo return something here because this function is supposed to return an int
}

还要注意我在底部的注释,这个方法在返回一些东西之前不会编译。我还假设所有引用的变量都在其他地方定义。

我也怀疑参数是userGuess --提供一个我们立即覆盖的参数有什么意义呢?也许参数应该是answer

票数 1
EN

Stack Overflow用户

发布于 2020-10-25 11:30:13

程序中的一个主要问题是while语句中的条件不会给出您想要的结果。您应该使用带有while(numOfGuesses<=6 && userGuess != answer)条件的while循环代替两个while循环。这是因为while循环将一直执行,直到它运行六次,并且用户到那时还没有猜到答案。假设您的实例变量和方法使用了一个类,而另一个类包含了main方法,那么您可以尝试这样做。

代码语言:javascript
复制
public class guess {

 //these are your instance variables 
 int numOfGuesses=6;
 int tempNum =1;
 
 //answer can be any number. I use 2 as an example, this is the number to be guessed in 6 tries. 
 int answer = 2;
 

public void guess(int userGuess, int answer){ 
      if(userGuess < answer){                 
           System.out.println("Too low of a number");
        }
                
      else if(userGuess>answer){  
           System.out.println("Too high of a number");
        }
      //do something when user guesses answer. Example, end the program.
      else if(userGuess==answer) {
          //print the correct guess
          System.out.println("You have guessed the correct answer " + answer);
          
          //exit out of entire program
          System.exit(0);
  }
 }
}

上面的类包含实例变量,但没有main方法和guess方法。因此,使用main方法创建另一个类。这使用了面向对象的编程。

代码语言:javascript
复制
import java.util.Scanner;

public class guessTester { 
public static void main(String[] args) {
   //initialize userGuess
   int userGuess = 0;
   
   //input for scanner
   Scanner input = new Scanner(System.in);
   
   
   guess Guess = new guess();
    
    //while loop becomes false when numOfGuesses = 6 and the userGuess does not equal to the answer. 
      while (Guess.tempNum<= Guess.numOfGuesses && userGuess != Guess.answer){  
        System.out.println("Enter a guess");
        userGuess = input.nextInt();
           
        Guess.tempNum+=1;

        Guess.guess(userGuess,Guess.answer);
         
        //if the temporary number is equal to number of guesses
        if(Guess.tempNum -1 ==Guess.numOfGuesses) {
            System.out.println("You ran out of guesses ! ");
        }
      }  
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64519261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档