2017-03-10 1 views
-2

Unten ist ein Programm für Palindrom. Wenn es Palindrom ist, wird es gedruckt JA, sonst NEIN. Ich bin nicht in der Lage zu verstehen, was ist der Unterschied in Aufruf:Fehler im Scanner

> int n=Integer.parseInt(in.nextLine()); 

> or int n=in.nextInt(); 

weil beide die gleiche Arbeit tun. 1. man nimmt String als Eingabe und dann konvertiert es in int 2. man nimmt direkt int.

Wenn die erste genommen wird, gibt es keinen Fehler. Aber wenn der zweite genommen wird, wird er in n gespeichert und dann wird YES ausgedruckt (beim Debugging habe ich herausgefunden, dass er in n gespeichert wird, aber die Eingabe string überspringt und dann mit str und s vergleicht und YES ausgibt).

So kann jemand die Logik dahinter erklären.

public class Test1 { 
public static void main(String[] args) { 
    Scanner in=new Scanner(System.in); 
    //int n=Integer.parseInt(in.nextLine()); 
    int n=in.nextInt(); 
    while(n!=0){ 
    String s=""; 
    String str=in.nextLine(); 
    for(int i=str.length()-1;i>=0;i--){ 
     s=s+str.charAt(i); 
    } 
    if(str.equals(s)){ 
     System.out.println("YES"); 
    } 
    else{ 
     System.out.println("NO"); 
    } 
    n--; 
    } 
    }  
} 

Antwort

0

Ich denke, dass mit Scanner erwarten Sie den String überprüft werden ... in diesem Fall diese Linie int n=in.nextInt(); eine java.util.InputMismatchException Ausnahme auslösen, wenn die Eingabe keine Zahl ist.

würde die Überprüfung einfacher durch Verwendung StringBuilder, wie dies zu erreichen:

Scanner in=new Scanner(System.in); 
String original = in.nextLine(); 
StringBuilder reversa = new StringBuilder(original).reverse(); 
if (reversa.toString().equals(original)) { 
    System.out.println("YES");; 
} else { 
    System.out.println("NO");; 
}