Почему мой метод анализа документа JSON возвращает списки только с одним элементом? - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над Java-версией настольной игры RoboRally и в настоящее время работаю над классом, который анализирует JSON-документ как часть создания игровой доски.Он почти работает как задумано, но не совсем.

Документ JSON отформатирован как система координат, содержащая информацию о том, что находится на доске, и где она расположена.Метод generateJsonBoard () должен анализировать информацию из документа.Он возвращает массив ICell [] [], где каждый объект Cell в массиве содержит список элементов поверх ячейки.

Метод почти работает, но он сталкивается с проблемами, когда существует более одногоэлемент в массиве JSON.Кажется, он выбирает только последний элемент массива и добавляет его в список, игнорируя остальные.

Мой вопрос действительно сводится к тому, кто видит, почему списки List в моих объектах Cell содержат только один элементдаже если массив JSON содержит более одного (например, в расположении [0] [0].

Вот часть JSON-документа

{
	"0": {
		"0": ["NorthWall","FlagOne","FlagTwo","FlagThree"],
		"1": ["NorthWall"],
		"2": ["NorthWall"],
		"3": ["NorthWall"],
		"4": ["NorthWall"],
		"5": ["NorthWall"],
		"6": ["NorthWall"],
		"7": ["NorthWall"],
		"8": ["NorthWall"],
		"9": ["NorthWall"]
		},
	"1": {
		"0": ["WestWall"],
		"1": [],
		"2": [],
		"3": [],
		"4": [],
    ...
    ...

А вот код Java.

public class JSONBoardGenerator {

JSONParser parser = new JSONParser();

public ICell[][] generateJsonBoard(String filepath) {

    ICell[][] jsonBoardPieceList2 = null;

    try {
        Object boardFile = parser.parse(new FileReader(filepath));
        JSONObject jsonBoardFile = (JSONObject) boardFile;
        int jsonSize = jsonBoardFile.size();
        int jsonSide = jsonSize / jsonSize;
        jsonBoardPieceList2 = new ICell[10][10];
        System.out.println(jsonBoardFile);
        for (int x = 0; x <= 9; x++) {
            for (int y = 0; y <= 9; y++) {

                String intX = Integer.toString(x);
                String intY = Integer.toString(y);

                JSONObject xCord = (JSONObject) jsonBoardFile.get(intX);
                JSONArray yCord = (JSONArray) xCord.get(intY);
                Iterator<String> iterator = yCord.iterator();
                while (iterator.hasNext()) {
                    Cell tempCell = new Cell();
                    jsonBoardPieceList2[x][y] = tempCell;
                    String jsonIterator = iterator.next();
                    System.out.println(jsonIterator);
                    switch (jsonIterator) {
                        case "Hole":
                            System.out.println("Making Hole!");
                            break;

                        case "NorthWall":
                            System.out.println("Making northfacing wall!");
                            tempCell.addPiece(new Wall(Direction.NORTH));
                            break;

                        case "EastWall":
                            System.out.println("Making eastfacing wall!");
                            tempCell.addPiece(new Wall(Direction.EAST));
                            break;

                        case "SouthWall":
                            System.out.println("Making southfacing wall!");
                            tempCell.addPiece(new Wall(Direction.SOUTH));
                            break;

                        case "WestWall":
                            System.out.println("Making westfacing wall!");
                            tempCell.addPiece(new Wall(Direction.WEST));
                            break;

                        /**
                         case "ConveyorNorth":
                         System.out.println("Making northfacing conveyor!");
                         new Conveyor(Direction.NORTH, 1);
                         break;

                         case "ConveyorEast":
                         System.out.println("Making eastfacing conveyor!");
                         new Conveyor(Direction.EAST, 1);
                         break;

                         case "ConveyorSouth":
                         System.out.println("Making southfacing conveyor!");
                         new Conveyor(Direction.SOUTH, 1);
                         break;

                         case "ConveyorWest":
                         System.out.println("Making westfacing conveyor!");
                         new Conveyor(Direction.WEST, 1);
                         break;
                         */

                        case "FlagOne":
                            System.out.println("Making flag number 1");
                            tempCell.addPiece(new Flag(1));
                            break;

                        case "FlagTwo":
                            System.out.println("Making flag number 2");
                            tempCell.addPiece(new Flag(2));
                            break;

                        case "FlagThree":
                            System.out.println("Making flag number 3");
                            tempCell.addPiece(new Flag(3));
                            break;
                    }
                }
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return jsonBoardPieceList2;
}

}

1 Ответ

0 голосов
/ 08 марта 2019

Устроил это.Работал нормально, используя простой JSON.Единственная проблема заключалась в том, что я поместил Cell tempCell = new Cell ();слишком глубоко.Он должен был быть внутри цикла for, а не итератора while.Спасибо за предложения в любом случае, ребята:)

...