0
votes

Débogage: Comment supprimer des caractères consécutifs dans une chaîne?

ci-dessous est mon code pour supprimer des caractères survenant consécutivement dans une chaîne mais n'a pas obtenu le résultat attendu ...

import java.util.*;
import java.lang.*;
import java.io.*;
           
class GFG {
    public static void main (String[] args)  {
    
        Scanner sc= new Scanner(System.in);
        int t=sc.nextInt();
        while(t-->0){
            String name= sc.next();
            char[] c = new char[name.length()];
            int j=0;
            boolean check=true;
            //looping through the array to find duplicates 
            for(int i=0;i<name.length()-1;i++){
                if(name.charAt(i)==name.charAt(i+1)){
                     continue;
                }
                else{
                   c[j]=name.charAt(i);
                   j++;
                   check=false;
                }
            }
            //printing the char array
            if(check==true){
                System.out.println(name);
            }else{
                for(int i=0;i<j+1;i++){
                    System.out.print(c[i]);
                }
                System.out.print(name.charAt(name.length()-1));
                System.out.println();
            }
        }
    }
}
       


6 commentaires

Veuillez utiliser l'organe de la question pour poser une question et un bref poser quel problème êtes-vous confronté?


Pourriez-vous décrire le problème que vous faites face à votre code? N'a-t-il pas compiler, renvoie différents résultats que prévu (pour quelle entrée et quel est le résultat incorrect)?


Le problème de mon code est que cela ne produit pas de résultats en cas de multiples cas de test. Le code s'arrête après avoir produit la production de certains cas de test.


Ne fournissez pas de telles informations dans des commentaires! Veuillez lire exemple de reproductible minimal et améliorer votre question en conséquence.


Et indice: utilisez plus d'un caractère pour vos variables. Ce n'est pas une formule mathématique! Le code doit être lu par des humains, il n'ya aucun point dans les abréviations comme celle-là.


@ Quest275 - Si l'une des réponses résolvait votre problème, vous pouvez aider la communauté en marquant cela comme accepté. Une réponse acceptée aide les futurs visiteurs à utiliser la solution avec impatience.


4 Réponses :


4
votes

Vous pouvez utiliser cette approche:

class GFG {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        String result = "";

        if (name.length() > 0)
            result += name.charAt(0);
        //looping through the array to find duplicates
        for (int i = 1; i < name.length(); i++){
            if (name.charAt(i) == name.charAt(i - 1)){
                continue;
            } else {
                result+=name.charAt(i);
            }
        }
        //printing the result
        System.out.print(result);
    }
}


0 commentaires

0
votes

Gardez toujours les points suivants à l'esprit pendant l'écriture de code:

  1. Suivez Conventions de nommage Java . Les noms de variables doivent être courts mais significatifs. En outre, les noms de classe doivent être dans un cas mixte avec la première lettre de chaque mot interne capitalisé. Vous devez également éviter les acronymes et les abréviations à moins que l'abréviation ne soit beaucoup plus largement utilisée que la forme longue. URL , html etc.
  2. affiche le message correspondant avant de demander n'importe quelle entrée; Sinon, l'utilisateur continue de deviner si une entrée est requise par le programme.
  3. Où que vous soyez nécessaire, mettez des commentaires dans le code afin que le lecteur puisse comprendre votre programme facilement.

    exemple de code: xxx

    un échantillon exécuté: xxx < / p>


0 commentaires

1
votes

Une alternative pourrait être d'utiliser des flux Java 8.

Étapes:

  1. Démarrer un intrestre à partir de index = 1 jusqu'à la fin. (Étant donné que la valeur de résultat est initialement égale au caractère à l'index 0)
  2. ajoutez le caractère au résultat final s'il ne correspond pas au dernier caractère vu. xxx

    Remarque: il utilise une concaténation de chaîne simple.


0 commentaires

1
votes

OK, il y a quelques problèmes avec votre code.

Étiqueons les numéros de ligne comme ci-dessous: P>

01  StringBuilder sb = new StringBuilder();
02  int lastChar = 65537; // This char will never exist as char is 16 bits in Java.
03  for (int i = 0; i < name.length(); i++) {
04      char c = name.charAt(i);
05      if (c != lastChar) // perform int comparison so first char will be picked up.
06      {
07          sb.append(c);
08          lastChar = c; // widens c into an int.
09      }
10  }
11  System.out.println(sb.toString());


0 commentaires