Java 扫描仪对象及其执行位置有问题

Java 扫描仪对象及其执行位置有问题,java,math,Java,Math,嘿,伙计们,我有个问题。我正在尝试编写一个猪骰子游戏,但我在程序的扫描器部分遇到了问题,我在扫描器部分询问用户是否想继续玩这个游戏。程序应该要求用户y或n播放,但我似乎无法让我的程序读取正确线路上的用户输入,并将用户信息转发给程序,以便我的if/else语句可以验证或使其无效。程序还没有完成,我只是想在继续之前解决这个问题。谢谢你的帮助 这是代码,我遇到问题的部分是takeTurn import java.util.*; public class PigDice { // when a play

嘿,伙计们,我有个问题。我正在尝试编写一个猪骰子游戏,但我在程序的扫描器部分遇到了问题,我在扫描器部分询问用户是否想继续玩这个游戏。程序应该要求用户y或n播放,但我似乎无法让我的程序读取正确线路上的用户输入,并将用户信息转发给程序,以便我的if/else语句可以验证或使其无效。程序还没有完成,我只是想在继续之前解决这个问题。谢谢你的帮助

这是代码,我遇到问题的部分是takeTurn

import java.util.*;
public class PigDice {
// when a player reaches this number, they win
public static final int WINNING_SCORE = 50; 

public static final int DIE = 6; // sides on a die. 

public static void main( String[] args ) {
    Scanner keyboard = new Scanner( System.in );
    Random rand = new Random();

    String winner = playGame( keyboard, rand );
    System.out.println( winner + " wins!" );
}
public static String playGame( Scanner scanner, Random rand ) {

    int score1 = 0; // player 1's score 
    int score2 = 0; // player 2's score 

    // play till someone wins
    while ( score1 < WINNING_SCORE && score2 < WINNING_SCORE ) {
        score1 += takeTurn( scanner, rand, 1, score1 );
        System.out.println( "Player 1 score: " + score1 );
        System.out.println( "***************************" );
        if ( score1 < WINNING_SCORE ) {   
            score2 += takeTurn( scanner, rand, 2, score2 );
            System.out.println( "Player 2 score: " + score2 );
            System.out.println( "***************************" );
        }
    }
    if ( score1 >= WINNING_SCORE ) {
        return "Player 1";
    }
    else {
        return "Player 2";
    }
}

public static int takeTurn( Scanner scanner, Random rand, int player, int score ) {
    int random = rand.nextInt(DIE)+ 1;
    System.out.println("Player " + player + " rolls: " + random);
    int firstRoll = random;
    int roundTotal = 0;
    String getAnswer = scanner.nextLine();

    if ( random > 1) {
        System.out.println( "Player " + player + " total for this round: " + firstRoll);
        roundTotal += firstRoll;
        System.out.print("Roll again? (y or n) : " + getAnswer);
        System.out.println();
        if ( "y".equalsIgnoreCase(getAnswer)) {
            System.out.println("Player " + player + " rolls: " + random);

        }else if ( "n".equalsIgnoreCase(getAnswer)) {
            System.out.println("Player " + player + " rolls: " + random);
        } 
    }else {
        System.out.println("Player " + player + ": turn ends with no new points.");
        System.out.println("Player " + player + " score: " + score);
    }     


    return WINNING_SCORE;    
} 
}
import java.util.*;
公营猪圈{
//当玩家达到这个数字时,他们获胜
公共静态最终积分=50分;
public static final int DIE=6;//DIE上的边。
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
Random rand=新的Random();
字符串赢家=游戏(键盘,兰德);
System.out.println(winner+“wins!”);
}
公共静态字符串游戏(扫描器、随机rand){
int score1=0;//玩家1的分数
int score2=0;//玩家2的分数
//玩到有人赢
while(分数1<获胜分数和分数2<获胜分数){
得分1+=轮流(扫描器、兰德、1、得分1);
System.out.println(“玩家1分数:+score1”);
System.out.println(“*******************************”);
如果(分数1<获胜分数){
得分2+=轮流(扫描器、兰德、2、得分2);
System.out.println(“玩家2分数:+score2”);
System.out.println(“*******************************”);
}
}
如果(分数1>=获胜分数){
返回“玩家1”;
}
否则{
返回“玩家2”;
}
}
公共静态整数回程(扫描器扫描、随机兰德、整数播放器、整数分数){
int random=rand.nextInt(模具)+1;
System.out.println(“玩家”+玩家+”掷骰:“+随机);
int firstRoll=随机;
int roundTotal=0;
字符串getAnswer=scanner.nextLine();
如果(随机>1){
System.out.println(“玩家”+Player+”本轮总计:“+firstRoll”);
roundTotal+=第一卷;
系统输出打印(“再次滚动?(y或n):”+getAnswer);
System.out.println();
如果(“y”。相等信号情况(getAnswer)){
System.out.println(“玩家”+玩家+”掷骰:“+随机);
}else if(“n”。相等信号情况(getAnswer)){
System.out.println(“玩家”+玩家+”掷骰:“+随机);
} 
}否则{
System.out.println(“玩家”+玩家+”:回合结束时没有新点数。”);
System.out.println(“玩家”+玩家+”分数:“+分数”);
}     
返回优胜分;
} 
}

您已经将
扫描器
语句
字符串getAnswer=scanner.nextLine()

在要求用户再次滚动
takeTurn()方法中的问题之前

因此,在向用户提问后,如下图所示,将此声明放在下面

 System.out.println("Roll again? (y or n) : ");

  String getAnswer = scanner.nextLine();
同时还要确保在执行
System.out.println(“再次滚动”(y或n):”)时使用
println
而不仅仅是
print

println
使用户输入从新行读取


print
用于读取现有行本身的输入以及向用户提出的问题。

在if/else之前,他已经将getAnswer声明为字符串。不再需要将getAnswer重新声明为字符串。如果我们重新声明,那么只会出现错误,但是为什么他需要在if/else之前声明呢?我建议他直接在if(random>1)块内声明和赋值。当我们需要在if块外声明变量时,只在if之前声明它是好的,否则最好的方法是只在if块内声明。。