-3
votes

Pourquoi le compte ne s'imprime pas après la boucle for?

      Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();          //t=1
      while(t!=0) {
          int n = sc.nextInt();     //n=5
          int a[] = new int[n];     // a = { 1,2,5,6,7 }

          for (int i = 0; i < n; i++) {
              a[i] = sc.nextInt();
          }
          int count=0,count1=0;
          for (int i = 0; i < n; i++) {
              if ((a[i + 1] - a[i]) > 2) {
                  count++;
              } else {
                  count1++;
              }
          }
           //this doesn't get printed
          System.out.println(count+1+ " " +count1);  
                                                               

          t--;
          }

3 commentaires

Vous n'attribuez une valeur à t qu'une seule fois. Si cette valeur n'est pas 0, la boucle ne se termine jamais.


Même après avoir ajouté t--; ça montre la même chose


Êtes-vous sûr que votre programme n'est pas mort avec une ArrayIndexOutOfBoundsException ? Parce que la boucle for contient s'exécute jusqu'à i == n-1 , l'instruction if ((a[i + 1] - a[i]) > 2) (spécifiquement, le bit a a[i+1] ) va exploser à droite quand i n'atteint la valeur de n-1 et le programme aura jamais atteint le System.out.println qui suit la boucle.


3 Réponses :


0
votes
int count=0,count1=0;
for (int i = 0; i < n-1; i++) {

0 commentaires

0
votes

Comme vous essayez de prendre continuellement pour l'entrée de cas de test, seul t-- ne fonctionnera pas ici. Je vais poster ici une structure générique pour cela. Essayez l'approche suivante -

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for(int i = 0; i < t; i++){
            int n = in.nextInt();
            //do your stuff here
            // now you could take input and process them t times
        }

        //finally don't forget to close the input stream.
        in.close();
    }


0 commentaires

-1
votes

Les conditions dans le bloc de code suivant entraîneront une ArrayIndexOutOfBoundsException comme lorsque i = n - 1 , if ((a[i + 1] - a[i]) > 2) essaiera d'obtenir un élément de a[n - 1 + 1] c'est-à a[n] dire a[n] que vous connaissez déjà n'est pas valide car les indices de a[] sont compris entre 0 et n - 1 :

1
5
1 2 5 6 7
2 3

Vous pouvez le mettre comme

for (int i = 0; i < n -1 ; i++) {
    if ((a[i + 1] - a[i]) > 2)

Après cette correction, vous trouverez ci-dessous le résultat d'un exemple d'analyse:

for (int i = 0; i < n; i++) {
    if ((a[i + 1] - a[i]) > 2)

C'est parce que count1++ est exécuté pour 1 2, count1++ 5 6 et 6 7 tandis que count++ est exécuté uniquement pour 2 5 .


1 commentaires

Downvoter - Ce sera utile si vous pouvez laisser un commentaire.