2015-10-10 2 views
0

Итак, я работаю для циклов и вложенных циклов. Поэтому я должен придерживаться этих основных функций.Для цикла в цикле for

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

Я должен напечатать Ascii коды в строках 10

Пример:

XXXXXXXXX

XXXXXXXXX

XXXXXXXXX

(от 32-122)

Вот мой код:

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

     for(int j = 32; j < 122; j++){ 

      System.out.print((char)j); 

//Once above loop is performed 10*...execute a new line..using a for loop..??    
       System.out.println(); 
        } 
       } 
      }  
+0

Какая проблема при этом? Вы пытались написать внутренний цикл, который работает всего 10 раз. – YoungHobbit

+0

не использует цикл for, используя оператор if! – QuakeCore

+0

Какой желаемый выход? нет никакого вложенного цикла ... – chenchuk

ответ

2

Прямой подход может заключаться в использовании оператора if, предложенного QuakeCore. код придет искать что-то вроде следующего:

public static void main(String[] args) { 
    for (int j = 32; j < 122; j++) { 
     System.out.print((char)j); 
     if (j % 10 == 1) { 
      System.out.println(); 
     } 
    } 
} 

Это оставляет какое-то уродливый код при работе с функцией Modulus в если условие.Причина этого в том, что мы начинаем с числа 32 и увеличиваем их, поэтому получаем j% 10 == 1 вместо чего-то более приятного, такого как j% 10 == 0.

Но, в вашем заявлении говорится, что вы хотите решить проблему с циклом For внутри цикла for, заставляя меня думать, что это школьная задача. Это можно решить, посмотрев на циклы как функции, которые будут выполняться в 2D-пространстве. Таким образом, первый цикл for обрабатывает строки, тогда как внутренний цикл for обрабатывает столбцы (или соответственно y и x). Из этого мы можем решить эту проблему следующим образом:

public static void main(String[] args) { 
    // Increment row/counter by 10 
    for (int row = 32; row < 122; row += 10) { 
     for (int col = 0; col < 10; col++) { 
      System.out.print((char)(row + col)); 
     } 
     System.out.println(); 
    } 
} 
+0

Вау ... Мне очень нравится, как вы решили его с помощью код. Не придумал бы такого решения ... спасибо за ответ, определенно ослепительный. – AnthonyJ

0

сделать это с для петель/вложенное для петель

Попробуйте this-

public static void main(String[] args) { 

     for (int j = 32; j < 122; j++) { 

      System.out.print((char) j); 
      if((j-32)%10==0){ 
       System.out.println(); 
      }    
     } 
    } 

Здесь внутреннее состояние будет заботиться об изменении линии, когда вы напечатали 10 значений

4

Вы внешний контур должны контролировать, что r вы находитесь, а внутренний цикл - какой столбец. Таким образом, только внешний контур выглядит следующим образом (есть 9 строк):

for (int i = 1; i <= 9; i++) 
{ 
    System.out.println(""); 
} 

Это напечатает 9 новых строк, давая вам 9 строк.

Теперь ваша логика столбца входит внутрь, но перед печатью.

for (int i = 0; i < 9; i++) 
{ 
    for (int j = 0; j < 10; j++) 
    { 
     char print = (char)((i * 10) + 32 + j); 
     System.out.print(print); 
    } 
    System.out.println(""); 
} 

Это использует небольшой математический трюк для генерации чисел последовательности. Строка 1 = от 32 до 41, 2 = от 42 до 51 и т. Д.

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

+0

СПАСИБО ВАМ ТАК ЧЕМ! Вот оно ... Это именно то, что мне нужно. Я потратил часы, пытаясь понять это, теперь я изучу ваш код и отступлю ему в голову! – AnthonyJ

0

Это будет печатать каждый CHAR 10 раз подряд (с вложенными для петель):

public static void main(String[] args) { 
     for (int j = 32; j < 122; j++) { 

      // print 10 times the same char in the same line 
      for (int i=0;i<=10;i++){ 
       System.out.print((char) j); 
      } 
      // after 10 char : goto next line 
      System.out.println(); 
     } 
    } 
+0

Если я не ошибаюсь, тогда вопрос заключается не в том, чтобы напечатать один и тот же символ 10 раз в строке ... вместо этого хочет 10 символов в строке –

+0

Спасибо Shadow. im не уверен ни в одном ... он спрашивает о вложенных петлях – chenchuk

+0

В вопросе упоминается как «Мне нужно печатать коды Ascii в строках по 10» –

0

Если вы должны использовать вложенные циклы, то, возможно, что-то подобное будет работать:

int lineLength = 10; 
int lineCount = (122 - 32)/lineLength; 
for (int line = 0; line < lineCount; line++) { 
    for (int column = 0; column < lineLength; column++) { 
     int index = (line * lineLength) + column; 
     System.out.print((char)(32 + index) + " "); 
    } 
    System.out.println(); 
} 
2

Синтаксис for петли:

for(инициализации;условие завершения;приращение)тело

Howe ver, каждый из этих пунктов, выделенных курсивом выше, является необязательным. Части инициализации и инкремента могут иметь несколько компонентов, разделенных запятой.

Поскольку вы знаете, общее число символов кратно 10, вот что я хотел бы сделать:

public static void main(String[]args){ 
    for(int j = 32; j < 122; /* don't increment j here */){ 
     // print 10 chars per line 
     for (int col=0; col<10; col++, j++ /* increment j here instead */) { 
      System.out.print((char)j); 
     } 
     System.out.println(); 
    } 
} 

Обратите внимание, что если общее количество символов не кратно 10, то внутренний loop может печатать некоторые дополнительные функции, поскольку условие внешнего цикла проверяется только каждые 10 символов.

+0

Удивительный ответ. Это очень просто и эффективно. – udaybhaskar

+0

@udaybhaskar - Спасибо! Я был очень удивлен, когда прокрутил уже существующие 4 ответа, и они все-таки использовали относительно сложную математику (умножение, деление, по модулю), чтобы сделать то, что можно было бы сделать с помощью простого приращения. – DaoWen

Смежные вопросы