Создать новый старт в середине цикла - PullRequest
0 голосов
/ 20 апреля 2011

Мне нужно создать новый 2D-массив из этих 2-х массивов:

CViEbee [] []

1 2   3   4   1   2

2 1   3   2   4   1

Hdeg []

1 9   9   9   9   1

Новый массив (QST) использует элементы CViEbee, которые состоят из чисел от 1 до 6 (если они существуют), а затем используют их для доступа к индексу в Hdeg. Это будет выглядеть так:

QST [] []

10    10  9   9   0   0

10    10  9   9   0   0
 QST[0][0] = 10 because, CViEbee[0][j]=1 if j=0 and j=4 then 
    QST[0][0] = Hdeg[0]+Hdeg[4] = 1+9 = 10
    QST[0][5] = 0 because, CViEbee[0][j]=6 --> no CViEbee element = 6

    QST[1][3] = 9 because, CViEbee[1][j] = 4 if j= 4 then

    QST[1][3] = Hdeg[4]= 9

Я пытался написать программу, но она все еще не верна. Это код:

int y;
double x = 0; //(Hdeg and QST is double)
int i,j,k,l;

for (i = 0; i < 2; i++) {
    y = 1;
    for (j = 0; j < 6; j++) {
        if (CViEbee[i][j] == y) x = x + Hdeg[j];
        k = 0;
        if(j == 6) {
            QST[i][k] = x;
            System.out.print(QST[i][k]);
        }
    }
    j = 0;
    y++;
    x = 0;
}

System.out.println();

Может кто-нибудь помочь мне, пожалуйста:)

1 Ответ

2 голосов
/ 20 апреля 2011

Некоторые недостатки / проблемы

  1. первый внутренний , если оператор не имеет блока ({ и }, вероятно, отсутствуют)
  2. условие второго внутреннего if оператора никогда не будет true, j не может быть 6 в этот момент
  3. присвоение j=0 ближе к концу не нужно
  4. вам не нужно y, потому что оно всегда равно i+1

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

int[][] cv = new int[][]{{1,2,3,4,1,2},{2,1,3,2,4,1}};
int[] hd = new int[]{1,9,9,9,9,1};
int[][] q = new int[2][6];

for (int row = 0; row < 2; row++) {
  for (int x = 1; x <= 6; x++) {
    for (int col = 0; col < 6; col++) {
      if (cv[row][col] == x) {
        q[row][x-1] += hd[col];
      }
    }
  }
}

for (int[] row:q) {
  for (int col:row) {
    System.out.print(col + "\t");
  }
  System.out.println();
}

Не самое эффективное решение (требуется три вложенных цикла), но как минимум начальная точка;)

(Кстати: вы можете проверить это здесь в Ideone )

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