|
|
|
|
Bonjour,
J'essaye de traduire un programme avec des tableaux en liste chainé en utilisant la collection arraylist et dès le début je suis tomber sur une impasse qui ne me permet pas de continuer la traduction :
ArrayList liste = new ArrayList();
liste.add(Integer.parseInt(str[0]));
liste.add(Integer.parseInt(str[1]));
liste.add(Integer.parseInt(str[2]));
liste.add(Integer.parseInt(str[3]));
char classe = ' ';
if(liste.get(0) < 127 && liste.get(0) > 0) {
System.out.println("Votre addresse ip est de Catégorie A");
classe = 'A';
}
Configuration: Windows Vista Firefox 3.0.7
J'ai essayé autre chose :
ArrayList liste = new ArrayList();
liste.add(ip.split("\\."))
int categorie = Integer.parseInt((String) liste.get(0));
if(categorie < 127 && categorie > 0) {
System.out.println("Votre addresse ip est de Catégorie A");
classe = 'A';
}
exécution : Entrez une adresse ip ! 23.22.33.22 Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String at ip.main(ip.java:28) Il faut faire partie de la solution et non du problème ;-) |
La visiblement le probleme viens du fait que JAVA ne permet pas de caster le contenu de ta liste qui est du type : "Ljava.lang.String" en un type "java.lang.String".
|
Les listes chainés sont dynamique, cette démarche est trop long, tiens regarde le bout de code stp :
System.out.println("Entrez une adresse ip !");
Scanner sc = new Scanner(System.in);
String ip = sc.nextLine();
if(!ip.matches("^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"))
System.err.println("Votre addresse ip est incorrecte");
else {
String str[]=ip.split("\\.");
int categorie = Integer.parseInt(str[0]);
int H1 = Integer.parseInt(str[1]);
int H2 = Integer.parseInt(str[2]);
int H3 = Integer.parseInt(str[3]);
char classe = ' ';
if(categorie < 127 && categorie > 0) {
System.out.println("Votre addresse ip est de Catégorie A");
classe = 'A';
}
Il faut faire partie de la solution et non du problème ;-) |
J'ai utilisé la généricité et c'est ok ;)
ArrayList<Integer> liste= new ArrayList<Integer>();
liste.add(Integer.parseInt(str[0]));
liste.add(Integer.parseInt(str[1]));
liste.add(Integer.parseInt(str[2]));
liste.add(Integer.parseInt(str[3]));
char classe = ' ';
if(liste.get(0) < 127 && liste.get(0) > 0) {
System.out.println("Votre addresse ip est de Catégorie A");
Il faut faire partie de la solution et non du problème ;-) |
Sa fait longtemp que j'ai pas fait de java, du coup je suis pas trop sur de moi, mais si je comprend bien ton probleme, tu voudrais remplacer sa :
int categorie = Integer.parseInt(str[0]); int H1 = Integer.parseInt(str[1]); int H2 = Integer.parseInt(str[2]); int H3 = Integer.parseInt(str[3]); par l'utilisation d'une array liste? un peu comme dans cet exemple :
ArrayList liste = new ArrayList();
liste.add(ip.split("\\."))
int categorie = Integer.parseInt((String) liste.get(0));
if(categorie < 127 && categorie > 0) {
System.out.println("Votre addresse ip est de Catégorie A");
classe = 'A';
}
et le probleme dans cette exemple c'est que java ne permet pas de caster un element d'un arraylist en string. essaye peut etre en déclarant ton array liste comme sa : ArrayList <String> liste = new ArrayList(); si sa marche il y aurra sans doute moin de soucis pour passer d'un element de l'ArrayListe a un string puis a un int comme tu essai de le faire dans cette ligne : int categorie = Integer.parseInt((String) liste.get(0)); j'espere que sa t'aide un peu. sinon tu peu toujour essayer de trouver des solution sur l'api java : "http://java.sun.com/j2se/1.5.0/docs/api/" |