2013-10-05 5 views
1

У меня вопрос, который я пытаюсь ответить за класс, который я принимаю (да, это вопрос о домашнем задании - дополнительный кредит), но я не хочу, чтобы кто-то просто дал мне ответ. Я бы предпочел, чтобы кто-то мягко указал мне в правильном направлении на то, что я должен (или не должен) делать, чтобы решить это.Java Array Loop

Этот класс - это мое первое знакомство с Java, поэтому, если мой код и понимание натолкнутся так же страшно, почему бы и нет, поэтому я заранее извиняюсь.

Проблема:

Мне нужно создать массив 3 ряда по 5 столбцов по 3 комплекта. Мой из положить будет напоминать:

Набор 1:

Набор 2:

44445164 +10617451515053691368888

и т.д., и т.д.

код, который я был в состоянии выяснить (до сих пор) производит диапазон, что нужно для 3 комплекта в целом, 0-44, но я не уверен, как отформатировать это так это выглядит так. Когда я запускаю код, у меня только один длинный список, идущий от 0-44.

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

Мой код:

public static void main(String[] args) { 

    int list[][][] = new int [3][5][3]; //create rows, column, units (buildings) array structure. 
    int i,j,k; //assign variables for row, column and unit (building). 
    int ctr = 0; //set counter. 

    //create array 
    for (i=0; i<3; i++) 
    for (j=0; j<5; j++) 
    for (k=0; k<3; k++) 

     {list[i][j][k] = ctr++;} 


    for (i=0; i<3; i++) 
    for (j=0; j<5; j++) 
    for (k=0; k<3; k++) 

    //Format array 

     {System.out.println(list[i][j][k] + " ");} 
} 

EDIT:

Так некоторый прогресс здесь благодаря предложениям всех. Я могу форматировать это в общем виде, который необходим для 5 столбцов данных. Я понял (перешагнув это), что моя настройка для исходного «int list [] [] []» была неправильной, поэтому у меня возникли проблемы с этим форматированием, как мне было нужно правильно (количество столбцов и строк) ,

Следующий вопрос, который у меня был бы, если я могу спросить, будет, как я хотел бы вставить текст «Установить X» там, где это необходимо? Мне удалось выяснить место установки 1, но я хотел бы (сейчас), чтобы перед строкой, начинающейся с строки 15, и словами «Установить 3» перед словами, «Начало 2», начинается строка 30.

Должен ли я создать отдельные циклы для каждого диапазона значений, который будет иметь каждый блок «Установить X» (диапазон по размеру), а затем просто пометить их соответственно?

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

public class ECThreeD { 

    public static void main(String[] args) { 

     int list[][][] = new int[3][3][5]; // create rows, column, units 
              // (buildings) array structure. 
     int i, j, k; // assign variables for row, column and unit (building). 
     int ctr = 0; // set counter. 

     // create array 
     for (i = 0; i < 3; i++) { 
      for (j = 0; j < 3; j++) { 
       for (k = 0; k < 5; k++) { 
        list[i][j][k] = ctr++; 
       } 
      } 
     } 
     System.out.println("Set 1"); 

     for (i = 0; i < 3; i++) { 
      for (j = 0; j < 3; j++) { 
       for (k = 0; k < 5; k++) { 
        // Format array 
        System.out.print(list[i][j][k] + " "); 
       } 
       System.out.println(); 
      } 
     } 
    } 
} 
+1

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

+0

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

+0

Не извиняйтесь, каждый должен где-то начинать. Ваш пост на самом деле лучше форматируется, чем много первых (и даже вторых, третьих и т. Д.) Постов, и показывает усилия по соблюдению правил на этом сайте. Я написал это, как хедз-ап, что он платит, чтобы сделать его приятным. Следите за хорошими вопросами! – ppeterka

ответ

1

Вам необходимо распечатать новые линии между ними, используя System.out.println(). Кроме того, println() всегда печатает новую строку (как бы нажимая Enter) после строки. Также есть System.out.print(), после чего не помещается новая строка.

Подумайте, когда вам понадобятся новые линии. После каждой строки или столбца? Возможно, дополнительный после каждого набора, чтобы сделать пустую строку.

EDIT: Я правильно отформатировал ваш код. Будет немного легче увидеть, где добавить код.

int list[][][] = new int [3][5][3]; //create rows, column, units (buildings) array structure. 
int i,j,k; //assign variables for row, column and unit (building). 
int ctr = 0; //set counter. 

