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 Réponses :
int count=0,count1=0; for (int i = 0; i < n-1; i++) {
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(); }
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
.
Downvoter - Ce sera utile si vous pouvez laisser un commentaire.
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 bouclefor
contient s'exécute jusqu'ài == n-1
, l'instructionif ((a[i + 1] - a[i]) > 2)
(spécifiquement, le bit aa[i+1]
) va exploser à droite quandi
n'atteint la valeur den-1
et le programme aura jamais atteint leSystem.out.println
qui suit la boucle.