2016-11-14 2 views
-5

Возможно, кто-то может помочь!заполнение 2-мерного массива в java

мне нужно для вывода массива, который выглядит: https://i.stack.imgur.com/uafrY.jpg

Но у меня есть: https://i.stack.imgur.com/dOYt5.jpg

Что мне нужно изменить в сценарии? Мне не нужен полный сценарий, просто некоторые основные идеи, как я мог бы это улучшить!

a = 1; 
for (i=0; i<=9; i++) 

    for (j=9-i; j>=6-i; j--) 
     if (j>=0) { 
      A[i][j] = a; a=a+1; 
+0

Добро пожаловать в StackOverflow. Во-первых, вы можете улучшить свой * вопрос *, удалив ссылки, а вместо этого скопируйте/вставьте выходные ** текст ** в вопрос, чтобы мы могли читать/копировать, сравнивать текст, на который вы ссылаетесь, очень сложно сделать с изображениями (следовательно, обычно вниз). Благодаря! – davedwards

+0

Просьба представить весь исходный код, который вы пытались реализовать, чтобы лучше понять вашу проблему. Никто не украдет ваш код. –

ответ

0

Ниже рабочий код, который будет производить желаемый результат:

public static void main(String[] args) { 
     int A[][] = new int[10][10]; 
     int a = 1; 
     for(int i = 0; i <= 9; i++) { 
      for(int j = 9 - i; j >= 6 - i; j--) { 
       if(j >= 0) { 
        A[9-i][j] = a; 
        a = a + 1; 
       } 
      } 
     } 

     for(int i = 0; i <= 9; i++) { 
      StringBuilder printString = new StringBuilder(); 
      for(int j = 0; j <= 9; j++) { 
       printString.append(A[i][j] + "\t"); 
      } 
      System.out.println(printString); 
     } 
    } 

Производит вывод, как:

34 0 0 0 0 0 0 0 0 0 
33 32 0 0 0 0 0 0 0 0 
31 30 29 0 0 0 0 0 0 0 
28 27 26 25 0 0 0 0 0 0 
0 24 23 22 21 0 0 0 0 0 
0 0 20 19 18 17 0 0 0 0 
0 0 0 16 15 14 13 0 0 0 
0 0 0 0 12 11 10 9 0 0 
0 0 0 0 0 8 7 6 5 0 
0 0 0 0 0 0 4 3 2 1 
+0

Печать их назад не является решением для правильного ввода массива. Речь идет о правильном выборе массива, а не о печати этого точного вывода. – Andreas

+0

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

+0

Я проголосовал за то, что ответ ** не полезен ** для решения проблемы правильного построения * массива *. И создание второго массива вряд ли является правильным ответом, когда все, что вам нужно сделать, это правильно построить его для начала. – Andreas

0

1) При использовании вложенных циклов, я считаю полезным назвать ваш петлевые переменные row и col, чтобы было ясно, что есть.

2) Либо прокрутите вперед строки и столбцы с декрементным счетчиком (a) ИЛИ свернитесь назад по строкам и столбцам с помощью счетчика.

0

Ваш код почти отсутствует, за исключением того, что у вас есть обратные строки. Легкое исправление заключается в том, чтобы отменить индекс строки при назначении значения, то есть изменить A[i][j] на A[9-i][j].

Это поможет вам правильный результат, однако:

  • Если вы исследуете код, который вы увидите, вы 9 - i в двух местах, так что, возможно i должен быть обратным отсчетом.

  • Вы можете рассмотреть advice of Extragorey, чтобы назвать ваши переменные row и col, чтобы уточнить их смысл.

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

  • a = a + 1 лучше писать как a++, и его можно сделать встроенным с назначением A.

  • С j с подсчетом, отметка j>=0 должна быть просто добавлена ​​в состояние цикла.

  • Вы можете объявить и инициализировать более чем одну переменную в секции инициализации for-loop, если они имеют тот же тип, что и a и i.

Вот таким образом, уточненный код:

int[][] A = new int[10][10]; 
for (int row = 9, a = 1; row >= 0; row--) 
    for (int col = row; col >= row - 3 && col >= 0; col--) 
     A[row][col] = a++; 
for (int[] r : A) { 
    for (int v : r) 
     System.out.printf("%-4d", v); 
    System.out.println(); 
} 

Выход

34 0 0 0 0 0 0 0 0 0 
33 32 0 0 0 0 0 0 0 0 
31 30 29 0 0 0 0 0 0 0 
28 27 26 25 0 0 0 0 0 0 
0 24 23 22 21 0 0 0 0 0 
0 0 20 19 18 17 0 0 0 0 
0 0 0 16 15 14 13 0 0 0 
0 0 0 0 12 11 10 9 0 0 
0 0 0 0 0 8 7 6 5 0 
0 0 0 0 0 0 4 3 2 1 
Смежные вопросы