Если вы не можете сохранить координаты клиентов, вы можете изменить свой оператор if следующим образом.Если вы можете сохранить координаты, я бы определенно использовал ответ Лео Леонтьева.
/*I removed check for client to be between 1-5, can be re-added.
I would add the checks for the desired spot being empty and the client
being within 1-5 to the top of the method.
For loop iterates over the possible spaces where the client would be in range
check if client is in a space*/
if (storeArray[rowNum][colNum]==client) {
//storeArray[rowNum][colNum]=0;
storeArray[x][y] = client;
//unchanged
int count = totals.containsKey(client) ? totals.get(client) : 1;
totals.put(client, count + 1);
}
Вы также можете упростить ваши startX, Y, endX, Y, используя Math.min
и Math.max
, чтобы избежать любых ошибок indexOutOfBounds, которыеможет быть вызвано попыткой переместить клиента за пределы доски.
int startPosX = Math.max(x-1,0);
int startPosY = Math.max(y-1,0;
int endPosX = Math.min(x+1,storeArray.length-1);
int endPosY = Math.min(y+1,storeArray[0].length-1);
Если вы ничего не делаете после вызова totals.put(client,count+1);
, вы можете добавить оператор return;
для выхода из метода.Если вам все еще нужно проделать дополнительную работу, вы можете добавить метку к внешнему циклу for, а затем выйти из нее.В любом случае ваш счет не будет учитываться более одного раза за ход.
outerloop:
for(int rowNum=startPosX;rowNum<=endPosX;rowNum++){
for(int colNum=startPosY;colNum<=endPosY;colNum++){
if(...){
//code
totals.put(client, count+1);
break outerloop;
}
}
}
Вот метод, который есть в моем редакторе
public static move(int client, int x, int y){
if(storeArray[x][y]==client)
return;
int startPosX = Math.max(x-1,0), startPosY=Math.max(y-1,0);
int endPosX = Math.min(x+1,storeArray.length-1), endPosY = Math.min(y+1,storeArray[0].length-1);
outerloop:
for(int rowNum=startPosX;rowNum<=endPosX;rowNum++)
{
for(int colNum=startPosY;colNum<=endPosY;colNum++){
if(storeArray[rowNum][colNum]==client)
{
storeArray[x][y]=client;
System.out.println("Successful move");
int count = totals.getOrDefault(client, 1);
totals.put(client, count + 1);
break outerloop;
//could set colNum=endPosY+1 and rowNum=endPosX+1 if you don't want to use label/break
}
}
}
}