Partage
  • Partager sur Facebook
  • Partager sur Twitter

Refuse de rentrer dans une boucle

    24 avril 2015 à 11:58:33

    Bonjour à tous, je fais actuellement un programme qui crypte selon le chiffre de César (remplace une lettre par une autre selon un décalage). Seulement, j'ai un petit problème: quand je lance le programme, il refuse de rentrer dans la boucle qui remplace une lettre par une autre et je ne vois pas ce qui l'en empêche. Pourriez-vous m'aider s'il vous plaît? Voici le programme en question:

    import java.util.ArrayList;
    import java.util.Scanner;
    
    
    public class Cryptage {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		//Variables
    		String code_cesar="";
    		String crypt_cesar="";
    		int decalage;
    		int index;
    		String carac="";
    		Scanner scan=new Scanner(System.in);
    		ArrayList<String> ref_cesar=new ArrayList<String>();
    		
    		
    		//Crée une liste avec tous les caractères imprimables reconnus par Eclipse
    		for(int j=32; j<255; j++){
    			ref_cesar.add(""+(char)j);
    			if(j==126){
    				j=160;
    			}
    		}
    		
    		//Décalage
    		decalage=(int)(1+Math.random()*ref_cesar.size());
    		
    		System.out.println("Entrez le message que vous souhaitez crypter.");
    		code_cesar=scan.nextLine();
    		
    		//On parcourt la message à crypter
    		for(int i=0; i<code_cesar.length(); i++){
    			carac=""+code_cesar.charAt(i);
    			
    			//On parcourt ref_cesar pour voir si les lettres sont les mêmes que celle dans code_cesar
    			for(int k=0; k<=ref_cesar.indexOf(code_cesar.charAt(i)); k++){
    				
    				//Si elles sont les mêmes on décale
    				if(carac.equals(ref_cesar.get(k))){
    					
    					//Si ça dépasse la capacité de ref_cesar, on retourne au début
    					if((ref_cesar.indexOf(code_cesar.charAt(i))+decalage)>190){
    						index=(ref_cesar.indexOf(code_cesar.charAt(i))+decalage)-190;
    						crypt_cesar=crypt_cesar+ref_cesar.get(index);
    					}
    					
    					//Sinon on applique le décalage normalement
    					else{
    						index=ref_cesar.indexOf(code_cesar.charAt(i))+decalage;
    						crypt_cesar=crypt_cesar+ref_cesar.get(index);
    						System.out.println("lol4");
    					}
    				}
    			}
    		}
    		
    		//Affichage du message crypté
    		System.out.println(crypt_cesar);
    	}
    }

    C'est dans la boucle for(int k=0; k<=ref_cesar.indexOf(code_cesar.charAt(i)); k++) qu'il refuse de rentrer. Merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2015 à 12:21:06

      Et quelle est ton erreur ?
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        24 avril 2015 à 13:30:10


         EDIT: J'ai lu un peu vite le code, la remarque faite n'est pas valable, je l'enlève donc ;) .

        Par contre, as-tu essayé d'utiliser le debugger pour localiser ton erreur ? Inspecter les variables pour voir.

        -
        Edité par Anonyme 24 avril 2015 à 13:33:20

        • Partager sur Facebook
        • Partager sur Twitter
          24 avril 2015 à 13:56:57

          L'erreur est qu'il ne rentre pas dans la boucle que j'ai nommé. Il "affiche" directement crypt_cesar, mais comme il n'y a rien dedans, il affiche rien. Pourtant, la condition que j'ai mise ne me semble pas irréalisable.

          Où trouve-t-on le debugger? Je suis sous Eclipse.

          • Partager sur Facebook
          • Partager sur Twitter
            24 avril 2015 à 13:57:59

            J'ai oublié de préciser: il ne m'affiche aucun message d'erreur...

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              24 avril 2015 à 14:47:53

              Je te laisse regarder par-ici: http://www.vogella.com/tutorials/EclipseDebugging/article.html
              • Partager sur Facebook
              • Partager sur Twitter
                24 avril 2015 à 15:30:41

                Je l'ai lancé en mode debug mais ça ne m'aide pas... D'autres idées?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  24 avril 2015 à 16:15:26

                  Comment ça, ça ne t'aide pas ? Qu'as tu fait exactement ? Car le lancer pour le lancer c'est sûr que ça ne marchera pas.

                  Un conseil, inspecte tes différentes variables pour voir à l'instant T leur valeur, afin de trouver d'où viens le problème.

                  C''est surement pas quelque chose de compliquer à trouver. IL est important de savoir se débrouiller tout seul dès fois ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 avril 2015 à 21:16:52

                    Et bien j'ai lancé le programme en mode débugg mais je ne comprend toujours pas le problème... J'essayerai de remplacer cette boucle par une boucle while pour voir si ça marche
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Refuse de rentrer dans une boucle

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown