Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置第二个ArrayList的值时,将覆盖ArrayList的ArrayList_Java_Arraylist - Fatal编程技术网

Java 设置第二个ArrayList的值时,将覆盖ArrayList的ArrayList

Java 设置第二个ArrayList的值时,将覆盖ArrayList的ArrayList,java,arraylist,Java,Arraylist,我正在尝试制作一个战舰游戏,这是玩家设置棋盘的部分。当设置棋盘的第二个玩家做出自己的棋盘时,第一个玩家的棋盘与第二个玩家的棋盘相同(在玩游戏时,猜测该棋盘的位置是未命中的,但这是另一个问题,希望在完成后能够解决)。例如,如果我将第一个玩家的战舰设置为A1 A2 A3、B1 B2 B3和C1 C2 C3,然后将第二个玩家的战舰设置为D1 D2 D3、E1 E2 E3和F1 F2 F3,当两个战舰列表都打印出来时,我会得到两个战舰的D1 D2 D3、E1 E2 E3和F1 F2 F3。我在这里发现了

我正在尝试制作一个战舰游戏,这是玩家设置棋盘的部分。当设置棋盘的第二个玩家做出自己的棋盘时,第一个玩家的棋盘与第二个玩家的棋盘相同(在玩游戏时,猜测该棋盘的位置是未命中的,但这是另一个问题,希望在完成后能够解决)。例如,如果我将第一个玩家的战舰设置为A1 A2 A3、B1 B2 B3和C1 C2 C3,然后将第二个玩家的战舰设置为D1 D2 D3、E1 E2 E3和F1 F2 F3,当两个战舰列表都打印出来时,我会得到两个战舰的D1 D2 D3、E1 E2 E3和F1 F2 F3。我在这里发现了其他问题,都有同样的问题,但他们总是有问题,因为他们没有每次都列出新的列表,而我是这样做的(至少我很确定我是这样做的),所以我找不到我的问题在哪里。这是整个主要的游戏类,GetShipLocations、SetShipLocations和PlayerMakeerBoard,这些函数给了我很多问题

import java.util.*;
import java.lang.*;
public class MainGame {
    InputReader read = new InputReader();
    Grid p1Board = new Grid();
    Grid p2Board = new Grid();
    Grid p1ShipsBoard = new Grid();
    Grid p2ShipsBoard = new Grid();
    ArrayList<Ship> p1Ships = new ArrayList<Ship>();
    ArrayList<Ship> p2Ships = new ArrayList<Ship>();
    String activePlayer = "P1";

