2015-06-24 2 views
-2

У меня есть два массива:массива: Как я могу организовать два номера массив

int array1 [] = {1,2,3,4,5,6,7}; [Этот массив может вырасти до огромных чисел]

int array2 [] = {1,2,3}; [Макс может иметь 30 элементов]

array1 должен быть родительским циклом и иметь больше элементов, чем array2. Например я должен расположить, как показано ниже:

Ожидаемый результат:
1-1
2-2
3-3
4-1
5-2
6-3
7- 1

Как я могу продолжить?

+0

Я знаю, но как? –

+0

@Trobbins Это немного сложнее, чем «вложенные петли», но это также не очень подходит, как вопрос SO SO. – Daniel

ответ

1

Итак, у вас есть два набора, вы хотите прокручивать каждый элемент большего набора (array1) и для каждого элемента набора печатать элемент и следующий элемент set2 (array2).

Я использовал enhanced for loop, он обходит каждый элемент, а затем modulus ведьма эффективно ограничивает i меньше длины набора2. (Остаток должен быть меньше, чем 3, если деление на 3)

Это позволяет добавлять один к i с помощью i++ и быть уверенным, что он всегда будет цикл обратно к первому элементу, как если бы значение было на spinner.

int i = 0; 
    for(int value : array1) { 
    System.out.print(value + "-" + array2[i++ % array2.length]); 
    } 
+0

Отлично! спасибо ...... –

+1

Это неэлегантно (и, следовательно, подвержено ошибкам), потому что для этого требуется как внутренний индекс расширенного цикла 'for', так и ваш ручной индекс' i'. –

+0

Да, я собирался сделать что-то ближе к твоему, но я не мог вспомнить, как обработал модуль Java. –

5

В этом случае вам не нужна вложенная петля; все, что вам нужно, - это правильное использование оператора модуля.

for (int i = 0; i < array1.length; i++) { 
    System.out.println(array1[i] + "-" + array2[i % array2.length]); 
} 

Причина этого в том, что оператор модуля очень хорошо отображает вашу проблему. Операция, которую вы пытаетесь выполнить, требует многократного повторения в списке (array2) и переноса на начало. Оператор модуля, по сути, является «обертывающим» оператором; мышление постепенно, оно позволяет вернуться к 0 каждый раз, когда вы достигнете определенного номера (в данном случае размер array2).

+3

Вы правильно ответили на вопрос! Вы решили домашнее задание Сантану. Возможно, вам следует добавить объяснение, почему это работает. Тогда я выберу вместо нижнего. – Daniel

+0

Извинения. Я объясню ответ. –

+0

Хм, поэтому я отредактировал свой ответ, чтобы ближе соответствовать обновленному вопросу, и он становится downvoted? StackOverflow, вы, безусловно, любопытный зверь. –