帮助理解java'for'循环

时间:2011-03-02 02:43:07

标签: java loops for-loop

我必须编写一个java程序,其中解决方案将包括根据行数打印箭头图。以下是结果应如何显示的示例。但是,在我理解循环之前,我不能这样做。我知道我必须使用行和列以及可能的嵌套循环。我只是不知道如何使用for循环将行与列连接起来。请帮助我理解这些循环。谢谢!

示例#1(奇数行)

>
>>>
>>>>>
>>>>>>>
>>>>>
>>>
>

示例#2(偶数行)

>
>>>
>>>>>
>>>>>>>
>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>
>>>
>

3 个答案:

答案 0 :(得分:3)

for循环将遍历数据集合,例如数组。经典的for循环看起来像这样:

  for(counter=0;counter <= iterations;counter++){   }

第一个参数是一个计数器变量。第二个参数表示循环应该持续多长时间,第三个参数表示每次传递后计数器应该增加多少。

如果我们想要从1到10循环,我们会执行以下操作:

for(counter=1;counter<=10;counter++){ System.out.println(counter); }

如果我们想要从10 - 1循环,我们会执行以下操作:

for(counter=10;counter>=1;counter--){  System.out.println(counter); }

如果我们想循环一个二维集合,比如......

1 2 3
4 5 6
7 8 9

int[][] grid = new int[][] {{1,2,3},{4,5,6},{7,8,9}};

我们需要2个循环。外部循环将遍历所有行,内部循环将遍历所有列。

你将需要2个循环,一个循环遍历行,一个循环遍历列。

 for(i=0;i<grid.length;i++){
    //this will loop through all rows...
    for(j=0;j<grid[i].length;j++){
      //will go through all the columns in the first row, then all the cols in the 2nd row,etc
      System.out.println('row ' + i + '-' + 'column' + j + ':' + grid[i][j]);
    }
 }

在外部循环中,我们将第一个参数的计数器设置为0。对于第二个,要计算我们将循环的次数,我们使用数组的长度,这将是3,对于第三个参数,我们增加1。我们可以使用计数器i来引用我们在循环中的位置。

然后我们使用grid [i] .length确定特定行的长度。这将计算每一行循环时每行的长度。

请随时询问有关循环的任何问题!

编辑:理解问题.....

您将需要使用代码执行多项操作。在这里,我们将存储变量中的行数,如果需要将此值传递给方法,请说出来。

 int lines = 10; //the number of lines
 String carat = ">";

 for(i=1;i<=lines;i++){
     System.out.println(carat + "\n"); // last part for a newline
     carat = carat + ">>";
 }

以上将打印克拉一直向上。我们打印出克拉变量,然后我们将克拉变量加长2克拉。

....接下来要做的是实施能够决定何时减少克拉的东西,或者我们可以将其中的一半减少到另一半。

编辑3:

Class Test {
    public static void main(String[] args) {

        int lines = 7; 

        int half = lines/2;
        boolean even = false;
        String carat = ">";
        int i;

        if(lines%2==0){even = true;} //if it is an even number, remainder will be 0

        for(i=1;i<=lines;i++){
                System.out.println(carat + "\n");                           
                if(i==half && even){System.out.println(carat+"\n");} // print the line again if this is the middle number and the number of lines is even
                if(((i>=half && even) || (i>=half+1)) && i!=lines){ // in english : if the number is even and equal to or over halfway, or if it is one more than halfway (for odd lined output), and this is not the last time through the loop, then lop 2 characters off the end of the string
                        carat = carat.substring(0,carat.length()-2); 
                }else{ 
                        carat = carat + ">>"; //otherwise, going up
                }
        }
    }
}

简短的解释和评论。如果这是过于复杂的道歉(我很确定这甚至不是解决这个问题的最佳方法)。

考虑到这个问题,我们有一个驼峰出现在偶数数字的中途,并且中途为奇数。

在驼峰,如果是偶数,我们必须重复这个字符串。

然后我们必须开始取消“&lt;&lt;”每一次,因为我们要走下去。

请询问您是否有疑问。

答案 1 :(得分:1)

对于家庭作业我有同样的问题,并且最终通过单个for循环使用大量嵌套if循环来得到正确的答案。

在整个代码中有很多注释,您可以按照这些注释来解释逻辑。

class ArrowTip {

public void printFigure(int n) {      //The user will be asked to pass an integer that will determine the length of the ArrowTip
 int half = n/2;   //This integer will determine when the loop will "decrement" or "increment" the carats to String str to create the ArrowTip
 String str = ">";  //The String to be printed that will ultimately create the ArrowTip
 int endInd;        //This integer will be used to create the new String str by creating an Ending Index(endInd) that will be subtracted by 2, deleting the 2 carats we will being adding in the top half of the ArrowTip

 for(int i = 1; i <= n; i++) {       //Print this length (rows)
    System.out.print(str + "\n");   //The first carat to be printed, then any following carats.
    if (n%2==0) {       //If n is even, then these loops will continue to loop as long as i is less than n.
      if(i <= half) {     //This is for the top half of the ArrowTip. It will continue to add carats to the first carat
         str = str + ">>";    //It will continue to add two carats to the string until i is greater than n.
      }
      endInd = str.length()-2;  //To keep track of the End Index to create the substring that we want to create. Ultimately will determine how long the bottom of the ArrowTip to decrement and whether the next if statement will be called.
      if((endInd >= 0) && (i >= half)){   //Now, decrement the str while j is greater than half
         str = str.substring(0, endInd);  //A new string will be created once i is greater than half. this method creates the bottom half of the ArrowTip
      }
    }
    else {          //If integer n is odd, this else statement will be called.
      if(i < half+1) {  //Since half is a double and the integer type takes the assumption of the one value, ignoring the decimal values, we need to make sure that the ArrowTip will stick to the figure we want by adding one. 3.5 -> 3 and we want 4 -> 3+1 = 4
          str = str + ">>"; //So long as we are still in the top half of the ArrowTip, we will continue to add two carats to the String str that will later be printed.
       }
      endInd = str.length()-2;      //Serves the same purpose as the above if-loop when n is even.
       if((endInd >= 0) && (i > half)) {  //This will create the bottom half of the ArrowTip by decrementing the carats.
        str = str.substring(0, endInd);   //This will be the new string that will be printed for the bottom half of the ArrowTip, which is being decremented by two carats each time.
      }
    }
 }
}
}

再次,这是一个家庭作业。快乐的编码。

答案 2 :(得分:0)

这是一个简单的答案,希望对您有所帮助!干杯洛根。

public class Loop {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            int count = i;
            int j = 0;

            while (j != count) {
                System.out.print(">");
                j++;
            }
            System.out.println();

        }
        for (int i = 10; i > 0; i--) {
            int count = i;
            int j = 0;

            while (j != count) {
                System.out.print(">");
                j++;
            }
            System.out.println();

        }
    }
}