โปรแกรมคอมไพล์แต่ไม่ทำงาน

นี่เป็นงานที่ฉันต้องทำ

ใครสามารถพาฉันไปในทิศทางที่ถูกต้องได้ไหม?

โปรแกรมคอมไพล์แต่ทำงานไม่ถูกต้อง

ข้อผิดพลาดคือข้อยกเว้น InputMissmatch


person TitanC    schedule 08.03.2013    source แหล่งที่มา
comment
ข้อผิดพลาดคือข้อยกเว้น InputMissmatch =› ข้อยกเว้นควรนำคุณไปยังบรรทัดที่ส่งข้อยกเว้น นั่นจะช่วยให้คุณจำกัดขอบเขตการสอบสวนให้แคบลงได้   -  person assylias    schedule 08.03.2013
comment
คุณกำลังป้อนข้อมูลอะไร? คุณกำลังป้อนข้อมูลเป็น A, B, C หรือ 0,1,2 ฯลฯ หรือไม่?   -  person Pradeep Simha    schedule 08.03.2013
comment
ตอนนี้เป็นเวลาที่ดีที่จะทำความคุ้นเคยกับโปรแกรมดีบักเกอร์ของคุณ   -  person radai    schedule 08.03.2013
comment
หากคุณได้รับ InputMissmatch โดยไม่อ่านโค้ด นั่นหมายความว่าคุณกำลังป้อนบางอย่างจากแป้นพิมพ์ซึ่งแตกต่างจากประเภทของตัวแปรที่คุณกำลังป้อนข้อมูล ตัวอย่างเช่น การป้อนอักขระในฟิลด์ int   -  person Kakalokia    schedule 08.03.2013
comment
ฉันกำลังพยายามให้ผู้ใช้ป้อน A,S,M,D,O หรือ E เป็นตัวเลือก จากนั้นคำสั่ง if ควรจะจัดการส่วนที่เหลือหรือไม่   -  person TitanC    schedule 08.03.2013
comment
ตอนนี้เป็นเวลาที่ดีที่จะทำความคุ้นเคยกับปัจจัยพื้นฐานต่างๆ   -  person Evan Knowles    schedule 08.03.2013
comment
คำแนะนำ: คุณกำลังขอให้ผู้ใช้ป้อนตัวอักษร แต่การกำหนดตัวแปรแรกของคุณจากเครื่องสแกนกำลังกำหนดให้กับประเภททศนิยม   -  person tymeJV    schedule 08.03.2013
comment
หากคุณต้องการให้ผู้ใช้กรอกตัวอักษรที่คุณกล่าวถึงให้เปลี่ยนจากแบบลอยเป็นประเภทที่รับตัวอักษรเช่น String   -  person Kakalokia    schedule 08.03.2013
comment
คุณขอให้ผู้ใช้ป้อนตัวอักษรและอ่านตัวอักษรโดยใช้ nextFloat() ไม่ชัดเจนว่ามันจะนำไปสู่ข้อยกเว้นใช่หรือไม่   -  person JB Nizet    schedule 08.03.2013
comment
ฉันยังคงเรียน Java อย่างเต็มที่ ดังนั้นขออภัยด้วย   -  person TitanC    schedule 08.03.2013
comment
นอกจากนี้ - อาจแค่รับอินพุตเดียวและตรวจสอบว่าเป็นอินพุตใด แทนที่จะรับตัวแปรเหล่านี้ทั้งหมดที่กำหนด   -  person bjedrzejewski    schedule 08.03.2013
comment
คุณควรทำการวินิจฉัยเพิ่มเติมอีกเล็กน้อยสำหรับคำถามประเภทนี้ ให้ร่องรอยสแต็กทั้งหมดของข้อยกเว้นแก่เรา และบอกเราว่าค่าของตัวแปรต่างๆ ณ จุดที่มันเกิดขึ้นนั้นมีค่าเท่าใด รวมถึงค่าอินพุตที่กำลังประมวลผลคืออะไร   -  person millimoose    schedule 08.03.2013
comment
นอกจากนี้ ให้พิจารณาลดความซับซ้อนของตัวอย่างโค้ดเพื่อแยกข้อผิดพลาดของคุณ เช่น. ลองลบโค้ดทั้งหมดออกจนกว่าคุณจะมีสิ่งที่จำเป็นในการสร้างข้อผิดพลาดสำหรับอินพุตที่กำหนด   -  person millimoose    schedule 08.03.2013
comment
โอเค ขอบคุณสำหรับคำแนะนำและคำแนะนำทั้งหมด ฉันกำลังทำมันอยู่.   -  person TitanC    schedule 08.03.2013


คำตอบ (2)


ปัญหาของคุณคือคุณกำลังป้อนตัวอักษรลงในช่องลอย ในโปรแกรมของคุณ คุณขอให้ผู้ใช้ป้อนโฟลต:

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));
    } 

และคุณสามารถทำสิ่งเดียวกันกับตัวเลือกอื่นๆ ที่คุณมีได้

person Kakalokia    schedule 08.03.2013
comment
ฉันทำสิ่งนี้และแก้ไขโค้ด โปรแกรมใช้งานได้ดีในขณะนี้ การแก้ไขง่ายๆ ที่ฉันควรจะตระหนักจริงๆ ฉันยังคงเรียนรู้และคิดมากเกี่ยวกับสิ่งที่ฉันต้องทำ ขอบคุณ - person TitanC; 08.03.2013

ข้อผิดพลาดที่คุณได้รับหมายความว่าคุณกำลังพยายามใช้ข้อมูลบางประเภทเป็นข้อมูลอื่น ในกรณีของคุณ คุณอาจพยายามใช้ 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 มากนัก ดังนั้นฉันจะทิ้งไว้อีกครั้ง

person Héctor Luaces Novo    schedule 08.03.2013