#java #for-loop #arraylist
#java #для цикла #arraylist
Вопрос:
Я очень новичок в программировании и работаю только в CLI. Возможно, я пытаюсь сделать что-то совершенно неправильное или делаю это неправильно. Я использую вложенный цикл for для создания 2d-массива сетки, присваивая символы моим (int i) и (int k) для создания границы. теперь другим методом я пытаюсь ввести значение в сетку, чтобы при печати сетки я мог изменить символ в этой позиции сетки. Я сделал это вручную, создав пояс, так как вы можете просто выбрать grid[1][2] = a . просто не могу понять, как это сделать, используя цикл for a . причина использования для цикла, поскольку я могу настроить размер сетки и отобразить границу, просто отрегулировав размер сетки.
public void printMap() {
map = new int[15][30];
System.out.println();
for (int i = 0; i < map.length; i ){
System.out.print("|");
for (int k = 0; k < map[i].length; k ){
if (i == 0) {
System.out.print("-");
}else if (i == map.length-1){
System.out.print("_");
}else if (k == -5){ // i want to inject -5 from another method into the grid so it prints out '^' where ever i inject -5
System.out.print("^");
}else {
System.out.print(" ");
}
}
System.out.println("|");
}
}
Комментарии:
1. Когда вы говорите, что хотите ввести -5 из другого метода, не могли бы вы показать пример того, как будет выглядеть конечная цель? Другими словами, просто чтобы уточнить, что вы хотели бы получить в качестве конечного результата.
2. я выбрал значение neg int, и это может быть любое значение neg int. мой мыслительный процесс и то, что я думаю, что 2d-сетка выглядит как int: `0,0,1,2,3,4,5 1,0,1,2,3,4,5 2,0,1,2,3,4,5 3,0,1,2,3,4,5 ` поэтому, используя ‘i’ и ‘k’, я распечатываю символ на основе значения. итак, я ищу способ, которым я могу ввести отрицательный номер, поэтому, когда карта будет распечатана, она изменится на символ, который я указываю для отрицательного int, в основном создавая интерфейс ввода игрового экрана, где я смогу перемещать символ по карте
Ответ №1:
Я думаю, вам следует разделить две операции в сетке: update
и print
. Лучше изменить определение сетки на char[][]
и print()
метод просто печатает это содержимое (его не должно волновать, что могут означать разные символы). В случае, если вы хотите int
вместо этого удерживать, просто используйте if...else
для печати правильный символ.
Кроме того, вы должны разделить определение сетки и ее содержимого. Посмотрите на мой простой пример. Существует несколько операций:
- добавить границу в сетку
- распечатайте сетку
- добавьте изображение улыбки в сетку
- добавьте перекрестное изображение в сетку
private static void addBorder(char[][] grid) {
for (int row = 0; row < grid.length; row ) {
for (int col = 0; col < grid[row].length; col ) {
if (col == 0 || col == grid[row].length - 1)
grid[row][col] = '|';
else if (row == 0 || row == grid.length - 1)
grid[row][col] = '-';
else
grid[row][col] = ' ';
}
}
}
private static void showSmile(char[][] grid) {
clearGrid(grid);
// only for 5x5 grid
grid[1][1] = '^';
grid[1][3] = '^';
grid[2][2] = '|';
grid[3][2] = '-';
}
private static void showCross(char[][] grid) {
clearGrid(grid);
// only for 5x5 grid
grid[1][2] = '|';
grid[2][2] = '|';
grid[3][2] = '|';
grid[2][1] = '-';
grid[2][3] = '-';
}
private static void clearGrid(char[][] grid) {
for (int row = 1; row < grid.length - 1; row )
for (int col = 1; col < grid[row].length - 1; col )
grid[row][col] = ' ';
}
private static void printGrid(char[][] grid) {
for (int row = 0; row < grid.length; row ) {
for (int col = 0; col < grid[row].length; col )
System.out.print(grid[row][col]);
System.out.println();
}
}
Вывод:
public static void main(String[] args) {
char[][] grid = new char[5][5];
addBorder(grid);
printGrid(grid);
System.out.println();
showSmile(grid);
printGrid(grid);
System.out.println();
showCross(grid);
printGrid(grid);
}
|---|
| |
| |
| |
|---|
|---|
|^ ^|
| | |
| - |
|---|
|---|
| | |
|-|-|
| | |
|---|
Комментарии:
1. Очень круто. мне это нравится, я вижу, что это очень полезно с некоторыми другими идеями, которые у меня есть для этого учебного проекта, который я делаю. Спасибо!
Ответ №2:
разговаривая с другом, он дал мне это решение. итак, теперь в int ‘i’ (2) и int ‘k’ (2) будет выведено ‘^’
private void displayGame(){
printMap(2,2);
}
public void printMap(int playerPositionX, int playerPositionY) {
System.out.println();
boolean foundRow = false;
boolean foundPosition = false;
for (int i = 0; i < map.length; i ){
System.out.print("|");
if (!foundRow amp;amp; playerPositionY == i){
foundRow = true;
}
for (int k = 0; k < map[i].length; k ){
if (foundRow amp;amp; (playerPositionX == k)){
foundPosition = true;
}
if (i == 0) {
System.out.print("-");
}else if (i == map.length-1){
System.out.print("_");
}else if (foundPosition){
System.out.print("^");
foundPosition = false;
foundRow = false;
}else {
System.out.print(" ");
}
}
System.out.println("|");
}
}