[Help]Gặp vấn đề về Scanner .nextLine

TruongVanHoc

New Member
8/10/15
10
0
1
29
Mình đang làm 1 bài tập về xét một chuỗi có phải là chuỗi Palindrome không. Và họ yêu cầu không dùng StringBuilder. Mình làm như thế này

Code:
public class NoStringBuilder {
    private String a;
    private Scanner input = new Scanner(System.in);

    private String nhapString(){
        System.out.print("Nhap String:");
        return input.nextLine();
    }

    private boolean checkPalindrome(String string){
        String temp= new String("");
        for (int i = string.length()-1;i>=0;i--){
            temp=temp+string.charAt(i);
        }
        if (string.compareTo(temp)==0){
            return true;
        }else {
            return false;
        }
    }

    private void showKetQua(boolean answer){
        if (answer==true){
            System.out.println("Palindrome");
        }else {
            System.out.println("Not Palindrome");
        }
    }

    protected void chuongTrinh(){
        boolean palindrome;
        char answer='Y';
        while (answer=='Y'||answer=='y'){
            a=new String(nhapString());
            palindrome = checkPalindrome(a);
            showKetQua(palindrome);
            System.out.print("Tiep tuc? Y/N: ");
            answer = input.next().charAt(0);
        }
        System.out.println("Bye bye");
    }
}
Nhưng kết quả toàn bị thế này:
Code:
Nhap String:ABC
Not Palindrome
Tiep tuc? Y/N: Y
Nhap String:Palindrome
Tiep tuc? Y/N: Y
Nhap String:Palindrome
Tiep tuc? Y/N:
Lần đầu thì không sao, nhưng những lần sau nó không cho mình nhập String nữa mà tự động cho là mình ko nhập gì hết mà Enter luôn. Nếu đổi nextLine() ở method nhapString() thành next() thì không bị như trên nhưng nó sẽ có vấn đề nếu khi nhập String có khoảng trắng nên mình mới dùng nextLine()
[Dùng next()]
Code:
Nhap String:acs
Not Palindrome
Tiep tuc? Y/N: y
Nhap String:a b a
Palindrome
Tiep tuc? Y/N: Bye bye
Cho hỏi là code mình gặp vấn đề gì vậy? Mình muốn chuỗi nhập vào 2 chữ vẫn có thể check được (Vd: Hello World) thì phải làm thế nào? Cám ơn
 

nhan

New Member
9/10/15
1
1
0
27
Code:
public void chuongTrinh() {
        boolean palindrome;
        String answer = "Y";
        char exit = 'Y';
        while (exit == 'Y' || exit == 'y') {
            a = nhapString();
            palindrome = checkPalindrome(a);
            showKetQua(palindrome);
            System.out.print("Tiep tuc? Y/N: ");
            answer = input.nextLine();
            exit = answer.charAt(0);
        }
        System.out.println("Bye bye");
    }
Bạn dùng next.charAt(0) thì nó sẽ chỉ lấy 1 ký tự và vòng sau nhapString() sẽ đọc nốt các ký tự còn lại nên xảy ra lỗi như vậy. Để nhập kết thúc bằng Enter nên dùng NextLine().
VD: Nhập: y+ Enter thì
answer = input.next().charAt(0); lấy được chữ y và nhapString sẽ có input là Enter
 
  • Like
Reactions: TruongVanHoc