วิธีใส่อินพุตในบรรทัดถัดไปในยูทิลิตี้ Scanner ของ Java

ฉันมีคำถามเกี่ยวกับจาวาพื้นฐานเกี่ยวกับยูทิลิตี้สแกนเนอร์ สมมติว่าฉันมีโปรแกรมง่ายๆ ที่รับอินพุตของผู้ใช้และจัดเก็บไว้ในตัวแปร คำถามของฉันคือเมื่อฉันรันโปรแกรมที่ถามอินพุตหลายอินพุต เคอร์เซอร์จะเริ่มต้นที่จุดเริ่มต้นของคำถาม ไม่ใช่หลังจากนั้น รหัสของฉันคือ:

public class question3 {

    public static void main(String[] args){

       Scanner s = new Scanner(System.in);
       System.out.println("Enter the first number:");
       Float a = s.nextFloat();
       System.out.println("Enter the second number:");
       Float b = s.nextFloat();
       System.out.println("Sum = " + (a+b));
       System.out.println("Difference = " + (a-b));
       System.out.println("Product = " + (a*b));


       }
}

เมื่อฉันรันโปรแกรมนี้ มันจะดูเหมือน Enter First Number จากนั้นฉันพิมพ์ตัวเลข จากนั้น |Enter Second Number "|" หมายถึงตำแหน่งที่เคอร์เซอร์กะพริบอยู่ เมื่อฉันพิมพ์มันจะปรากฏขึ้นข้างใต้ แต่อาจทำให้ผู้ใช้สับสนได้ ฉันจึงสงสัยว่าวิธีแก้ปัญหาจะเป็นอย่างไร

ป้อนคำอธิบายรูปภาพที่นี่

มันเป็นปัญหา IDE เนื่องจากไม่มีอะไรผิดปกติกับโค้ด


person VrnRap    schedule 12.09.2013    source แหล่งที่มา
comment
มันเป็นปัญหากับ IDE โปรแกรมของคุณดูสมบูรณ์แบบ การเพิ่ม \n อาจอาจทำให้ดีขึ้น แต่การกะพริบของเคอร์เซอร์เป็นเรื่องของ IDE   -  person VictorCreator    schedule 12.09.2013
comment
@Vijairam ฉันคิดว่ามันเป็น ฉันไม่เห็นปัญหาหรือวิธีแก้ไขอื่นใด ขอบคุณ.   -  person VrnRap    schedule 12.09.2013


คำตอบ (3)


แทนที่จะเป็น println(String) ก่อนแต่ละอินพุต ให้เปลี่ยนเป็น print(String) ดังนั้นมันจะมีลักษณะดังนี้:

public class question3{

    public static void main(String[] args){

        Scanner s = new Scanner(System.in);
        System.out.print("Enter the first number:");
        Float a = s.nextFloat();
        System.out.print("Enter the second number:");
        Float b = s.nextFloat();
        System.out.println("Sum = " + (a+b));
        System.out.println("Difference = " + (a-b));
        System.out.println("Product = " + (a*b));


    }
}

นอกจากนี้ โปรดทราบว่าคุณควรใช้รูปแบบการตั้งชื่อที่เหมาะสม/เหมาะสมสำหรับตัวแปรของคุณ เช่นเดียวกับ Scanner ของคุณ คุณควรเรียกมันว่า reader หรือ input; สิ่งที่แสดงถึงหน้าที่ของมัน แนวคิดเดียวกันนี้ใช้กับตัวแปรที่เหลือของคุณ นอกจากนี้ชื่อชั้นเรียนยังขึ้นต้นด้วยตัวพิมพ์ใหญ่

นี่คือผลลัพธ์ที่เสร็จสิ้นแล้ว:

ป้อนคำอธิบายรูปภาพที่นี่

person Josh M    schedule 12.09.2013
comment
ทำ s.nextFloat(); สร้างบรรทัดใหม่ให้คุณเหรอ? - person ug_; 12.09.2013
comment
@ ns47731 เมื่อพิจารณาจากภาพ (โดยใช้ IntelliJ) มันก็จะเป็นเช่นนั้น - person Josh M; 12.09.2013
comment
@JoshM ขอบคุณสำหรับการตอบกลับของคุณ แต่ดูเหมือนว่าปัญหาของฉันจะเกิดขึ้นกับเคอร์เซอร์กะพริบ โปรแกรมวางตัวเลขในตำแหน่งที่ถูกต้อง แต่ในจอแสดงผลจะแสดงเคอร์เซอร์กะพริบที่จุดเริ่มต้นของคำถาม คุณนึกภาพออกไหม? หรือฉันควรจะถ่ายรูปมันไว้ดี? - person VrnRap; 12.09.2013
comment
@VrnRap ฉันคิดว่ามันขึ้นอยู่กับ IDE ที่คุณใช้อยู่จริงๆ แน่นอน อัปเดตคำถามของคุณด้วยรูปภาพ ดูเหมือนว่าคุณกำลังใช้ Dr. Java ซึ่งในกรณีนี้ฉันเชื่อว่าคุณเพียงแค่คลิกไปยังตำแหน่งที่อินพุตปกติจะเป็นและเครื่องหมายรูปหมวกจะย้ายไปที่นั่น - person Josh M; 12.09.2013
comment
@JoshM มันจะย้ายไปยังตำแหน่งที่ถูกต้องเมื่อฉันกดหรือพิมพ์เพียงแค่สิ่งที่มองเห็น ฉันคิดว่ามันไม่ใช่เรื่องใหญ่อะไร - person VrnRap; 12.09.2013

System.out.println พิมพ์สตริงแล้วขึ้นบรรทัดใหม่ ดังนั้นอินพุตของคุณจึงถูกวางไว้บนบรรทัดใหม่ ลองอ่านดูครับ

System.out.print("Enter the first number:");
Float a = s.nextFloat();
System.out.println();
System.out.print("Enter the second number:");
Float b = s.nextFloat();
System.out.println();
person ug_    schedule 12.09.2013
comment
มันเป็นปัญหาเดียวกันโดยพื้นฐานแล้วเพราะไม่ใช่ปัญหาของโปรแกรม อาจเป็นเพราะ Eclipse ฉันไม่รู้ แต่เคอร์เซอร์ยังคงกะพริบอยู่ในจุดอื่นและไม่ใช่ตำแหน่งที่ควรอยู่ - person VrnRap; 12.09.2013

วิธีนี้สามารถช่วยคุณประหยัดเวลาได้ไม่กี่วินาทีโดยพิมพ์สองสามบรรทัด:

System.out.print("Enter the first number:");
Float a = s.nextFloat();
System.out.print("\nEnter the second number:");
Float b = s.nextFloat();
System.out.println("\nSum = " + (a+b)
                   +"\nDifference = " + (a-b)
                   +"\nProduct = " + (a*b));
person LeandreM    schedule 12.09.2013