У меня проблемы с массивом, в котором мне нужна только его позиция, а не значение

#java #arrays #loops

#java #массивы #циклы

Вопрос:

(java) У меня возникли проблемы с моей программой Mancala, в которой мне нужно перенести позицию моей платы массива [0] в мой массив на плате цикла for[pilePlayer1 i] . Все, что мне нужно, если для платы [pilePlayer1 i] находиться в позиции платы [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] "ttttttt" 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
  

Комментарии:

1. Я не могу понять, с какой проблемой вы столкнулись. По крайней мере, я не могу понять ваше объяснение.

2. Извините, я просто хотел, чтобы цикл for переходил с Board[13], он же Board[pilePlayer2 i], на Board [0] без каких-либо изменений по значению.

3. for(int i=-1; i<4; i ) { Board[pilePlayer2]—; Board[pilePlayer2 i] ; if(Board[pilePlayer2 i]==Board[13]) {Board[13]—; // как мне сделать так, чтобы этоизменяется только позиция, а не значение }

Ответ №1:

Я не уверен, правильно ли я понимаю вашу проблему, но, похоже, вы хотите переназначить свой индекс в начало списка после достижения позиции 13. Это можно сделать, используя модульную арифметику при вычислении индекса массива, в который вы помещаете камни, т. Е. вызываете Board[(pilePlayer2 i)] . Вам даже не нужен if оператор, так как всякий раз, когда ваш вычисляемый индекс достигает 13, он будет сброшен на 0 с помощью (mod 13) части уравнения.