นี่เป็นงานที่ฉันต้องทำ
ใครสามารถพาฉันไปในทิศทางที่ถูกต้องได้ไหม?
โปรแกรมคอมไพล์แต่ทำงานไม่ถูกต้อง
ข้อผิดพลาดคือข้อยกเว้น InputMissmatch
นี่เป็นงานที่ฉันต้องทำ
ใครสามารถพาฉันไปในทิศทางที่ถูกต้องได้ไหม?
โปรแกรมคอมไพล์แต่ทำงานไม่ถูกต้อง
ข้อผิดพลาดคือข้อยกเว้น InputMissmatch
ปัญหาของคุณคือคุณกำลังป้อนตัวอักษรลงในช่องลอย ในโปรแกรมของคุณ คุณขอให้ผู้ใช้ป้อนโฟลต:
A = hope.nextFloat();
แต่ถ้าคุณป้อนตัวอักษร "A" คุณจะได้รับข้อยกเว้นเนื่องจาก "A" ไม่ใช่ทศนิยม แต่เป็นสตริง
วิธีที่ง่ายกว่าในการแก้ปัญหาของคุณคือแทนที่จะต้องมีช่องตัวเลือกทั้งหมด คุณเพียงแค่อ่านอินพุตที่ผู้ใช้ป้อนจากเครื่องสแกน เช่น:
String choice = hope.next();
ถัดไปในคำสั่ง if คุณจะตรวจสอบว่าค่าจากตัวเลือกสตริงเท่ากับตัวอักษรที่ระบุหรือไม่ เป็นต้น
if (choice.equals("A")) {
number4 = (number1 + number2 + number3);
System.out.printf("Your results are:" + (number4));
}
และคุณสามารถทำสิ่งเดียวกันกับตัวเลือกอื่นๆ ที่คุณมีได้
ข้อผิดพลาดที่คุณได้รับหมายความว่าคุณกำลังพยายามใช้ข้อมูลบางประเภทเป็นข้อมูลอื่น ในกรณีของคุณ คุณอาจพยายามใช้ String เป็นแบบทศนิยม
เมื่อใช้วิธีการ ถัดไป ในคลาส Scanner คุณควรตรวจสอบให้แน่ใจก่อนว่ามีอินพุตที่เหมาะสมจากผู้ใช้
ในการทำเช่นนั้น คุณต้องใช้เมธอด has
ปัญหาของคุณคือคุณไม่ได้ตรวจสอบว่าอินพุตนั้นลอยถูกต้องหรือไม่ก่อนที่จะใช้ Scanner.nextFloat();
คุณควรทำสิ่งนี้:
if (hope.hasNextFloat())
{
// Code to execute when you have a proper float,
// which you can retrieve with hope.nextFloat()
}
else
{
// Code to execute when the user input is not a float
// Here you should treat it properly, maybe asking for new input
}
นั่นควรจะเพียงพอที่จะชี้ให้คุณไปในทิศทางที่ถูกต้อง
นอกจากนี้ โปรดตรวจสอบเอกสารประกอบ API ของ Scanner เพื่อดูข้อมูลเพิ่มเติม รายละเอียด.
แก้ไข
นอกจากนี้ คุณกำลังขอให้ผู้ใช้ป้อนอักขระ (หรือสตริง): "A", "B" ฯลฯ... แต่คุณกำลังพยายามเปรียบเทียบกับทศนิยม ไม่ถูกต้อง คุณควรเปรียบเทียบกับสตริงหรืออักขระ เช่นนี้
if (hope.hasNextString())
{
if (hope.nextString().equals("A"))
{
// Code for option "A"
}
else if (hope.nextString().equals("B"))
{
// Code for option "B"
}
else ...
}
คุณสามารถใช้สวิตช์ที่นั่นได้ แต่ดูเหมือนว่าคุณจะยังไม่คุ้นเคยกับ java มากนัก ดังนั้นฉันจะทิ้งไว้อีกครั้ง