Java.lang.StringIndexOutOfBoundsException: String

domxaline -  
 domxaline -
Bonjour,

lors de l'exécution mon prg plante et donne le message suivantes:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -103
at java.lang.String.substring(Unknown Source)
at Crypto3.main(Crypto3.java:21)

quelqu'un peut m'aider svp

import java.util.Scanner;
public class Crypto3
{
public static void main(String[] args)
{
String bla,code;
//int i,decal;
System.out.println("Entrez la phrase à coder:");
Scanner sc=new Scanner(System.in);
bla=sc.nextLine();
System.out.println("Entrez l'alphabet clé:");
char cle=sc.next().charAt(0);
String alpha="abcdefghijklmnopqrstuvwxyz";
code="";
for(int i=1;i<bla.length();i++)
{

String let=bla.substring(i,1);
boolean pos=alpha.contains(bla);
code = bla.substring(cle,i);
}
bla=code;
System.out.println("La phrase codée est:"+bla);
}
}



6 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Tu fais
    bla.substring(cle,i);
    avec
    char cle
    alors que substring s'utilise avec deux int, tu dois faire la conversion.
    0
  2. domxaline
     
    vous voulez que je fasse comme ceci
    code = bla.substring((char) cle,i);
    non marche pas toujour la même erreur
    0
    1. faseldi Messages postés 314 Statut Membre 20
       
      Bonsoir, la méthode a ce profil : substring(int debut, int fin)
      Tu ne peux donc pas l'utiliser avec un char, je ne vois pas ce que tu veux faire avec la méthode substring, mais il va sûrement te falloir écrire une nouvelle méthode qui fait ce que tu souhaites.
      Je vois plusieurs fautes, telles que l'utilisation de ' i ' dans la méthode substring, qui doit planter car (petite demo :
      par exemple :
      String chaine="bonjour";
      String sous = chaine.substring(0,10); // et erreur, car la chaine contient moins de 10 lettres!

      L'autre erreur que je vois est sur le code:
      Tu fais code = .... dans une boucle
      Je suppose que ce que tu souahites doit etre code+=...
      Sinon il n'y a pas d'interet à mettre des valeurs à code dans une boucle, si c'est pour que la seule valeur utilisée par code soit la dernièere itération de la boucle
      Autre (erreur), peut être ?
      tu mets deux String, bla et code
      à la fin tu dis bla=code;
      Il y a peut d’intérêt ici de stocker deux fois la même valeur, pour faire un affichage
      0
  3. domxaline
     
    merci pour vos aides

    " je ne vois pas ce que tu veux faire avec la méthode substring, mais il va sûrement te falloir écrire une nouvelle méthode qui fait ce que tu souhaites."


    voilà ce que je veux faire ceci:

    mon cryptographie:consiste à opérer non avec un décalage systématique, mais par une substitution aléatoire. Pour cela, on utilise un alphabet-clé, dans lequel les lettres se succèdent de manière désordonnée, par exemple:
    HYLUJPVREAKBNDOFSQZCWMGITX
    C'est cette clé qui va servir ensuite à coder le message. Selon notre exemple,
    Les A deviendront des H, les B des Y, les C des L etc.

    veuillez m'expliquer avec plus détails, je ne comprend pas bien
    oublions substring vous avez d'autres solution svp?
    0
  4. domxaline
     
    "L'autre erreur que je vois est sur le code:
    Tu fais code = .... dans une boucle "

    comme vous m'avez dit j'ai mis le code extérieur du boucle
    j'ai erreur message suivante:

    domini
    Entrez l'alphabet clé:
    ertfsyk
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at Testing5.main(Testing5.java:42)


    for(i=1;i<bla.length();i++)
    {
    String let=bla.substring(i,+1);
    boolean pos=alpha.contains(bla);
    }
    code = alpha.substring(cle,i);
    bla=code;
    System.out.println("La phrase codée est:"+bla);
    System.out.println();
    }
    }
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. domxaline
     
    merci pour vos aides.
    j'ai erreur message:
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The type of the expression must be an array type but it resolved to char

    at Testing5.main(Testing5.java:32)


    import java.util.Scanner;
    public class Testing5
    {
    public static void main(String[] args)
    {
    char first[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

    char second;
    char tab[]=new char[second];
    for(char i=0;i<second;i++)
    {
    System.out.println("Entrez votre clé:");
    Scanner sc=new Scanner(System.in);
    String str=sc.nextLine();
    second=str.charAt(0);
    }
    System.out.println("Enter the name: ");
    String n;
    int len=n.length();
    for(int i=0;i<len;i++)
    {
    for(int j=0;j<26;j++)
    {
    char c=n.charAt(i);
    if(c==first[j])
    {
    int pos1=j;
    System.out.print(second[pos1]);
    }
    }
    }}}
    0
    1. faseldi Messages postés 314 Statut Membre 20
       
      ici ton second contient qu'un char, c'est donc pas un tableau, tu peux directement print second :p
      0
  7. domxaline
     
    maintenant, j'ai pb bizarre je n'arrive rien saissir
    Enter the name:
    apparait mais je ne peux pas saissir

    import java.util.Scanner;
    public class Testing5
    {
    public static void main(String[] args)
    {
    char first[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    //System.out.println("Entrez la clé");
    char second = 0;
    char tab[]=new char[second];
    //int second;
    for(char i=0;i<second;i++)
    {
    System.out.println("Entrez votre clé:");
    Scanner sc=new Scanner(System.in);
    String str=sc.nextLine();
    second=str.charAt(0);
    }

    //char second[]={'h','y','l','u','j','p','v','r','e','a','k','b','n','d','o','f','s','q','z','c','w','m','g','i','t','x'};
    //Scanner sc = new Scanner(System.in);
    System.out.println("Enter the name: ");
    // String n="";
    String n="";
    int len=n.length();
    for(int i=0;i<len;i++)
    {
    for(int j=0;j<26;j++)
    {
    char c=n.charAt(i);
    if(c==first[j])
    {
    int pos1=j;
    //System.out.print(second[pos1]);
    System.out.print(second);
    }
    }
    }}}

    0