Java для цикла, где значения переходят - PullRequest
0 голосов
/ 12 ноября 2018

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

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

int val1 = 5;
int val2 = 9;
for(int i = val1; i <= val2; i=i+(val2-val1) {
}

В этом случае i сначала будет 5, а затем 9. Кроме того, есть ли способ сделать это с другим количеством переменных?

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Если мы уже немного глупы, это поможет добиться столько значений, сколько вы хотите, и внутри цикла for. Но я бы никогда не написал такой код, потому что он совершенно нечитабелен:

package package1;

public class SillySkip {

    public static void main(String[] args) {
        for( int data[] = {5,10,-4}, i, j=0; j < data.length && (i = data[j]) % 1 == 0 ; ++j )
        {
            System.out.println(i);
        }
    }

}

Начиная с Java 8 и выше, вы можете использовать Stream.of для итерации произвольных значений, например:

package package1;

import java.util.stream.Stream;

    public class IterateSomeValues {

        public static void main(String[] args) {
            Stream.of(5,10,-4).forEach(e->System.out.println(e));
        }

    }
0 голосов
/ 12 ноября 2018

вы можете поместить их в массив и получить к нему доступ по индексу

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        int[] myArray = {4, 6 , 9};
        for(int x : myArray)
        {
            System.out.println(x);
        }
        //or....

        for(int x =0; x<3; x++)
        {
            System.out.println(myArray[x]);
        }
    }
}
0 голосов
/ 12 ноября 2018

Как сказал @ Гонен, вы можете справиться с этим, используя stream.Если вы хотите «... первая переменная самая маленькая, а третья самая большая ...», вы должны использовать stream.sorted() для получения отсортированных значений.

x соответствует каждому элементуvals список при обходе.Таким образом, вы можете делать что угодно в блоке forEach с помощью x

List<Integer> vals = Arrays.asList(5,9,17);

vals.stream().sorted().forEach(x -> {
    System.out.println(x);
});
0 голосов
/ 12 ноября 2018

Я не уверен на 100%, что понимаю ваш вопрос, но вы можете сделать

for(int i = val1; i <= val2; i = (i == val1) ? val2 : val2+1) {
    // ...
}

Если вам нужно больше значений, я бы поместил их в массив и использовал цикл for-each над этим

int[] vals = {5,9,17};
for (int i : vals) {
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...