один массив d в матрицу переменного размера Java

1

Я работаю над этим заданием и нахожусь в тупике, и прежде чем я смогу двигаться дальше, мне нужно его решить.

Я создаю программу, которая позволяет пользователю объявлять размер доски, принимать размер этой доски и заполнять квадрат, состоящий из "O" в таком размере. в конечном итоге это будет снова изменено, чтобы позволить пользователю вводить координаты x и y, и x появится в этой точке. Это только первая часть задания, которую я просто застрял здесь, прежде чем я смогу перейти к управлению конечным результатом. У меня есть вход вниз, и я считаю, что у меня есть массив, умноженный на вход сам по себе, гарантируя квадрат,

где я застрял, это распечатать О в квадрате.

например, пользовательские входы. 5 для системы размера платы должны печатать

 OOOOO
 OOOOO
 OOOOO
 OOOOO
 OOOOO  

Я пробовал проверять свой учебник и Google и т.д., И не нашел способ сделать это, что работает.

вот мой код

import java.util.Scanner;
import java.util.*;
import java.io.*;

public class Board {


@SuppressWarnings("empty-statement")
public static void main(String[] args) throws IOException 
{

    // declares brdsz for board size total, n for input, xco and yco for later date
    int brdsz = 0;
    int n = 0;
    int xco = 0;
    int yco = 0;
    int x = 0;

    System.out.println("The BOARD =version 1.00= (enter -1 to quit)");
    System.out.println("===========================================");
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Please enter the side length of the board:");
    n = Integer.parseInt(br.readLine());
    brdsz = n * n;
    int[] coodArray = new int[brdsz];
    Arrays.fill(coodArray, 'O');


    System.out.println("Creating " + n + " X " + n + " board..."); 
    System.out.print("Please enter the x-coordinate: ");
    xco = Integer.parseInt(br.readLine());
    System.out.print("Please enter the y-coordinate: ");
    yco = Integer.parseInt(br.readLine());

  }
}

присваивание указывает, что это должно реплицировать 2d-плату с использованием 1d-массива

на данный момент я пытаюсь просто распечатать основной вывод, и я буду добавлять мои операторы if для дополнительных условий в более позднее время.

здесь представлен образец

BOARD = версия 1.00 = (введите -1 для выхода)
========================================
Введите боковую длину доски: 5 [enter]
Создание платы 5 x 5...
Готово.
Введите координату x: 3 [enter]
Введите y-координату: 2 [enter]
Место маркировки (3, 2)...
OOOOO
OOXOO
OOOOO
OOOOO
OOOOO
========================================
Введите x-координату: 4 [enter]
Введите y-координату: 1 [enter]
Место маркировки (4, 1)...
OOOXO
OOXOO
OOOOO
OOOOO
OOOOO
========================================
Введите координату x: 3 [enter]
Введите y-координату: 2 [enter]
Место (3, 2) уже отмечено...
OOOXO
OOXOO
OOOOO
OOOOO
OOOOO
========================================

по сути, я пытаюсь сделать, если вы введете 5 под боковую длину, он напишет массив длиной 25 (5 * 5), заполненный буквой O

пример значений массива 0-4 в строке 1 5-9 в строке 2 и т.д.

Теги:
arrays

2 ответа

1
Лучший ответ

Вам нужен 2D-массив

Например, предположим, что x = new int[3][4], x[0], x[1] и x[2] являются одномерными массивами и каждый содержит четыре элемента, как показано на рисунке x.length 3 и x[0].length, x[1].length и x[2].length - 4

Изображение 174551

Как перемещаться и настраивать 2D-массив, вы можете следовать следующему образцу в качестве синей печати:

Изображение 174551

  • 0
    извините, должен был указать еще больше, часть назначения - нам не разрешено использовать 2d массивы
  • 0
    @ dcit17 почему это звучит невозможно? Можете ли вы показать нам образец, как?
Показать ещё 6 комментариев
1

2D-массив не является полностью необходимым (я не использовал их много), но они могут быть полезными по сравнению с сохранением массива 1D.

Для использования массива 1D он будет работать следующим образом (например, пользователь вводит 5 для размера платы). Вам нужно будет не отставать от размера (или ширины и высоты)

int[] myArray = new int[size * size]; // or if specified, it can be new int[width * height]

Затем, чтобы найти способ добраться до точки, выполните следующее:

int x = 3;
int y = 4;
int point = myArray[x + y * width];

То, что myArray[x + y * width] будет делать, это указать вам точку в массиве с предоставленными x и y, а верхний левый угол - (0, 0):

 [ O O O O O O O O O O O O O O O O O O O O O O O X O ]

 O O O O O
 O O O O O
 O O O O O 
 O O O O O
 O O O X O

Тогда, если x = 2 & y = 0 мы получим:

 [ O O X O O O O O O O O O O O O O O O O O O O O O O ]

 O O X O O
 O O O O O
 O O O O O 
 O O O O O
 O O O O O

Это работает, потому что массив перемещается в соответствии с шириной. Итак, если x равно 5, а y равно 0, это будет выглядеть так:

 [ O O O O O X O O O O O O O O O O O O O O O O O O O ]

 O O O O O
 X O O O O
 O O O O O 
 O O O O O
 O O O O O

Ещё вопросы

Сообщество Overcoder
Наверх
Меню