Java.lang.StringIndexOutOfBoundsException: String

Fermé
domxaline - 14 déc. 2015 à 10:42
 domxaline - 15 déc. 2015 à 17:55
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

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
14 déc. 2015 à 18:14
Bonjour,

Tu fais
bla.substring(cle,i);
avec
char cle
alors que substring s'utilise avec deux int, tu dois faire la conversion.
0
vous voulez que je fasse comme ceci
code = bla.substring((char) cle,i);
non marche pas toujour la même erreur
0
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
15 déc. 2015 à 00:30
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
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
"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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
15 déc. 2015 à 15:41
ici ton second contient qu'un char, c'est donc pas un tableau, tu peux directement print second :p
0
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