【问题标题】:I'm having trouble with an array in which I only need its position not value我在使用数组时遇到问题,我只需要它的位置而不是值
【发布时间】:2020-10-31 19:34:26
【问题描述】:

(java) 我的 Mancala 程序出现问题,我需要将数组 Board[0] 的位置转移到 for 循环 Board[pilePlayer1+i] 中的数组。如果 Board[pilePlayer1+i] 处于 Board[0] 的位置而不改变任何东西,我只需要继续执行 for 循环即可。我不知道如何做到这一点,任何帮助将不胜感激。

代码


import TurtleGraphics.KeyboardReader;

public class Mancala 
{

    public static void main(String[] args) 
    {
        KeyboardReader reader = new KeyboardReader();
        int clicked, index = 0, pit = 0;
        boolean player1, player2;
        //arrays
        int[] Board = new int[] { 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0 };
        char[] CharArrayP1 = new char[6];
        CharArrayP1[0] = 'A';
        CharArrayP1[1] = 'B';
        CharArrayP1[2] = 'C';
        CharArrayP1[3] = 'D';
        CharArrayP1[4] = 'E';
        CharArrayP1[5] = 'F';
        char[] CharArrayP2 = new char[6];
        CharArrayP2[0] = 'a';
        CharArrayP2[1] = 'b';
        CharArrayP2[2] = 'c';
        CharArrayP2[3] = 'd';
        CharArrayP2[4] = 'e';
        CharArrayP2[5] = 'f';



//method transfers
        playgame(Board, CharArrayP1, CharArrayP2);
        BoardPrintout(Board, CharArrayP1, CharArrayP2);
    }
    public static void playgame(int Board[], char[] CharArrayP1, char[] CharArrayP2)
    {
        KeyboardReader reader = new KeyboardReader();
        int pilePlayer1 = 0, pilePlayer2 = 0, pC=0;
        char Char1, Char2;
        boolean p1, p2;

        do {
            pC++;
//player turn printout
            if((pC==1)||(pC==3)||(pC==5)||(pC==7)||(pC==9)||(pC==11)||(pC==13))
            {
                p1 = true; 
                System.out.println("Player 1's Turn");
            }
            else
                p1 = false;
            if((pC==2)||(pC==4)||(pC==6)||(pC==8)||(pC==10)||(pC==12)||(pC==14))
            {
                p2 = true;  
                System.out.println("Player 2's Turn");
            }
            else
                p2 = false; 
            if(p1= true)
            {

                System.out.println(" ");
                System.out.println("Player one chose a pile (A-F Capital)");
                Char1=reader.readChar();
                //converting char to int
                if(Char1=='A')
                    pilePlayer1=0;
                if(Char1=='B')
                    pilePlayer1=1;
                if(Char1=='C')
                    pilePlayer1=2;
                if(Char1=='D')
                    pilePlayer1=3;
                if(Char1=='E')
                    pilePlayer1=4;
                if(Char1=='F')
                    pilePlayer1=5;
                while(Character.isLetter(Char1) == false) 
                {
                    //error checker player 1
                    System.err.println("Error: value wrong please rechoose your pile");
                    System.out.println("Player 1 rechose a pile (A-F Capital)");
                    Char1=reader.readChar();
                    if(Char1=='A')
                        pilePlayer1=0;
                    if(Char1=='B')
                        pilePlayer1=1;
                    if(Char1=='C')
                        pilePlayer1=2;
                    if(Char1=='D')
                        pilePlayer1=3;
                    if(Char1=='E')
                        pilePlayer1=4;
                    if(Char1=='F')
                        pilePlayer1=5;

                };
                //pile adder player 1
                for(int i=0; i<4; i++)
                {
                    Board[pilePlayer1]--;
                    Board[pilePlayer1+i]++;
                    if(Board[pilePlayer1+i]==Board[13])
                    {
                        Board[13]--;
                        Board[pilePlayer1+i]=Board[0];

                    }
                }
                //board printer
                BoardPrintout(Board, CharArrayP1, CharArrayP2);
            }


            if(p2= true)
            {
                System.out.println("Player two chose a pile (a-f lowercase)");
                Char2=reader.readChar();
                //converting char to int
                if(Char2=='a')
                    pilePlayer2=7;
                if(Char2=='b')
                    pilePlayer2=8;
                if(Char2=='c')
                    pilePlayer2=9;
                if(Char2=='d')
                    pilePlayer2=10;
                if(Char2=='e')
                    pilePlayer2=11;
                if(Char2=='f')
                    pilePlayer2=12;
                while(Character.isLetter(Char2) == false)
                {
                    //error checker player 2 
                    System.err.println("Error: value wrong please rechoose your pile");
                    System.out.println("Player 2 rechose a pile (A-F Capital)");
                    Char2=reader.readChar();
                    if(Char2=='a')
                        pilePlayer2=7;
                    if(Char2=='b')
                        pilePlayer2=8;
                    if(Char2=='c')
                        pilePlayer2=9;
                    if(Char2=='d')
                        pilePlayer2=10;
                    if(Char2=='e')
                        pilePlayer2=11;
                    if(Char2=='f')
                        pilePlayer2=12;

                }while(Character.isLetter(Char2) == false);
                //pile adder player 2 (where the error is)
                for(int i=-1; i<4; i++)
                {
                    Board[pilePlayer2]--;
                    Board[pilePlayer2+i]++;
                    if(Board[pilePlayer2+i]==Board[13])
                    {
                        Board[13]--;
                        //how do i get it so it only changes position not value

                    }
                }
                BoardPrintout(Board, CharArrayP1, CharArrayP2);
            }
        }while(gameover(Board)!=false);

    }

