Чередовать операции в цикле for - PullRequest
0 голосов
/ 15 сентября 2018

Я новичок в Java, пожалуйста, потерпите меня. :) Я не выучил ничего подобного if операторам и тому подобное, я только узнал о циклах, переменных и классах. Мне нужно написать один цикл, который производит следующий вывод:

10 0 9 1 8 2 7 3 6 4 5 5

Из сегмента видно, что разница между числами уменьшается на единицу, поэтому с 10 до 0 вычитается 10, затем с 0 до 9 она прибавляется к 9, и она продолжает чередоваться между добавлением и вычитание.

Моя идея состояла в том, чтобы создать цикл, в котором моя переменная i = 10 уменьшается на 1 в цикле (i--), но я не совсем уверен , как чередовать сложение и вычитание в цикле

 public class Exercise7 {
    public static void main(String[] args) {            
        for(int i = 10; i >= 0; i--) {
            System.out.print(i + " ");
        }
    }
 }

Ответы [ 12 ]

0 голосов
/ 02 октября 2018

Просто запустите цикл, начиная с 0 или начиная с 10.

1.Если вы начинаете с 10

for(int i=10;i>=5;i--){
   System.out.print(i + " " + (10-i) + " ");
}

2.Если вы начнете с 0

for(int i=0;i<=5;i++){
   System.out.print((10-i) + " " + i + " ");
}

Выход будет: 10 0 9 1 8 2 7 3 6 4 5 5

0 голосов
/ 17 сентября 2018

Это здесь. Выходной список представляет собой список комбинаций, чтобы сделать 10; 10 0 9 1 8 2 7 3 6 4 5 5

10 + 0 = 10

9 + 1 = 10

8 + 2 = 10

7 + 3 = 10

6 + 4 = 10

5 + 5 = 10

int n = 10;
int half = n / 2;
if(n % 2 == 1){
    half++;
}        
for(int x = n; x >= half;x--){
    int remainder = n % x;

    if(remainder == 0){
        remainder =  n - x;
    }
    System.out.print(x);
    System.out.print(" ");
    System.out.println(remainder);
}
0 голосов
/ 20 сентября 2018

Я попробовал этот код.У меня это сработало.

for(int i = 10; i >= 5; i--) {
   System.out.print(i + " ");
   System.out.print(10-i + " ");
}
0 голосов
/ 15 сентября 2018

Я не думаю, что ОП на самом деле хотел, чтобы кто-то сделал за них домашнее задание, поэтому я продолжу отвечать на вопрос, который они фактически задали: как чередовать между двумя операциями в цикле ( чтобы они могли сохранить алгоритм, который они придумали :)).

Существует изящный «трюк», который очень часто используется, когда мы хотим что-то сделать через каждую итерацию в большинстве языков программирования. Вы наверняка столкнетесь с этим в своей жизни, и это может вызвать недоумение, если вы не понимаете, что происходит, и вот оно!


Оператор по модулю (%) даст остаток от деления между его операндами .

Например, рассмотрим следующее: 7 ÷ 2 = 3.5

При работе с целыми числами вы скажете, что 7 ÷ 2 = 3, тогда у вас останется 1.
В этом случае, когда все переменные равны int с, в Java 7 / 2 будет 3, а 7 % 2 - 1.

Это по модулю для вас!


То, что интересно в этом операторе, присуще тому, что интересно в делении вообще, и в одном случае в частности: остаток от деления на 2 всегда либо 0, либо 1 ... и это * 1039. * чередуется ! Это ключевое слово здесь.

А вот и «уловка» (на самом деле это не уловка, это, в основном, шаблон, учитывающий, насколько широко он используется) для чередования операций на итерациях:

  1. принимает любую переменную, которая увеличивается каждую итерацию в цикле
  2. проверить остаток от деления этой переменной на 2
  3. если это 0, сделайте что-нибудь, иначе (это будет 1), выберите альтернативный путь!

В вашем случае, чтобы ответить на ваш реальный вопрос (хотя у других есть есть хорошие очки, я не пытаюсь отнять это у кого-либо), вы могли бы подумать об использовании чего-то подобного:

if( i % 2 == 0 ) {
    // i is even, subtract
} else {
    // i is odd, add
}

Это позволило бы вам продолжать работать с алгоритмом, который вы изначально придумали!

0 голосов
/ 15 сентября 2018

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

    public static void main(String[] args) {
        int term = 10;
        int sign = 1;
        for(int delta = 10; delta >= -1; delta--) {
            System.out.print(term + " ");
            sign = -1 * sign;
            term = term + sign * delta;
        }
    }
0 голосов
/ 15 сентября 2018

Кто сказал, что вы можете использовать только один System.out.print в цикле?

for (int i=0; i < 5; i++) {
    System.out.print((10 - i) + " " + (i + 1) + " ");
}
0 голосов
/ 15 сентября 2018

Это немного похоже на домашнее задание, поэтому я не дам вам рабочий код.

Но помните, что вы можете поместить несколько операторов print в цикл for. Вам не обязательно повторять 10 раз, чтобы получить результат. 5 раз вполне достаточно. И, как уже говорилось в комментарии выше: числа чередуются между i и 10-i, для правильного диапазона i.

0 голосов
/ 15 сентября 2018

Что-то не нужно обдумывать:

public class Answer2 {


    public static void main(String[] args) {

        for (int i = 0; i <= 5; i++){
            System.out.println(i);
            System.out.println(10 - i);
        }
    }
}

редактировать

Вы МОЖЕТЕ и должны обобщить свою задачу. Вот пример, как вы могли бы это сделать (я не буду писать метод, потому что это ваша работа - вместо этого я изменю свой ответ, просто чтобы показать вам возможности)

public class Answer2 {

    private static final Random RANDOM = new Random();

    public static void main(String[] args) {

        //You can use any upper bound for 'someLength'
        int someLength = 1 + RANDOM.nextInt(20);

        for (int i = 0; i <= someLength / 2; i++) {
            System.out.println(someLength - i);
            System.out.println(i);
        }
    }
}
0 голосов
/ 15 сентября 2018

заменить i >= 0 на i >= 5

добавить это: System.out.print((10-i--) + " ");

начиная с того, что вы сделали

public class Exercise7 {
      public static void main(String[] args) {        
          for(int i = 10; i >= 5; ) {
              System.out.print(i + " " + (10-i--) + " ");                 
          }
      }
 }
0 голосов
/ 15 сентября 2018

Или вы можете сделать это так, если хотите быть мудрее;)

for(int i = 0, arr[] = {10,0,9,1,8,2,7,3,6,4,5,5}; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...