    public void SetUp() {
        p1Board.PrepPrintGrid();
        p2Board.PrepPrintGrid();
        Ship ship1 = new Ship();
        Ship ship2 = new Ship();
        Ship ship3 = new Ship();
        p1Ships.add(ship1);
        p1Ships.add(ship2);
        p1Ships.add(ship3);
        p2Ships.add(ship1);
        p2Ships.add(ship2);
        p2Ships.add(ship3);
    }
    public void GameIntro() {
        System.out.println("Welcome to battleship!");
        String rulesOption = read.getUserInput("Do you need to see the rules?");
        if(rulesOption.equals("Yes") || rulesOption.equals("yes"))
        {
            System.out.println("Put rules here");
        }
        System.out.println("Randomly determining which player goes first");
        int random = (int) (Math.random() * 2);
        if(random == 1)
        {
            activePlayer = "P2";
        }
        System.out.println(activePlayer + " starts!");
    }
    public ArrayList<ArrayList<String>> GetShipLocations(Grid board) {
        ArrayList<ArrayList<String>> ships = new ArrayList<ArrayList<String>>();
        ArrayList<String> ship1 = new ArrayList<String>();
        ArrayList<String> ship2 = new ArrayList<String>();
        ArrayList<String> ship3 = new ArrayList<String>();
        ships.add(ship1);
        ships.add(ship2);
        ships.add(ship3);
        String[] numbers = {"first", "second", "third"};
        board.PrepPrintGrid();
        board.PrintGrid();
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                String coordinate = read.getUserInput("Enter the " + numbers[j] + " coordinate of your " + numbers[i] + " ship (3 long):");
                ships.get(i).add(coordinate);
                board.SetGridDisplay(coordinate, "hit");
                board.PrintGrid();
            }
        }
        return ships;
    }
    public void SetShipLocations(ArrayList<Ship> ship, Grid activeBoard) {
        ArrayList<ArrayList<String>> shipLocations = GetShipLocations(activeBoard);
        for(int i = 0; i < 3; i++) {
            ship.get(i).SetCells(shipLocations.get(i));
        }
    }
    public void PlayersMakeTheirBoards() {
        if(activePlayer.equals("P1")) 
        {
            System.out.println("Hand the computer to player one.");
            System.out.println("Player one, time to set your board.");
            SetShipLocations(p1Ships, p1ShipsBoard);//the effects of this seem to maybe be overriden when the second board is set
            for(int i = 0; i < /*100*/3; i++) 
            {
                for(int j = 0; j < 3; j++)
                {
                    System.out.println(p1Ships.get(i).cells.get(j));
                }

            }
            System.out.println("Hand the computer to player two.");
            System.out.println("Player two, time to set your board.");
            SetShipLocations(p2Ships, p2ShipsBoard);
            for(int i = 0; i < /*100*/3; i++) 
            {
                for(int j = 0; j < 3; j++)
                {
                    System.out.println(p2Ships.get(i).cells.get(j));
                }

            }
            for(int i = 0; i < /*100*/3; i++) 
            {
                for(int j = 0; j < 3; j++)
                {
                    System.out.println(p1Ships.get(i).cells.get(j));
                }

            }
        }
        else
        {
            System.out.println("Hand the computer to player two.");
            System.out.println("Player two, time to set your board.");
            SetShipLocations(p2Ships, p2ShipsBoard);
            /*for(int i = 0; i < 100; i++) 
            {
                System.out.println("");
            }*/
            for(int i = 0; i < /*100*/3; i++) 
            {
                for(int j = 0; j < 3; j++)
                {
                    System.out.println(p2Ships.get(i).cells.get(j));
                }

            }
            System.out.println("Hand the computer to player one.");
            System.out.println("Player one, time to set your board.");
            SetShipLocations(p1Ships, p1ShipsBoard);
            for(int i = 0; i < /*100*/3; i++) 
            {
                for(int j = 0; j < 3; j++)
                {
                    System.out.println(p1Ships.get(i).cells.get(j));
                }

            }
            for(int i = 0; i < /*100*/3; i++) 
            {
                for(int j = 0; j < 3; j++)
                {
                    System.out.println(p2Ships.get(i).cells.get(j));
                }

            }
        }
    }
    public void PlayTheGame() {
        String guess = new String();
        String result = new String();
        for(int i = 0; i < 100; i++) 
            {
                System.out.println("");
            }
        while(!p1Ships.isEmpty() && !p2Ships.isEmpty())
        {
            if(activePlayer.equals("P1"))
            {
            //print the grid
            p1Board.PrintGrid();
            //ask user for their guess
            guess = read.getUserInput("Player one, enter your guess:");
            for(Ship boat:p2Ships)
            {
                result = boat.CheckYourself(guess);
                if(result.equals("hit"))
                {
                    System.out.println(result + "!");
                    break;
                }
                if(result.equals("kill"))
                {
                    System.out.println(result + "!");
                    p2Ships.remove(boat);
                    break;
                }
            }
            if(result.equals("miss"))
            {
                System.out.println(result);
            }
            p1Board.SetGridDisplay(guess, result);
            activePlayer = "P2";
            }
            else
            {
            p2Board.PrintGrid();
            //ask user for their guess
            guess = read.getUserInput("Player two, enter your guess:");
            for(Ship boat:p1Ships)
            {
                result = boat.CheckYourself(guess);
                if(result.equals("hit"))
                {
                    System.out.println(result + "!");
                    break;
                }
                if(result.equals("kill"))
                {
                    System.out.println(result + "!");
                    p1Ships.remove(boat);
                    break;
                }
            }
            if(result.equals("miss"))
            {
                System.out.println(result);
            }
            p2Board.SetGridDisplay(guess, result);
            activePlayer = "P1";
            }
        }
    }
    public void EndTheGame() {
        String winner = new String();
        if(p1Ships.isEmpty()) 
        {
            winner = "Player two";
            p2Board.PrintGrid();
        }
        else
        {
            winner = "Player one";
            p1Board.PrintGrid();
        }
        System.out.println("The game is over!");
        System.out.println(winner + " wins! Congratulations!");
    }
    public static void main(String[] args) {
        MainGame game = new MainGame();
        game.SetUp();
        game.GameIntro();
        game.PlayersMakeTheirBoards();
        game.PlayTheGame();
        game.EndTheGame();
    }
}
import java.util.*;
导入java.lang.*;
公共类主游戏{
InputReader read=新的InputReader();
网格p1Board=新网格();
网格板=新网格();
网格p1ShipsBoard=新网格();
网格p2ShipsBoard=新网格();
ArrayList=新的ArrayList();
ArrayList=新的ArrayList();
字符串activePlayer=“P1”;
公共作废设置(){
p1Board.PrepPrintGrid();
p2Board.PrepPrintGrid();
Ship ship1=新船();
Ship ship2=新船();
Ship ship3=新船();
p1.添加(第1次装运);
p1装运。添加(装运2);
p1装运。添加(装运3);
p2.添加(第1条);
p2.添加(第2条);
p2.添加(第3次装运);
}
公开游戏简介(){
System.out.println(“欢迎来到战舰!”);
String rulesOption=read.getUserInput(“您需要查看规则吗?”);
if(rulesOption.equals(“Yes”)| | rulesOption.equals(“Yes”))
{
System.out.println(“在此处放置规则”);
}
System.out.println(“随机决定哪位玩家先走”);
int random=(int)(Math.random()*2);
如果(随机==1)
{
activePlayer=“P2”;
}
System.out.println(activePlayer+“启动!”);
}
公共阵列列表GetShipLocations(网格板){
ArrayList ships=新的ArrayList();
ArrayList ship1=新的ArrayList();
ArrayList ship2=新的ArrayList();
ArrayList ship3=新的ArrayList();
船舶。添加(船舶1);
船舶。添加(船舶2);
船舶。添加(船舶3);
字符串[]数字={“第一”、“第二”、“第三”};
board.PrepPrintGrid();
PrintGrid();
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{
字符串坐标=read.getUserInput(“输入“+numbers[i]+”船(3长):”的“+numbers[j]+”坐标);
ships.get(i).add(坐标);
board.SetGridDisplay(坐标,“命中”);
PrintGrid();
}
}
返回船舶;
}
公共无效设置装运位置(ArrayList装运、Grid activeBoard){
ArrayList shipLocations=GetShipLocations(activeBoard);
对于(int i=0;i<3;i++){
ship.get(i).SetCells(shipplocations.get(i));
}
}
公共无效玩家制作他们的棋盘(){
if(activePlayer.equals(“P1”))
{
System.out.println(“将计算机交给播放器1”);
System.out.println(“玩家一号,该设置你的棋盘了。”);
SetShipLocations(p1Ships,p1ShipsBoard);//当设置第二个板时,此操作的效果似乎会被覆盖
对于(int i=0;iimport java.util.*;
public class Ship {
    ArrayList<String> cells = new ArrayList<String>();
    //String name = new String();
    public void SetCells(ArrayList<String> locations) {
        cells = locations;
    }
    /*public void SetName(String word) {
        name = word;
    }*/
    public String CheckYourself(String guess) {
            if(cells.contains(guess)) 
            {
                cells.remove(guess);
                if(cells.isEmpty()) 
                {
                    return "kill";
                }
                else
                {
                    return "hit";
                }
            }
            return "miss";
    }
}
public void SetUp() {
        p1Board.PrepPrintGrid();
        p2Board.PrepPrintGrid();
        Ship ship1 = new Ship();
        Ship ship2 = new Ship();
        Ship ship3 = new Ship();
        p1Ships.add(ship1);
        p1Ships.add(ship2);
        p1Ships.add(ship3);
        p2Ships.add(ship1);
        p2Ships.add(ship2);
        p2Ships.add(ship3);
    }