Цикл for в Java, в котором значения скачут

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

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

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

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

Поместите значения в Array, а затем переберите значения в Array.

GBlodgett 12.11.2018 19:54

В java 8 или выше используйте Stream.of (val1, val2, val3) .forEach

Gonen I 12.11.2018 20:14

@GonenI Что такое Stream.of?

user10532764 12.11.2018 20:22

Возможно, поместите тело логики цикла for в метод и вызовите его: foo (val1); foo (val2); foo (val3); ? Сколько переменных у вас будет? Если вы имеете дело с 2 или 3, тогда цикл for кажется сложным. Если вы собираетесь иметь дело с десятками или сотнями, то комментарии + ответы, предлагающие список, кажутся хорошей идеей.

jgreve 12.11.2018 20:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
746
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

int[] vals = {5,9,17};
for (int i : vals) {
    // ...
}

Я понимаю метод массива, но как работает инкремент? Если это не val1, не следует ли просто сделать его val3?

user10532764 12.11.2018 20:00

@NabilotexD Тернарный оператор. если i - это val1, измените его на val2. В противном случае сделайте это val2 + 1 (чтобы завершить цикл).

Elliott Frisch 12.11.2018 20:01

@ElliottFrisch, конечно, требует, чтобы значения были в возрастающем порядке и меньше max_value.

Andy Turner 12.11.2018 20:05
Ответ принят как подходящий

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

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]);
        }
    }
}

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

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

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

vals.stream().sorted().forEach(x -> {
    System.out.println(x);
});

Он говорит, что не может найти List

user10532764 12.11.2018 20:31

вы должны добавить импорт: import java.util.List;

Hülya 12.11.2018 20:32

Я добавляю некоторые пояснения, пожалуйста, спрашивайте о моментах, которые вам непонятны.

Hülya 12.11.2018 20:38

Если мы уже ведем себя немного глупо, это поможет для любого количества значений внутри цикла 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));
        }

    }

Другие вопросы по теме