扫描仪出错

时间:2017-03-10 16:54:27

标签: java java.util.scanner

以下是回文程序。如果它是回文,它将打印YES否则NO。 我无法理解呼叫的不同之处:

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

> or int n=in.nextInt();

因为两人都在做同样的工作。 第一个是将String作为输入,然后将其转换为int 第二个是直接int

当第一个被采取时没有错误。 但是当第二个被拿到它然后它被存储在n然后它打印YES。(当调试时我发现它存储在n但是它跳过输入字符串str然后它与str和s比较并打印YES)。

所以任何人都可以解释这背后的逻辑。

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--;
    }
  }    
}

1 个答案:

答案 0 :(得分:0)

我想,对于Scanner,您希望验证字符串...在这种情况下,如果输入不是数字,则此行int n=in.nextInt();将抛出java.util.InputMismatchException异常。

使用StringBuilder更容易实现验证,如下所示:

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");;
}
相关问题