2014-11-07 2 views
0

Я хочу, чтобы Переберите мой ArrayList таким образом, что,Java: цикл и умножать

, если ИНТ я = 0 = Ь (0), то исключить Ь (0) и умножить

b.get(1)*b.get(2) = 3*6 

, если ИНТ я = 1 = Ь (1), он будет исключить Ь (1) и умножить

b.get(0)*b.get(2) = 1*6 

, если ИНТ я = 2 = Ь (2), он будет исключить Ь (2) и умножить

b.get(0)*b.get(1) = 1*3 

Я пытался, но это не то, что я хотел

1*3 
1*6 
3*1 
3*6 
6*1 
6*3 

код

ArrayList<Integer> b = new ArrayList<Integer>(); 
b.add(1); 
b.add(3); 
b.add(6); 

for(int i = 0; i < b.size(); i++) { 
    for(int j = 0; j < b.size(); j++) { 
     if(b.get(i) != b.get(j)) { 
      System.out.println(b.get(i) + "*" + b.get(j)); 
     } 
    } 
} 

Делая это

for(int i = 0; i < b.size(); i++) { 
    for(int j = i+1; j < b.size(); j++) { 
     if(b.get(i) != b.get(j)) { 
      System.out.println(b.get(i) + "*" + b.get(j)); 
     } 
    } 
} 

я получить выход

1*3 
1*6 
3*6 

что неправильно.

Желаемая выход

3*6 
1*6 
1*3 

ответ

2

Просто начать вторую петлю от + 1 (и, если это не более необходим)

for(int j = i+1; j < b.size(); j++)

РЕДАКТИРОВАТЬ:

for(int i = 0; i < b.size(); i++) { 
    for(int j = 0; j < b.size(); j++){ 
     for(int k = j+1; k < b.size(); k++) { 
      if(j != i && k != i) 
       System.out.println(b.get(j) + "*" + b.get(k)); 
     } 
    } 
} 
+0

Я думаю, что я не очень хорошо объяснил свой вопрос, что я хотел, если, например, я начинаю цикл, начинаем с int = 0 = b (0), который равен 1, он устранит b (0) = 1 и просто умножим b (1) и b (2) так 3 * 6, теперь int i = 1 = b (1), поэтому он устранит b (1) и умножит b (0) и b (2), так что 1 * 6 и, наконец, теперь int = 2 = b (2), поэтому он устранит b (2) и умножит b (0) и b (1), который равен 1 * 3 – user3429531

+0

, выполнив для (int j = i + 1; j user3429531

+0

@ user3429531 См. edit. – user2336315

1

Просто установите j-цикл для начала с

i + 1 

Это напечатает пары только один раз.

+0

Я думаю, что я не очень хорошо объяснил свой вопрос, что я хотел, если, например, я начинаю цикл, начинаем с int = 0 = b (0), который равен 1, он устранит b (0) = 1 и просто умножьте b (1) и b (2) так 3 * 6, теперь int i = 1 = b (1), поэтому он устранит b (1) и умножит b (0) и b (2) так, что 1 * 6 и, наконец, теперь int = 2 = b (2), поэтому он устранит b (2) и умножит b (0) и b (1), который равен 1 * 3 – user3429531

+0

, выполнив для (int j = i + 1; j user3429531

0

Предполагая, что вы не заботитесь для того, все, что вы хотите, чтобы перечислить все возможные неупорядоченные пары с различными элементами из списка целых чисел (1, 3 и 6) вы предоставляете.

Итак, давайте начнем с пробегаем по списку для первого элемента:

for(int i = 0; i < b.size(); ++i) { 
    // something with b.get(i) 
} 

Далее нам нужно второй элемент. Если для j, мы начинаем с индекса 0 снова, нам нужно будет проверить, равен ли ji. Кроме того, когда мы переходим к некоторому индексу, превышающему 0, с i, мы также будем цитировать с j через все элементы, меньшие, чем i. Это дает вам дубликаты 6 * 3 и 3 * 6 и аналогичные.

Поэтому мы не хотим j = i, и мы также не хотим j < i. Итак, мы начинаем с j = i +, что дает нам все пары, которые мы хотим, и ничего больше.

for(int i = 0; i < b.size(); ++i) { 
    for(int j = i + 1; j < b.size(); ++j) { 
     // something with b.get(i) 
    } 
} 

Если вы рисуете таблицу умножения

| 1 | 3 | 6 
1 | 1*1 | 1*3 | 1*6 
3 | 3*1 | 3*3 | 3*6 
6 | 6*1 | 6*3 | 6*6 

вы видите, что мы смотрим на значения от треугольника. Начнем с 1 * 3, 1 * 6 (и более, если бы у нас были целые числа), и продолжим в следующей строке один столбец справа с 3 * 6.

+0

Я думаю, что не очень хорошо объяснил свой вопрос, что я хотел, если, например, я начинаю (0) = 1 и просто умножим b (1) и b (2), так что 3 * 6, теперь int i = 1 = b (1), поэтому он устранит b (1) и умножьте b (0) и b (2) так что 1 * 6 и, наконец, теперь int = 2 = b (2), поэтому он устранит b (2) и умножит b (0) и b (1), который равен 1 * 3 – user3429531

+0

Я обновил свой вопрос.Пожалуйста, взгляните еще раз – user3429531

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