JAVA Stringbuilder

JAVA Stringbuilder
0

Witam serdecznie. Ostatnio piszę program na zajęcia z programowania Javy na uczelnie i mam problem ponieważ nie potrafię zapisać wyniku metody preetyPrint jako stringa. Potrzebuję to zrobić ponieważ return metody getGameState musi zwracać ciąg znaków przedstawiający stan gry. Domniemam że muszę użyć Stringbuildera jednak nie potrafię tego zrobić. Oto kilka metod dla zrozumienia.

private String[][] initBoard() {
String[][] startBoard = new String[9][9];

    startBoard[0] = new String[]{"8", bChar, bChar, bChar, bChar, bChar, bChar, bChar, bChar};
    for (int i = 0; i < 6; i++) {
        startBoard[i + 1] = new String[]{valueOf(7 - i), eChar, eChar, eChar, eChar, eChar, eChar, eChar, eChar};
    }
    startBoard[7] = new String[]{"1", wChar, wChar, wChar, wChar, wChar, wChar, wChar, wChar};
    startBoard[8] = new String[]{" ", "a", "b", "c", "d", "e", "f", "g", "h"};
    return startBoard;
}

private void preetyPrint(String[][] board) {
    for (int i = 0; i < 9; i++) {
        System.out.println(Stream.of(board[i]).collect(Collectors.joining("")));
    }
}

@Override
public String getGameState(int game, int move) {
String[][] gameBoard = initBoard();
for(int i =1;i <=move; i++) {
try {
ResultSet resultSet = statement.executeQuery(String.format(QUERY, game, i));
String startField = resultSet.getString(START);
int sFR = 8 - Integer.parseInt(startField.substring(1));
int sFC = Character.getNumericValue(startField.charAt(0)) - 9;

            String endField = resultSet.getString(END);
            int eFR = 8 - Integer.parseInt(endField.substring(1));
            int eFC = Character.getNumericValue(endField.charAt(0)) - 9;
            gameBoard[eFR][eFC] = gameBoard[sFR][sFC];
            gameBoard[sFR][sFC] = eChar;


        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    preetyPrint(gameBoard);
    return "";//fixme
}</code></code>
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Napisz post jeszcze raz, użyj poprawnie tagów do oznaczania kodu.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
NP
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 8 lat
  • Postów:2
0
Kopiuj
private String[][] initBoard() {
        String[][] startBoard = new String[9][9];

        startBoard[0] = new String[]{"8", bChar, bChar, bChar, bChar, bChar, bChar, bChar, bChar};
        for (int i = 0; i < 6; i++) {
            startBoard[i + 1] = new String[]{valueOf(7 - i), eChar, eChar, eChar, eChar, eChar, eChar, eChar, eChar};
        }
        startBoard[7] = new String[]{"1", wChar, wChar, wChar, wChar, wChar, wChar, wChar, wChar};
        startBoard[8] = new String[]{" ", "a", "b", "c", "d", "e", "f", "g", "h"};
        return startBoard;
    }

    private void preetyPrint(String[][] board) {
        for (int i = 0; i < 9; i++) {
            System.out.println(Stream.of(board[i]).collect(Collectors.joining("")));
        }
    }
@Override
    public String getGameState(int game, int move) {
        String[][] gameBoard = initBoard();
        for(int i =1;i <=move; i++) {
            try {
                ResultSet resultSet = statement.executeQuery(String.format(QUERY, game, i));
                String startField = resultSet.getString(START);
                int sFR = 8 - Integer.parseInt(startField.substring(1));
                int sFC = Character.getNumericValue(startField.charAt(0)) - 9;


                String endField = resultSet.getString(END);
                int eFR = 8 - Integer.parseInt(endField.substring(1));
                int eFC = Character.getNumericValue(endField.charAt(0)) - 9;
                gameBoard[eFR][eFC] = gameBoard[sFR][sFC];
                gameBoard[sFR][sFC] = eChar;


            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        preetyPrint(gameBoard);
        return "";//fixme

    }
PO
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:7
1

Możesz na przykład zrobić to tak (uwaga, metoda zwraca teraz String!)

Kopiuj
 private String preetyPrint(String[][] board) {
     StringBuilder builder = new StringBuilder();
     for(String[] innerArray : board) {
           for(String field : innerArray) {
               builder.append(field);
          }
     }
     return builder.toString();
 }
edytowany 1x, ostatnio: polmos
NP
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 8 lat
  • Postów:2
0

Fajnie pokazałeś jak użyć StringBildera ale chodzi mi bardziej o to aby metoda getGameState zwracała rozwiązanie metody preetyPrint (w postaci stringa).

PO
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:7
1

Zamień teraz po prostu końcówkę metody getGameState z

Kopiuj
 preetyPrint(gameBoard);
        return "";//fixme
Kopiuj
return preetyPrint(gameBoard);

:)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.