Не совсем понимаю, почему «количество» уменьшается на полпути (java)

#java #arrays #while-loop #count

Вопрос:

В качестве домашнего задания я должен был найти минимальное количество шагов, необходимых для достижения последнего значения в массиве, предполагая, что каждый шаг может быть не более 50.

Итак, я сделал это :

 import java.util.*;

class RabbitJumps {
  
  public static void main (String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter the number of rocks: ");
    int size = sc.nextInt();
    System.out.print("Enter locations of "  size  " rocks: ");
    int[] rocks = new int[size];
    for (int i = 0; i<size; i  ) {
      rocks[i] = sc.nextInt();
    }
    if (countJumps(rocks)==-1) {
      System.out.println("Impossible");
    } else {
      System.out.println(countJumps(rocks) " jumps");
    }
  }
  public static int countJumps(int[] rocks) {
    for (int i = 0; i<rocks.length-1; i  ) {
      if (rocks[i 1]-rocks[i]>50) {
        return -1;
      }
    }
    int count = 0;
    int distjumped = 0;
    while (distjumped < rocks[rocks.length-1]) {
      int whichrock = nextStep(rocks); 
      distjumped  = rocks[whichrock];
      adjustArray(rocks, whichrock);
      count  ;
      System.out.println("count = " count);    //check
    }
    return count;
  }
  public static int nextStep(int[] rocks) {
    int dist = 0;
    int whichrock = 0;
    for (int i = 0; i<rocks.length; i  ) {
      if (rocks[i]>dist amp;amp; rocks[i]<=50) {
        dist=rocks[i];
        whichrock = i;
        System.out.println(dist);    // check
      } 
    }
    System.out.println("whichrock = " whichrock);     //check
    return whichrock;
  }
  public static void adjustArray(int[] rocks, int whichrock) {
    int dist = rocks[whichrock];
    for (int i = 0; i<rocks.length; i  ) {
      rocks[i]-=dist;
    }
    for (int i = 0; i<=whichrock; i  ) {
      rocks[i]=0;
    }
  }
}
 

Я не совсем понимаю, почему граф такой странный? вот так: изображениея не уверен, почему счет снова начинается с 1 на полпути. Это происходит и с другими входными данными 🙁
Был бы признателен за некоторую помощь!! спасибо, ребята!!

Комментарии:

1. Ты звонишь countJumps дважды main() . Один раз для тестирования if (countJumps(rocks)==-1) и один раз в else случае, если этот тест не пройдет в System.out.println(countJumps(rocks) " jumps");

2. подождите, но как это приведет к тому, что «количество» в методе countJumps вернется к 1? например, если я введу 11; 30 70 75 120 160 170 180 190 200 246 258, это будет проходить гладко и считать до 4, но все начинается с 30 в 5-м раунде, и счет возвращается к 1? @JohnnyMopp

3. Поскольку вы изменяете исходный список rocks входящих adjustArray() , поэтому во 2-й раз, когда вы звоните countJumps() , это другие данные.

4. Ооо, это заняло довольно много времени, но, думаю, теперь я понял… спасибо!! @JohnnyMopp