    public static void BoardPrintout(int Board[], char[] CharArrayP1, char[] CharArrayP2) 
    {
        //BOARD
        System.out.print("\t"+CharArrayP2[5]+"\t"+CharArrayP2[4]+"\t"+CharArrayP2[3]+"\t"+CharArrayP2[2]+"\t"+CharArrayP2[1]+"\t"+CharArrayP2[0]);
        System.out.println("");
        System.out.print("\t"+Board[12]+"\t"+Board[11]+"\t"+Board[10]+"\t"+Board[9]+"\t"+Board[8]+"\t"+Board[7]);
        System.out.println("");
        System.out.println(Board[13]+"\t\t\t\t\t\t\t"+Board[6]);
        System.out.print("\t"+CharArrayP1[0]+"\t"+CharArrayP1[1]+"\t"+CharArrayP1[2]+"\t"+CharArrayP1[3]+"\t"+CharArrayP1[4]+"\t"+CharArrayP1[5]);
        System.out.println("");
        System.out.print("\t"+Board[0]+"\t"+Board[1]+"\t"+Board[2]+"\t"+Board[3]+"\t"+Board[4]+"\t"+Board[5]);
        System.out.println("");
    }
    // checks if the game is over
    public static boolean gameover(int[] Board){
        if (Board[0]==0||Board[1]==0||Board[2]==0||
                Board[3]==0||Board[4]==0||Board[5]==0){
            return true;
        }
        else if(Board[7]==0||Board[8]==0||Board[9]==0
                ||Board[10]==0||Board[11]==0||Board[12]==0){
            return true;
        }
        return false;
    }
} ```



**Prompt**
https://i.stack.imgur.com/gOws6.png

【问题讨论】:

  • 我不明白你遇到了什么问题。至少,我听不懂你的解释。
  • 对不起,我只是想让 for 循环从 Board[13] aka Board[pilePlayer2+i] 到 Board[0] 没有任何明智的改变价值。
  • for(int i=-1; i

标签: java arrays loops


【解决方案1】:

我不确定我是否正确理解了您的问题,但看起来您希望在到达位置 13 后将索引重新指向列表的开头。这可以通过在计算您正在将石头存入的数组,即调用Board[(pilePlayer2+i)%13]。您甚至不需要 if 语句,因为每当您计算的索引达到 13 时,它就会被等式的 %13 (mod 13) 部分重置为 0。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2021-03-01
    • 2020-01-10
    • 2021-11-22
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多