有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:连接StringInt数组&使用数组寻找可能性

我最近开始学习数组,我需要你们专家的帮助来解决这些问题。 我正在制作一个简单的地雷程序,用户在一个3x3的网格上从一个正方形跳到另一个正方形,直到只剩下一个正方形:有地雷的那一个

int choice;
    String action;
    String square[]={"1A","1B","1C","2D","3E","3F","1G","2H"}; 
    int counter = 0;
    Random random = new Random();
    int mine = random.nextInt(square.length);
    System.out.println(square[mine]);

因为正方形数组是一个字符串,所以我将其设置为从正方形生成随机地雷,它显示地雷只是为了测试。 但是当用户选择他们想要移动的方块时,有太多的可能性,例如,如果用户选择方块[1],那么就有选择方块[0]、方块[2]、。。。。,正方形[7],等等。因此,我需要通过使用数组来帮助简化这些代码(请记住,我是数组新手)

其次,我如何将字符串数组解析为Int数组,所以当玩家跳转到一个带有地雷的正方形上时,比如说正方形[0],它必须检查它是否“等于”地雷。 我的代码不起作用:

System.out.println("You will start in the middle of a 5 x 5 square.");
                System.out.println("[" + square[0] + "]\t[" + square[1] + "]\t[" + square[2] + "]");
                System.out.println("[" + square[7] + "]\t[" + character + "]\t[" + square[3] + "]");
                System.out.println("[" + square[6] + "]\t[" + square[5] + "]\t[" + square[4] + "]");
                System.out.print("Hey. Character " + character + ", make your move. ");
                action = (input.readLine());

                if (action.equalsIgnoreCase("1A")) 
                {

                    if (square[0].equals(mine)) 
                    {
                        System.out.println("Sorry. You stepped on a mine!");
                        break;
                    }
                    else 
                    {
                        System.out.println("[" + character + "]\t[" + square[1] + "]\t[" + square[2] + "]");
                        System.out.println("[" + square[7] + "]\t[" + "O" + "]\t[" + square[3] + "]");
                        System.out.println("[" + square[6] + "]\t[" + square[5] + "]\t[" + square[4] + "]");
                        counter++;
                        System.out.print("Make your next move: ");
                        action = input.readLine();
                        if (action.equalsIgnoreCase("1B")) 
                        {
                            if (square[1].equals(mine)) 
                            {
                                System.out.println("Sorry. You stepped on a mine!");
                                break;
                            }
                            else 
                            {
                                System.out.println("[" + "O" + "]\t[" + character + "]\t[" + square[2] + "]");
                                System.out.println("[" + square[7] + "]\t[" + "O" + "]\t[" + square[3] + "]");
                                System.out.println("[" + square[6] + "]\t[" + square[5] + "]\t[" + square[4] + "]");
                                counter++;
                                System.out.print("Make your next move: ");
                                action = input.readLine();
                            }
                        }

显然,“if(square[x].equals(mine))”不起作用,我不知道如何将字符串与Int数组进行比较,另一个问题是,如前所述,我的代码太长了。这仅仅是因为我正在计算选择每个正方形(8个)的可能性,以及用户将选择的正方形(8-1个),等等,这将是8个!阶乘(因为用户从中间的正方形开始,省略了八个正方形)。但我不希望40320种可能性都被编码,我相信有一种更简单的方法你们可以告诉我。谢谢

在旁注上一个5x5的正方形我该怎么做?使用字符串数组?还是整数数组?还是合并


共 (1) 个答案

  1. # 1 楼答案

    是的,有一个更简单的方法。你需要做的是能够回答“坐标X,Y有地雷吗?”这是用二维数组完成的,您只需要在每个点上使用是/否布尔值

    boolean[][] minePos = new boolean[5][5];
    

    您可以这样设置地雷(两个参数都是数字):

    minePos[1][1] = true;  //this is 1A
    minePos[1][2] = true;  //this is 1B
    

    等等。您一直在使用A、B、C作为Y坐标,并且您需要使用1作为A、2作为B等。设置为true的位置将是矿山的位置。其余的都是假的,表明那里没有我的。当用户想要移动到XPO、YPO位置时,您可以使用以下命令测试那里是否有地雷:

    if (minePos[xpos,ypos]) {
        //tell them they were blown up
    }
    else {
        //you are OK, not blown up
    }
    

    如果它们在XPO、YPO处是安全的,并且您希望将移动限制在它们周围的方块上,那么很容易列举出八种可能的跳跃:

    (xpos-1,ypos-1)
    (xpos, ypos-1)
    (xpos+1, ypos-1) 
    (xpos-1,ypos)
    (xpos+1, ypos) 
    (xpos-1,ypos+1)
    (xpos, ypos+1)
    (xpos+1, ypos+1) 
    

    等等。他们从八个方向中选择一个,根据这一点,你可以知道他们将在哪里着陆。然后测试着陆位置是否有地雷

    不清楚如何提示用户移动。它们是否表示“我想向上移动一个正方形”?你应该已经知道它们在哪里(在几个变量中),所以给它们一个方向,就很容易计算出它们落在哪里。还是要让他们输入坐标,比如“A1”?然后,您需要确保他们输入的坐标与您知道他们所在的坐标相邻。或者,您可以显示他们可能移动到的所有可能坐标,并让他们选择一个。不管你怎么做,你都要弄清楚目标数字坐标是什么,然后检查那里是否有地雷

    从固定位置的地雷开始,但稍后很容易编写一个小循环,将地雷放置在随机的X和Y位置。大概是这样的:

    Random rand = new Random();
    
    for (int count:=1; count<8; count++) {
        int randx = rand.nextInt(5);
        int randy = rand.nextInt(5);
        minePos[randx, randy] = true;
    }
    

    这将在随机x值(0到4)和随机y位置(0到4)放置8颗地雷。你可以改变板的大小,以及你想要放置的地雷的数量