//create array 
for (i=0; i<3; i++) { 
    for (j=0; j<5; j++) { 
     for (k=0; k<3; k++) { 
      list[i][j][k] = ctr++; 
     } 
    } 
} 


for (i=0; i<3; i++) { //Prints 3 sections. 
    for (j=0; j<5; j++) { //Prints 5 rows. 
     for (k=0; k<3; k++) { //Prints 3 columns. 
      //Format array 
      System.out.println(list[i][j][k] + " "); 
     } 
    } 
} 
0

Во-первых, некоторые отступы:

public static void main(String[] args) { 

    int list[][][] = new int [3][5][3]; //create rows, column, units (buildings) array structure. 
    int i,j,k; //assign variables for row, column and unit (building). 
    int ctr = 0; //set counter. 

    //create array 
    for (i=0; i<3; i++) { 
     for (j=0; j<5; j++) { 
      for (k=0; k<3; k++) { 
       list[i][j][k] = ctr++; 
      } 
     } 
    } 


    for (i=0; i<3; i++) { 
     for (j=0; j<5; j++) { 
      for (k=0; k<3; k++) { 
       //Format array 
       System.out.println(list[i][j][k] + " "); 
      } 
     } 
    } 
} 

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

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

1
  1. Это поможет вам (и читателям) понять вашу логику, если вместо i, j, k вы использовали значимые переменные, такие как строка, столбец, множество.

  2. Ваше форматирование .. интересно! Это неплохо, это не так, как обычно думают на Java. Я могу понять, что вы написали, но я могу сказать, что вы думаете на другом языке.

я вставил код затмить и сделал автоформатирование (Ctrl-Shift-F), и вот результат:

public static void main(String[] args) { 

     int list[][][] = new int[3][5][3]; // create rows, column, units 
              // (buildings) array structure. 
     int i, j, k; // assign variables for row, column and unit (building). 
     int ctr = 0; // set counter. 

     // create array 
     for (i = 0; i < 3; i++) 
      for (j = 0; j < 5; j++) 
       for (k = 0; k < 3; k++) 

       { 
        list[i][j][k] = ctr++; 
       } 

     for (i = 0; i < 3; i++) 
      for (j = 0; j < 5; j++) 
       for (k = 0; k < 3; k++) 

       // Format array 

       { 
        System.out.println(list[i][j][k] + " "); 
       } 
    } 

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

  1. Как вы, наверное, знаете, println добавляет новую строку, а печать - нет. Таким образом, первым шагом будет использование print, а не println, в самом общем случае; и используйте println только тогда, когда вам действительно нужно перейти на новую строку. Поскольку вы попросили только намек, я оставлю это на этом. Удачи!
+0

Благодарим вас за отзыв о автоматическом форматировании в Eclipse, это то, что я использую, и не знал, как это сделать, так что спасибо! Что касается моих переменных, вы правы, я должен был быть более наглядным. То, как мы учились на лекциях инструктора, - это использовать i как вашу «главную переменную», и они пройдут мимо этого по мере необходимости. На самом деле это не самый лучший сценарий реального мира, я просто шел по тому, что преподаватель использовал в своих примерах и лекциях. Вы правы относительно моего форматирования, я делаю гораздо больше работы в SQL, полностью не используемом для форматирования Java (очевидно, ха-ха). –

+0

Общее правило: чем короче область действия переменной, тем более короткими именами ОК. Например, вы, вероятно, никогда не захотите иметь i как переменную поля и редко, как аргумент метода; но для короткого цикла 'for' это может быть самоочевидным. Однако у вас есть три вложенных цикла. Если вы попытаетесь заменить _i_ _set_, _j_ на _row_, _k_ с _column_, это должно уже ответить на половину второй части вашего вопроса. – Ruby

+0

Рад слышать, как вы используете затмение. Вы прошли через свой код в отладчике? Это может многое прояснить для вас. Еще один намек: вы хотите иметь 3 или более команды 'print' и' println' в вашем коде. Готово распечатать самую внутреннюю петлю? Распечатайте что-нибудь (просто случайные персонажи ... экспериментируйте с ним!) Готово с помощью среднего цикла? Распечатайте еще несколько случайных символов ... попробуйте распечатать до и после каждого цикла ... вы скоро это выясните. Не бойтесь экспериментировать! И не забудьте добавить фигурные скобки по мере необходимости, если тело цикла состоит из нескольких операторов. – Ruby

0

Попытайтесь использовать System.out.print(yourString) и поиграйте с областями цикла for (вам нужно добавить скобки), добавив фиктивные строки. Используйте println() только после завершения строки.