Помощь в понимании циклов Java для - PullRequest
0 голосов
/ 02 марта 2011

Мне нужно написать java-программу, в которой решение будет включать печать наконечника стрелки в зависимости от количества строк.Ниже приведен пример того, как должен выглядеть результат.Однако я не могу сделать это, пока не пойму петли.Я знаю, что должен работать со строками и столбцами и, возможно, с вложенными циклами.Я просто не знаю, как связать строку со столбцами, используя для циклов.Пожалуйста, помогите мне понять эти петли.Спасибо!

Пример № 1 (нечетное количество строк)

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

Пример № 2 (четное количество строк)

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

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

цикл 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); }

если мы хотим перебрать 2-мерную коллекцию, например ...

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, а для третьего параметра мы увеличиваем на единицу. мы можем использовать счетчик 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
                }
        }
    }
}

Объяснение и комментарий в ближайшее время. Извините, если это слишком сложно (я уверен, что это даже не самый лучший способ решить эту проблему).

Думая о проблеме, у нас есть горб, который появляется на полпути для четных чисел и на полпути округляется для нечетных чисел.

В горбах, если он четный, мы должны повторить строку.

Затем мы должны начинать снимать «<<» каждый раз, так как мы идем вниз. </p>

Пожалуйста, спросите, если у вас есть вопросы.

1 голос
/ 01 марта 2013

У меня был тот же вопрос для домашнего задания, и в итоге я получил правильный ответ, используя множество вложенных циклов if в одном цикле for.

В коде много комментариев, которым вы можете следовать, чтобы объяснить логику.

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

Опять же, это было для домашнего задания. Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...