Если у меня есть три переменные, и я хочу, чтобы значение в цикле for переходило от одной к другой, как бы я это сделал? Вы можете предположить, что первая переменная самая маленькая, а третья самая большая, и что переменные не равны друг другу (хотя, если есть способ сделать это, когда они равны, это было бы хорошо).
У меня есть пример, если бы было всего два значения.
int val1 = 5;
int val2 = 9;
for(int i = val1; i <= val2; i=i+(val2-val1) {
}
В этом случае i сначала будет 5, а затем 9. Кроме того, есть ли способ сделать это с другим количеством переменных?
В java 8 или выше используйте Stream.of (val1, val2, val3) .forEach
@GonenI Что такое Stream.of?
Возможно, поместите тело логики цикла for в метод и вызовите его: foo (val1); foo (val2); foo (val3); ? Сколько переменных у вас будет? Если вы имеете дело с 2 или 3, тогда цикл for кажется сложным. Если вы собираетесь иметь дело с десятками или сотнями, то комментарии + ответы, предлагающие список, кажутся хорошей идеей.




Я не уверен на 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?
@NabilotexD Тернарный оператор. если i - это val1, измените его на val2. В противном случае сделайте это val2 + 1 (чтобы завершить цикл).
@ElliottFrisch, конечно, требует, чтобы значения были в возрастающем порядке и меньше max_value.
вы можете поместить их в массив и получить к нему доступ по индексу
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
вы должны добавить импорт: import java.util.List;
Я добавляю некоторые пояснения, пожалуйста, спрашивайте о моментах, которые вам непонятны.
Если мы уже ведем себя немного глупо, это поможет для любого количества значений внутри цикла 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));
}
}
Поместите значения в
Array, а затем переберите значения вArray.