在for循环中的操作之间交替

时间:2018-09-15 20:20:23

标签: java algorithm for-loop

我是Java初学者,请多多包涵。 :)我还没有学过if语句之类的东西,但到目前为止,我仅了解循环,变量和类。我需要编写一个产生以下输出的循环:

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

我从该段中看到,数字之间的差减少了一个,因此从10​​减到0减去10,然后从0减到9加上9,然后在加法和减法之间交替进行减去。

我的想法是创建一个循环,其中我的变量i = 10在循环(i--中减小1,但是我不确定如何在变量之间进行加减运算循环

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

12 个答案:

答案 0 :(得分:22)

为什么没有两个额外的变量,而又增加一个而又减少另一个:

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

输出:

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

但是,我们也可以在没有额外变量的情况下执行此操作:

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

答案 1 :(得分:19)

我不认为OP确实希望有人为他们做功课,所以我要坚持回答他们实际提出的问题:如何在循环中的两个操作之间交替 (这样他们就可以保留:)提出的算法)。

在大多数编程语言中,当我们想做每一次其他迭代时,通常会使用一个很漂亮的“技巧”。您肯定会在生活中遇到它,如果您不知道发生了什么,它可能会令人困惑,所以就去了!


取模(%运算符将产生其操作数之间除法的余数

例如,考虑以下因素:7 ÷ 2 = 3.5

处理整数时,您会说7 ÷ 2 = 3,然后剩下1
在这种情况下,当所有变量均为int时,在Java中,7 / 23,而7 % 21

这对您来说是取模


关于此运算符的有趣之处通常是除法有趣的内容,尤其是一种情况:除以2的余数始终是01。 ..并且它替代!这是这里的关键词。

在迭代中交替进行操作的“技巧”(实际上不是技巧,基本上是一种模式,考虑到它的使用范围):

  1. 采用循环中每次迭代递增的任何变量
  2. 测试该变量除以2的余数
  3. 如果它是0,请执行某些操作,否则(将是1),请选择替代路径!

在您的情况下,要回答您的实际问题(尽管其他人确实有很好的要点,但我并不是想从别人那儿取走),您可以考虑使用类似的方法:

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

这将使您继续使用最初想到的算法!

答案 2 :(得分:6)

public class exercise7 {
    public static void main(String[] args) {

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

答案 3 :(得分:5)

或者,如果您想成为一个明智的人,也可以用这种方式来做;)

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

答案 4 :(得分:5)

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--) + " ");                 
          }
      }
 }

答案 5 :(得分:5)

有些事情不需要思考:

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

答案 6 :(得分:5)

这看起来有点像作业,所以我不会给你工作代码。

但是请记住,您可以在for循环中放置多个print语句。您不一定必须迭代10次才能获得输出。 5次就足够了。就像上面的评论中已经提到的:对于i的正确范围,数字在i和10-i之间交替。

答案 7 :(得分:4)

谁说您在循环中只能使用一个System.out.print

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

答案 8 :(得分:4)

您应该考虑对系列进行概括。如您所见,该系列在加法和减法之间交替。而且,差异在每一步下降了一个。您可以为这两个定义变量并在循环中对其进行调整。

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

答案 9 :(得分:1)

我尝试了这段代码。它对我有用。

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

答案 10 :(得分:1)

只需从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

答案 11 :(得分:0)

这是这里。输出列表是一个组成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);
}