Как я могу сравнить два целых числа в одном массиве в Java?

1

Я новичок в Java. У меня есть массив целых чисел: я хочу подсчитать, сколько целых чисел в этом массиве больше целого, непосредственно следуя за ними. Поэтому сначала я хочу посмотреть на целое число в индексе 0 и проверить, больше ли это целое число в индексе 1. Затем я просматриваю целое число в индексе 1 и проверяю, больше ли это целое число в индексе 2. И так далее,

Пока что у меня есть то, что у меня есть:

    int[] t = {1,5,6,4,3,10}; // create an array of integers
    int sum = 0; //initialize sum at 0

    for (int i=0; i<t.length-1; i++) {
        for(int j = i+1; j<t.length; j++){
            if (t[i]>t[j]){                  //if i is bigger than j
                sum += 1;                   //add 1 to sum
                System.out.println(t[i]);
            }
    }

    }
    System.out.println(sum);

Для этого массива сумма должна быть 2: 6 больше 4, а 4 больше 3. Проблема в том, что код возвращает 5. Я пробовал напечатать t [i] в цикле if, чтобы понять, что происходит: it отпечатки 5,5,6,6,4. Я не понимаю, почему 5 будет больше 6 в этом контексте. Это также похоже на то, что цикл повторяется более одного раза, поэтому я, очевидно, что-то не так с итерацией. Но я действительно не вижу, где проблема. Итак, мой вопрос: что здесь случилось?

Теги:
arrays

4 ответа

1
Лучший ответ

вы ожидаете, что он проверит только следующий элемент, но вы проверяете следующий элемент до конца

Это то, что происходит с вашим текущим кодом

1,5,6,4,3,10

5 > 4
5 > 3
6 > 4
6 > 3
4 > 3

и поэтому count = 5

удалите внутренний цикл и измените условие на

if (t[i] < t[i+1]){
    sum += 1;
}
  • 1
    Так что двойной цикл for проверяет текущий элемент на каждый последующий элемент ... Я понимаю, что произошло сейчас, спасибо за объяснение!
  • 0
    точно <! ----->
3

Это намного проще сделать в одном цикле для цикла

for (int i=0; i<t.length-1; i++){
    if (t[i]>t[i+1]){
        sum +=1;
        System.out.println(t[i]);
    }
}

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

0

Второй цикл не требуется. Просто продолжайте увеличивать я на 1 и сравните i-й и (i + 1) -й элемент. Это должно выглядеть так:

for (int i=0; i<t.length-1; i++) {
    if (t[i]>t[i+1]){                  //if i is bigger than i+1
            sum += 1;                   //add 1 to sum
        }
}
0
for(int j = i+1; j<t.length; j++){

Вы не хотите эту секунду for цикл. Вам просто нужно j = я + 1, и больше ничего. То, что вы хотите, больше похоже на

for (int i=0; i<t.length-1; i++) {
        if (t[i]>t[i + 1]){                  //if i is bigger than j
            sum += 1;                   //add 1 to sum
            System.out.println(t[i]);
        }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню