如何查看字符串的第一个字符是否是某个字符,如果是,则执行操作(无法正常工作) import java.util.Random; 导入java.util.Scanner; 公共级扫雷艇{ 公共静态void main(字符串[]args){ 扫描仪scnr=新扫描仪(System.in); 布尔值=真; System.out.println(“欢迎使用扫雷机!”); while(再次播放){ 最终整数最小值=3; 最终整数最大值=20; 矿区附近的最终字符号=“”; String errorWidth=“需要一个从“+MIN_SIZE+”到“+MAX_SIZE+”的数字\n您希望贴图的宽度是多少(“+MIN_SIZE+”-“+MAX_SIZE+”)”; String errorHeight=“需要一个从“+MIN_SIZE+”到“+MAX_SIZE+”的数字\n您希望贴图的高度是多少(“+MIN_SIZE+”-“+MAX_SIZE+”)”; System.out.println(“您想要多宽的地图(“+MIN_SIZE+”-“+MAX_SIZE+”)”); int userWidth=promptUser(scnr、errorWidth、最小大小、最大大小); System.out.println(“您希望地图的高度是多少(“+MIN_SIZE+”-“+MAX_SIZE+”)”); int userHeight=promptUser(scnr、errorHeight、最小大小、最大大小); String errorGetRow=“需要一个从“+1+”到“+userWidth+”的数字”; String errorGetCol=“需要一个从“+1+”到“+userHeight+”的数字”; int minRowCol=1; char[][]mineArray=new char[userHeight][userWidth]; 地图(地雷阵列); simplePrintMap(地雷阵列); System.out.println(“行:”); int row=promptUser(scnr、errorGetRow、minRowCol、userWidth); System.out.println(“列:”); int column=promptUser(scnr、errorGetCol、minRowCol、userHeight); 地雷阵[第1行][第1列]=附近没有地雷; simplePrintMap(地雷阵列); System.out.println(“您想再次播放吗(y/n)”; 字符串响应=scnr.next(); if(response.startsWith(“Y”)| response.startsWith(“Y”)){ 再次播放=正确; } 否则{ 再次播放=错误; } } System.out.println(“谢谢你玩扫雷游戏!”); } 公共静态int-promptUser(扫描仪输入、字符串提示、int-min、int-max){ int userTempVal=0; 做{ userTempVal=in.nextInt(); 如果(userTempValmax){ System.out.println(提示); } }而(userTempValmax); 返回userTempVal; } 公共静态映射(char[][]映射){ 最终未扫描字符='; for(int row=0;row

如何查看字符串的第一个字符是否是某个字符,如果是,则执行操作(无法正常工作) import java.util.Random; 导入java.util.Scanner; 公共级扫雷艇{ 公共静态void main(字符串[]args){ 扫描仪scnr=新扫描仪(System.in); 布尔值=真; System.out.println(“欢迎使用扫雷机!”); while(再次播放){ 最终整数最小值=3; 最终整数最大值=20; 矿区附近的最终字符号=“”; String errorWidth=“需要一个从“+MIN_SIZE+”到“+MAX_SIZE+”的数字\n您希望贴图的宽度是多少(“+MIN_SIZE+”-“+MAX_SIZE+”)”; String errorHeight=“需要一个从“+MIN_SIZE+”到“+MAX_SIZE+”的数字\n您希望贴图的高度是多少(“+MIN_SIZE+”-“+MAX_SIZE+”)”; System.out.println(“您想要多宽的地图(“+MIN_SIZE+”-“+MAX_SIZE+”)”); int userWidth=promptUser(scnr、errorWidth、最小大小、最大大小); System.out.println(“您希望地图的高度是多少(“+MIN_SIZE+”-“+MAX_SIZE+”)”); int userHeight=promptUser(scnr、errorHeight、最小大小、最大大小); String errorGetRow=“需要一个从“+1+”到“+userWidth+”的数字”; String errorGetCol=“需要一个从“+1+”到“+userHeight+”的数字”; int minRowCol=1; char[][]mineArray=new char[userHeight][userWidth]; 地图(地雷阵列); simplePrintMap(地雷阵列); System.out.println(“行:”); int row=promptUser(scnr、errorGetRow、minRowCol、userWidth); System.out.println(“列:”); int column=promptUser(scnr、errorGetCol、minRowCol、userHeight); 地雷阵[第1行][第1列]=附近没有地雷; simplePrintMap(地雷阵列); System.out.println(“您想再次播放吗(y/n)”; 字符串响应=scnr.next(); if(response.startsWith(“Y”)| response.startsWith(“Y”)){ 再次播放=正确; } 否则{ 再次播放=错误; } } System.out.println(“谢谢你玩扫雷游戏!”); } 公共静态int-promptUser(扫描仪输入、字符串提示、int-min、int-max){ int userTempVal=0; 做{ userTempVal=in.nextInt(); 如果(userTempValmax){ System.out.println(提示); } }而(userTempValmax); 返回userTempVal; } 公共静态映射(char[][]映射){ 最终未扫描字符='; for(int row=0;row,java,string,substring,charat,stringindexoutofbounds,Java,String,Substring,Charat,Stringindexoutofbounds,编辑: 因此,我将代码改为使用.equals而不是==,当我输入一个只有一个单词的字符串时,我的代码可以成功运行,所以“是”。如果我输入一个包含多个单词的字符串(“是的”,我仍然会出错。键入包含多个单词的字符串会产生错误。当我使用scnr.next()时,它总是编译else语句,即使该语句是“Yes I do”,其中第一个字母是Y。如果使用scnr.nextLine(),它编译if语句,重新启动循环,打印“映射的宽度…”,然后在我输入任何内容之前给出错误 我主要指的是底部的main方法,从“你想

编辑: 因此,我将代码改为使用.equals而不是==,当我输入一个只有一个单词的字符串时,我的代码可以成功运行,所以“是”。如果我输入一个包含多个单词的字符串(“是的”,我仍然会出错。键入包含多个单词的字符串会产生错误。当我使用scnr.next()时,它总是编译else语句,即使该语句是“Yes I do”,其中第一个字母是Y。如果使用scnr.nextLine(),它编译if语句,重新启动循环,打印“映射的宽度…”,然后在我输入任何内容之前给出错误

我主要指的是底部的main方法,从“你想再玩一次吗”到main方法的结尾。我的promptUser方法中也有一个问题,我希望该方法显示错误消息,并在用户输入int以外的任何内容时再次扫描int。

使用
response.equals()
而不是
=

=
比较对象的引用,而
equals()
将比较字符串的值。

使用
response.equals()
而不是
=


==
比较对象的引用,而
equals()
会比较字符串的值。

您正面临这个问题,因为您正在使用
=
运算符比较字符串。如果您使用语句
response.substring(0,1).equals(“Y”)
,这将解决问题,因为这是检查字符串相等性的实际方法。或者您可以使用下面列出的不太详细的方法

import java.util.Random;
import java.util.Scanner;

public class MineSweeper {

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    boolean playAgain = true;

    System.out.println("Welcome to Mine Sweeper!");

while (playAgain)   {
    final int MIN_SIZE = 3;
    final int MAX_SIZE = 20;
    final char NO_NEARBY_MINE = ' ';

    String errorWidth = "Expected a number from " + MIN_SIZE + " to " + MAX_SIZE + "\nWhat width of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):";
    String errorHeight = "Expected a number from " + MIN_SIZE + " to " + MAX_SIZE + "\nWhat height of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):";

    System.out.println("What width of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):");
    int userWidth = promptUser(scnr, errorWidth, MIN_SIZE, MAX_SIZE);
    System.out.println("What height of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):");
    int userHeight = promptUser(scnr, errorHeight, MIN_SIZE, MAX_SIZE);

    String errorGetRow = "Expected a number from " + 1 + " to " + userWidth + ".";
    String errorGetCol = "Expected a number from " + 1 + " to " + userHeight + ".";
    int minRowCol = 1;

    char[][] mineArray = new char[userHeight][userWidth];
    eraseMap(mineArray);
    simplePrintMap(mineArray);

    System.out.println("row: ");
    int row = promptUser(scnr, errorGetRow, minRowCol, userWidth);
    System.out.println("column: ");
    int column = promptUser(scnr, errorGetCol, minRowCol, userHeight);
    mineArray[row-1][column-1] = NO_NEARBY_MINE;
    simplePrintMap(mineArray);

    System.out.println("Would you like to play again (y/n)?");
    String response = scnr.next();
    if (response.startsWith("Y") || response.startsWith("y")) {
            playAgain = true;
    }
    else {
        playAgain = false;
    }

    }
System.out.println("Thank you for playing Mine Sweeper!");
}

public static int promptUser(Scanner in, String prompt, int min, int max) {
    int userTempVal = 0;

        do {
        userTempVal = in.nextInt();
            if (userTempVal < min || userTempVal > max) {
            System.out.println(prompt);
            }

       }while (userTempVal < min || userTempVal > max);

    return userTempVal; 
    }

public static void eraseMap(char[][] map) {
    final char UNSWEPT = '.';
    for (int row = 0; row < map.length; row++) {
        for (int col = 0; col < map[row].length; col++) {
            map[row][col] = UNSWEPT;
        }
    }
    return;
}    

public static void simplePrintMap(char[][] map) {
    for (int row = 0; row < map.length; row++) {
        for (int col = 0; col < map[row].length; col++) {
            System.out.print(map[row][col] + " ");
        }
        System.out.println("");
    }
    return; //FIXME
}

只需取字符串的第一个字符并检查是否与所需的任何其他字符相等。

您正面临此问题,因为您正在使用
=
运算符来比较字符串。如果您使用语句
response.substring(0,1).equals(“Y”)
,这将解决问题,因为这是检查字符串相等性的实际方法。或者您可以使用下面列出的不太详细的方法

import java.util.Random;
import java.util.Scanner;

public class MineSweeper {

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    boolean playAgain = true;

    System.out.println("Welcome to Mine Sweeper!");

while (playAgain)   {
    final int MIN_SIZE = 3;
    final int MAX_SIZE = 20;
    final char NO_NEARBY_MINE = ' ';

    String errorWidth = "Expected a number from " + MIN_SIZE + " to " + MAX_SIZE + "\nWhat width of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):";
    String errorHeight = "Expected a number from " + MIN_SIZE + " to " + MAX_SIZE + "\nWhat height of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):";

    System.out.println("What width of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):");
    int userWidth = promptUser(scnr, errorWidth, MIN_SIZE, MAX_SIZE);
    System.out.println("What height of map would you like (" + MIN_SIZE + "-" + MAX_SIZE + "):");
    int userHeight = promptUser(scnr, errorHeight, MIN_SIZE, MAX_SIZE);

    String errorGetRow = "Expected a number from " + 1 + " to " + userWidth + ".";
    String errorGetCol = "Expected a number from " + 1 + " to " + userHeight + ".";
    int minRowCol = 1;

    char[][] mineArray = new char[userHeight][userWidth];
    eraseMap(mineArray);
    simplePrintMap(mineArray);

    System.out.println("row: ");
    int row = promptUser(scnr, errorGetRow, minRowCol, userWidth);
    System.out.println("column: ");
    int column = promptUser(scnr, errorGetCol, minRowCol, userHeight);
    mineArray[row-1][column-1] = NO_NEARBY_MINE;
    simplePrintMap(mineArray);

    System.out.println("Would you like to play again (y/n)?");
    String response = scnr.next();
    if (response.startsWith("Y") || response.startsWith("y")) {
            playAgain = true;
    }
    else {
        playAgain = false;
    }

    }
System.out.println("Thank you for playing Mine Sweeper!");
}

public static int promptUser(Scanner in, String prompt, int min, int max) {
    int userTempVal = 0;

        do {
        userTempVal = in.nextInt();
            if (userTempVal < min || userTempVal > max) {
            System.out.println(prompt);
            }

       }while (userTempVal < min || userTempVal > max);

    return userTempVal; 
    }

public static void eraseMap(char[][] map) {
    final char UNSWEPT = '.';
    for (int row = 0; row < map.length; row++) {
        for (int col = 0; col < map[row].length; col++) {
            map[row][col] = UNSWEPT;
        }
    }
    return;
}    

public static void simplePrintMap(char[][] map) {
    for (int row = 0; row < map.length; row++) {
        for (int col = 0; col < map[row].length; col++) {
            System.out.print(map[row][col] + " ");
        }
        System.out.println("");
    }
    return; //FIXME
}

只需取字符串的第一个字符,并检查是否与所需的任何其他字符相等。

您的代码有两个问题

  • 使用
    =

    这是错误的,因为它比较的是对象引用而不是对象内容。您需要使用
    String.equals()
    进行比较。在您的情况下,您甚至可以使用
    String.startsWith()
    检查输入是否以某个内容开头

  • 对输入使用
    String.substring()

    由于用户只需按
    [ENTER]
    即可输入空字符串,因此不能使用
    字符串.substring(0,1)
    ,否则将得到
    字符串索引超出范围

  • 要解决上述两个问题,您可以按如下方式更改代码

    public class main{
        public static void main(String[] args){
            String response = "Yello";
            char c = response.charAt(0);
            if(c == 'Y'){
                System.out.println("Do something");
            }
            else if(c == 'y'){
                System.out.println("Do another thing");
            }
        }
    }
    
    为了确保下一次读取准备就绪,我建议在当前行上完成读取后添加
    Scanner.nextLine()

    e、 g


    您的代码有两个问题

  • 使用
    =

    userTempVal = in.nextInt();
    // add this line to consume the rest of the line
    in.nextLine();