#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) части уравнения.