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 boucleforcontient 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 quandin'atteint la valeur den-1et le programme aura jamais atteint leSystem.out.printlnqui suit la boucle.