PDA

View Full Version : [Java] Programma banale... qual è il problema ?


Jushiro
13-11-2010, 22:42
Questo è il codice:
import javax.swing.*;
public class pacchan{
public static void main (String[] args){
String a = JOptionPane.showInputDialog("Sutringo desu!");
int l=a.length();
int i=0;
boolean pal=true;
while ((i<l) || (pal==false)){
int b,c;
b=a.charAt(i);
c=a.charAt((l-i));
if (b==c){
i++;
}else{
pal=false;
System.out.println("BAKA!");
}
}
System.out.println("oki!");
}
}

La compilazione va senza problemi, ma dopo che inserisco la stringa da tastiera mi da:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:686)
at pacchan.main(pacchan.java:10)

Dove ho sbagliato ? :confused:

Smjert
13-11-2010, 23:10
Hai sbagliato la condizione del while, quel check di pal==false manda il programma in loop se la parola non è palindroma.

Infatti se la parola non è palindroma pal rimane == false e anche se i non è più minore di l, il check su pal è valido.
Semmai devi controllare i < l && pal==false.

mad_hhatter
14-11-2010, 17:16
Questo è il codice:
import javax.swing.*;
public class pacchan{
public static void main (String[] args){
String a = JOptionPane.showInputDialog("Sutringo desu!");
int l=a.length();
int i=0;
boolean pal=true;
while ((i<l) || (pal==false)){
int b,c;
b=a.charAt(i);
c=a.charAt((l-i));
if (b==c){
i++;
}else{
pal=false;
System.out.println("BAKA!");
}
}
System.out.println("oki!");
}
}

La compilazione va senza problemi, ma dopo che inserisco la stringa da tastiera mi da:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:686)
at pacchan.main(pacchan.java:10)

Dove ho sbagliato ? :confused:

charAt(l-i), con i = 0, significa charAt(l), ma l'ultimo carattere della stringa è in posizione l-1.