2011-10-30 33 views
12

Trong phương pháp một chương trình hiện tại của tôi yêu cầu người dùng nhập mô tả sản phẩm làm đầu vào String. Tuy nhiên, khi sau này tôi cố gắng in ra thông tin này, chỉ từ đầu tiên của các chương trình String. Điều gì có thể là nguyên nhân của việc này? Phương pháp của tôi là như sau:Máy quét chỉ đọc từ đầu tiên thay vì dòng

void setDescription(Product aProduct) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Describe the product: "); 
    String productDescription = input.next(); 
    aProduct.description = productDescription; 
} 

Vì vậy, nếu người dùng nhập vào là "nước ngọt sủi với hương vị cam", các System.out.print sẽ chỉ mang lại "Lấp lánh".

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

27

Thay next() với nextLine():

String productDescription = input.nextLine(); 
+5

Bạn đánh bại tôi, 8 giây +1 –

+0

Tuyệt vời. Cảm ơn rất nhiều! Điều này làm việc :) – Kristian

8

Sử dụng input.nextLine(); thay vì input.next();

+0

Cảm ơn. Điều này làm việc như một say mê :) – Kristian

3

Các javadocs for Scanner trả lời câu hỏi của bạn

A Scanner phá vỡ đầu vào của nó vào thẻ sử dụng một mô hình delimiter, mà theo mặc định khớp với khoảng trắng.

Bạn có thể thay đổi mô hình khoảng trắng mặc định Scanner đang sử dụng bằng cách làm một cái gì đó giống như

Scanner s = new Scanner(); 
s.useDelimiter("\n"); 
+2

Tại sao lộn xộn với điều đó khi nextLine() được viết riêng cho tình huống này và giải quyết tất cả gọn gàng? –

1

input.next() có trong từ whitsepace phân định đầu tiên của chuỗi đầu vào. Vì vậy, bằng cách thiết kế nó làm những gì bạn đã mô tả. Hãy thử input.nextLine().

+0

Cảm ơn rất nhiều! Nó hoạt động ngay bây giờ :) – Kristian

1

Javadoc để giải cứu:

A Scanner phá vỡ đầu vào của nó vào thẻ sử dụng một mô hình delimiter, mà theo mặc định phù hợp với khoảng trắng

nextLine có lẽ là phương pháp mà bạn nên sử dụng.

Các vấn đề liên quan