2013-02-13 2 views
0

Не понимаю, как это решить. Мне нужно принять номер места в качестве параметра (место). А затем преобразуйте это число мест в индекс строки и столбца для двумерного массива.вычисление целого числа на местоположение массива java

Чтобы проверить себя, я предполагаю, что есть 10 строк (0-9) и 2 местаPerRow (0-1) и выбирают место из 1-20 из этого, чтобы проверить математику. НО может быть любое количество строк и столбцов. Это то, что я использую, чтобы проверить себя.

static void isAvailable(int seat, boolean seat[][]) { 

    int row = 0; 
    int column = 0; 

    if (seat > 0 && seat <= (getRows() * getSeatsPerRow())){ 
     row = (seat) % getRows(); 
     column = (seat - 1) % getSeatsPerRow; 
     seat[row][column] = false; 
    } 
} 

Предполагая, что места были организованы таким образом:

  seatsPerRow 
     0 1 2 3 4 5 6 

    0 (1) (2) (3) (4) (5) (6) (7) 

r 1 (8) (9) (10)(11)(12)(13)(14) 

o 2 (15)(16)(17)(18)(19)(20)(21) 

w 3 ... 

s 4 ... 

    . 

    . 

    . 

Say Я хотел найти место 11. Это было бы место [1] [3]. Я не понимаю, как преобразовать номер места в место на 2-мерном массиве.

ответ

1

Ну, предполагающие сиденья пронумерованы, начиная с 1, вы можете получить индекс столбца, просто используя:

int column = (seatNum - 1) % seat[0].length; 

Вы можете найти строка с простым выражением:

int row = (int) ((seatNum - 1)/seat[0].length); 

Затем вы получите фактический элемент doin г:

seats[row][column] 

Оба эти выражения должны работать для всех размеров из seat массива (за исключением 0 х 0).

В первой строке будет использоваться код из seatNum/seat[0].length, или в основном номер места, деленный на количество мест в ряду. Это приведет к изменению column в правильном диапазоне.

Далее, вторая строка разделит количество мест на длину строки, которая найдет строку. Затем мы передаем его в int с (int), который усекает его, отбрасывая любое десятичное число, которое могло быть результатом операции. В этом случае мы фактически выполняем чисто целочисленную математику, поэтому бросок не нужен.

+0

Что означает место [0]? Это двумерный массив. Я только понимаю основы Java. – user1368970

+0

@ user1368970 Он получит первую строку * массива. Затем мы можем использовать '.length' для получения длины строки, а не внешнего массива, которая представляет собой количество строк, например длину столбца. –

+0

Я все еще не понимаю права, когда я делаю математику, он не выходит с правильными номерами строк или столбцов. Проверьте мое обновление, пожалуйста. – user1368970

1

Предполагая рассадки, как так:

1 2 
3 4 
5 6 
7 8 
9 10 
11 12 
13 14 
15 16 
17 18 
19 20 



int col = (seat % 2 == 0)? 1:0; 
int row = (int)Math.ceil(seat/2.0f); 
+0

Я не знаю, что делает Math.ceil. Я просто учусь. – user1368970

+0

Math.ceil() mrthod дает наименьшее целое число, большее или равное аргументу. для получения дополнительной информации http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#ceil%28double%29 –

1

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

Во-первых, давайте рассмотрим в наших предположениях и превратить их в нечто более абстрактное:

  • Есть N мест, где N = 20. Мы принимаем N быть наши ряды.
  • Есть K строк, где K = 2. Мы берем K как наши столбцы.
  • Учитывая это, в каждой строке есть N/K места.

Теперь мы можем использовать математику по модулю для работы с остальной частью проблемы. Давайте объявим наш массив мест.

boolean[][] seats = new boolean[N][K]; //presumed 

Если мы хотим претендовать место 13, то мы должны понять две вещи:

  • Что ряд это место в?
  • column является местом в?

Учитывая вышеизложенное, математике для строки выглядит следующим образом:

int row = (seatWanted % N)-1; // (13 % 10)-1 = 2. 

Теперь столбец так же легко найти - мы используем целочисленное деление вместо модуля, хотя.

int column = seatWanted/K; // 13/10 = 1. 

Остальное упражнение для читателя, но мы хотели бы отметить seats[2][1], как принято.

+0

Итак, записывая этот класс, n и k будут параметрами строк и местPerRow (который является столбцом)? – user1368970

+0

В конечном итоге я предполагаю, что вы можете вывести длину каждой строки и столбца из массива с помощью '.length'. N и K приведены для иллюстративных целей. – Makoto

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