ช่วยอธิบายโค้ด JAVA นี้ให้หน่อยครับ

กระทู้คำถาม
ผมเขียนโค้ดดังนี้ครับ

บรรทัด 1     import java.util.Scanner;
บรรทัด 2     public class Exercise1 {
บรรทัด 3         public static void main(String[] args) {
บรรทัด 4             Scanner inkey = new Scanner(System.in);        
บรรทัด 5             
บรรทัด 6             System.out.println("Enter ID : ");
บรรทัด 7             int id = inkey.nextInt();
บรรทัด 8             System.out.println("Enter Name : ");
บรรทัด 9             String name = inkey.nextLine();
บรรทัด 10           System.out.println("Enter Sale : ");
บรรทัด 11           double sale = inkey.nextDouble();
บรรทัด 12     
บรรทัด 13           System.out.println();
บรรทัด 14           System.out.println("ID : " +id);
บรรทัด 15           System.out.println("Name : " +name);
บรรทัด 16           System.out.println("Sale : " +sale);
บรรทัด 17        }   
บรรทัด 18    }

จากโค้ดแกรมเราต้องป้อนค่าให้ตัวแปร id, name, และ sale ตามลำดับ แต่ผลการรันโปรแกรมที่ได้ คือ

Enter ID :
123
Enter Name :
Enter Sale :
18000

ID : 123
Name :
Sale : 18000.0

ในส่วนของการป้อนค่า จะเห็นว่าบรรทัด Enter Name ซึ่งเป็นขั้นตอนที่เราต้องป้อนค่าให้ตัวแปร name มันไม่รอให้เราป้อนค่า
มันข้ามไปให้เราป้อนค่า sale เลย
และในส่วนของการแสดงผลมันก็ไม่แสดงค่า ของตัวแปร name ด้วย
ดูเหมือนโปรแกรมจะไม่ทำคำสั่ง String name = inkey.nextLine();

ทำไมถึงเป็นอย่างนี้ครับขอความกรุณาผู้รู้ช่วยอธิบายให้หน่อย
และถ้าต้องการแก้ไขโค้ดให้ถูกต้องเพื่อให้เราสามารถป้อนทั้งชื่อและนามสกุล (ป้อนคำ 2 คำ) ให้ตัวแปร name ได้เราต้องแก้ไปตรงไหนครับ
ช่วยอธิบายหน่อยครับ ขอบคุณครับ
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่