2015-03-02 2 views
0

Для получения университетского задания мне нужно создать систему java для стыковки судов в порту. Порт имеет 3 док-станции, каждая док-станция содержит 10 мест для стыковки кораблей. Однако пространства разных размеров, для размещения кораблей различного размера. Малые суда могут поместиться в малых средних и больших пространствах, а корабли среднего размера могут вписываться в средние и большие пространства и т. Д.Хранение ввода пользователя в массив

Мне нужно взять пользовательский ввод и сохранить его в 2-мерном массиве. Пользовательский запрос запрашивает у пользователя имя корабля и размер, тогда мне нужно сравнить его с «пространствами доков» в массиве, но в настоящее время я понятия не имею, как это сделать. В некоторых для псевдо кода было бы как:

if (userInput == array[arrayValue]) { 
//Store ship into array until the user selects to undock the ship 
} 

Как получить систему, чтобы сравнить значение массива с пользовательским вводом? Если пользователь выбирает небольшое судно, но все небольшие места для корабля берутся, как я могу заставить систему поместить его в место среднего размера? Массивы сложны!

Любая помощь будет блестящим,

Заранее спасибо!

+0

Я предполагаю, что вы можете использовать массив объектов. Я имею в виду, вы должны реализовать java-класс «Корабль» с двумя атрибутами: «Имя и размер». Возможно, эта ссылка вам поможет. http://www.oopweb.com/Java/Documents/ThinkCSJav/Volume/chap11.htm –

ответ

0

Сначала решите, как представить размеры причала. Для простоты я предлагаю использовать тип данных int. Небольшие причалы могут быть размером 1, средний 2 и большой 3.

String[] sizes = { "X", "small", "medium", "large" }; 

Когда вы спросите пользователя для размера лодки, если вы представите выбор «Введите 1 для малых, 2 для средних, 3 для больших», вы можете прочитать вход, используя

int boatSize = scanner.nextInt(); 

Ваш 2D-массив будет выглядеть примерно так.

int dockCount = 3; 
int berthCount = 10; 
int[][] docks = new int[dockCount][berthCount]; 

Вот как вы могли бы заполнить это причалами случайного размера.

for (int dock = 0; dock < dockCount; dock++) { 
    for (int berth = 0; berth < berthCount; berth++) { 
     int size = (int)Math.floor(Math.random() * 3 + 1); 
     docks[dock][berth] = size; 
    } 
} 

Или, если у вас есть предопределенные размеры причала, вы могли бы создать доки для чего-то вроде этого.

int[][] docks = { 
    { 1, 1, 1, 1, 2, 2, 2, 3, 3, 3 }, 
    { 1, 1, 1, 1, 1, 1, 2, 2, 3, 3 }, 
    { 1, 1, 1, 1, 1, 1, 1, 1, 2, 3 } 
}; 

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

boolean[][] full = new boolean[dockCount][berthCount]; 

Предполагая, что все вышесказанное, чтобы найти подходящий причал, было бы что-то вроде этого.

int dock, berth, size; 
for (size = boatSize; size <= 3; size++) { 
    boolean found = false; 
    for (dock = 0; dock < dockCount; dock++) { 
     for (berth = 0; berth < berthCount; berth++) { 
      if (!full[dock][berth]) { 
       if (size == docks[dock][berth]) { 
        found = full[dock][berth] = true; 
        break; 
       } 
      } 
     } 
     if (found) break; 
    } 
    if (found) break; 
} 

if (size > 3) { 
    System.out.println("No vacancy"); 
} else { 
    System.out.println("Take the " + sizes[size] 
     + " berth at dock " + (dock+1) + " space " + (space+1)); 
} 

Этого должно быть достаточно, чтобы вы начали.

+0

Большое спасибо, что вы сделали весь процесс намного яснее! – DCWD

+0

Спасибо, что вы сделали весь процесс намного яснее! – DCWD

+0

Как я могу изменить эту часть, чтобы я мог выбрать, какие части массива будут иметь определенный размер причала? – DCWD

Смежные вопросы