2013-06-18 3 views
0

Im пытается написать функцию для отображения всех комбинаций в массиве с зубцами, где каждая комбинация содержит один элемент из каждого подматрица. Массированный массив может состоять из любого количества массивов, и каждый массив может иметь любое количество элементов. Например. для следующего массива: а [0] = {1, 3, 5} а [1] = {2, 4} он должен вернуть: (1, 2) (1, 4) (3, 2) (3, 4) (5, 2) (5, 4)Печать номеров в массиве

Я думал сделать это так, но тут же столкнулись с проблемами. По логике это выглядит нормально, чтобы получить 1, 2 и 1, 4, но затем в следующем запуске я настроен на 0 (извините, не на машине devel, чтобы протестировать сейчас). Может ли кто-нибудь предложить лучшее решение, пожалуйста?

Вот мой код

for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) 

     if (j < array2.length()) 
      i = 0; 
     else 
      i++; 

     System.out.println(array1[i] "," array2[j]) 
+0

, что является ли что-то еще необходимым? –

+0

Я не вижу причины, если у вас еще есть, без нее он должен печатать все комбинации массивов. – Zoop

+0

, если вы не хотите этого делать, используйте эту [библиотеку] (http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/index.html) – DarthCoder

ответ

1

Вам не нужно это:

if (j < array2.length()) 
      i = 0; 
     else 
      i++; 

я автоматически увеличивается в цикле.

Это должно быть прекрасно:

for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) 
     System.out.println(array1[i] "," array2[j]) 
0

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

for (int i = 0; i < array1.length(); i++){ 
    for (int j = 0; j < array2.length(); j++){ 
    System.out.println(array1[i] "," array2[j]); 
    } 
} 

для достижения желаемого результата

0

Как насчет:

int a [] = {1,2,3}; int b [] = {1,2};

for (int i = 0; i < b.length; i++) { 
    for (int j = 0; j < a.length; j++) { 
     System.out.println(a[i]+","+a[j]); 

    } 

} 
0

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

for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) { 
     System.out.println(array1[i] + "," + array2[j]); 
    } 
} 
0
for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) 
     System.out.println("(" + array1[i] + "," array2[j] + ")"); 
0

Вот общее решение, которое работает с любым количеством массивов (остерегайтесь экспоненциальный характер выполнения этого алгоритма):

int[][] arrays = new int[][] 
{ 
    {1, 2, 3, 4, 5, 6}, 
    {1, 2, 3, 4, 5, 6}, 
    {1, 2, 3, 4, 5, 6} 
}; // let's print all fair rolls of a 3d6 

if (arrays.length == 0) return; // this is why we can't have nice things 

int[] currentPos = new int[arrays.length]; 

while(currentPos[arrays.length - 1] != arrays[arrays.length - 1].length) 
{ 
    // print the current value 
    System.out.print(arrays[0][currentPos[0]]); 
    for (int i = 1; i < arrays.length; ++i) 
     System.out.print(", " + arrays[i][currentPos[i]]); 
    System.out.println(); 

    // increment the "counter" 
    ++currentPos[0]; 
    for (int i = 1; i < arrays.length; ++i) 
    { 
     if (currentPos[i - 1] == arrays[i - 1].length) 
     { 
      currentPos[i - 1] = 0; 
      ++currentPos[i]; 
     } 
     else break; 
    } 
} 
Смежные вопросы