Для циклов и массивов в Java - PullRequest
       14

Для циклов и массивов в Java

0 голосов
/ 27 января 2020

Это довольно странный вопрос. Надеюсь, это не звучит слишком глупо, но я всегда хочу знать, почему. Я думаю, я понимаю, как вы обращаетесь к массиву с помощью для l oop.

. Вы начинаете с i = 0, потому что 0 - это первая часть массива, а условие, в то время как i> массив - не может превышать массив и i ++ для доступа к следующей части массива.

Но есть ли конкретная c причина, по которой вам нужно использовать для l oop, и есть ли другой способ чтения значений из массив?

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

Ответы [ 5 ]

1 голос
/ 27 января 2020

Лучший вопрос может быть: Why wouldn't you want to use a FOR loop to iterate through an array? Существует много способов перебора массива или коллекции, и нет закона, согласно которому вы должны использовать FOR l oop. В большинстве случаев это просто лучший способ использовать скорость, простоту использования и удобочитаемость. И все же, в других случаях это не:

Массив:

int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Отображение массива с типичными для л oop:

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

Массив дисплея с улучшенной для l oop:

for(Integer num : array) {
    System.out.println(num);
}

Показать массив с do / while l oop:

int i = 0;
do {
    System.out.println(array[i++]);
} while (i < array.length);

Показать массив с while l oop:

int j = 0;
while (j < array.length) {
    System.out.println(array[j++]);
}

Показать массив через Рекурсивная итерация :

iterateArray(array, 0);  // 0 is the start index.


// The 'iterateArray()' method:
private static int iterateArray(int[] array, int index) {
    System.out.println(array[index]);
    index++; 
    if (index == array.length) {
        return 0;
    }
    return iterateArray(array,index);
}

Показать массив с помощью Массивы. stream () (Java8 +):

Arrays.stream(array).forEach(e->System.out.print(e + System.lineSeparator())); 

Показать массив, используя IntStream (Java8 +):

IntStream.range(0, array.length).mapToObj(index -> array[index]).forEach(System.out::println);

Выберите желаемое оружие ....

1 голос
/ 27 января 2020
Considering you have an array like : 
int[] array = {1,2,4,5,6};

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

Arrays.stream (array) .forEach (System.out: : println);

Точно так же вы можете выполнять множество действий над коллекциями:

List<String> myList = new ArrayList<>(); List
myList.add("A");
myList.add("B");

Stream.of (myList) .forEach (System.out: : println);

myList.forEach (System.out :: println);

0 голосов
/ 27 января 2020

Во-первых, я запутался в этом утверждении

Вы начинаете с i = 0, потому что 0 - первая часть массива и условие, в то время как i> массив - не может превышать массив и i ++ для доступа к следующей части массива.

, потому что, как я знаю, ваш i всегда должен быть меньше (<) длины массива, чтобы избежать ArrayIndexOutOfBoundsException. </p>

И по причине:

Но есть ли конкретная c причина, по которой вам нужно использовать для l oop и есть ли другой способ чтения значений из массива?

На самом деле, вы можете использовать любой l oop, который вы знаете, в зависимости от того, что вам нужно. Но в большинстве случаев его легче использовать для каждого l oop. например,

int [] arrayNumber = new int[10]; // or some constant value if there is.
. . . . 
for(int number: arrayNumber){
   . . . . //any thing you want to do with the value of the array
}

Этот код наверняка избежит ArrayIndexOutOfBoundsException, потому что для каждого l oop будет проверяться, что он будет только l oop для точного количества / длины массива. Но недостатком использования этого l oop будет потеря трека индекса (i) выбранного массива. Чтобы устранить этот недостаток, вы добавите новый целочисленный индекс (i) и установите значение равным нулю (0) int i = 0 вне каждого для каждого и добавляете приращение в l oop. Например,

int i = 0;
for(int val: arrayVar){
    ....//do something here
    i++;
}

И, делая это, код будет труднее для чтения, чем для l oop, который содержит инициализацию индекса (i), проверку значения i и приращения i все внутри для заголовок. Например,

for(int i = 0; i < arrayVar.length; i++ ){
    //do something here
}

Для разницы for и for each l oop в массиве см. выбранный ответ здесь . Первое значение for для l oop, а второе значение l oop в ответе - для каждого l oop

Надеюсь, это поможет.

0 голосов
/ 27 января 2020

Ну, вам не нужно l oop, если вам нужен только 1 индекс, и вы знаете, где он находится. int[] myNum = {10, 20, 30, 40}; // then if you need to access 20 on index 1 myNum[1];

Но если вам нужен доступ ко всему, тогда да, вы итерируете каждый индекс через l oop (foreach, while, stream et c.)

0 голосов
/ 27 января 2020

Я почти уверен, что вы можете использовать любой тип l oop для доступа к массиву. Ибо циклы являются стандартом, потому что их проще читать, писать и понимать с первого взгляда.

...