آخر

Mac 'String index خارج النطاق: 0' ... هل يمكن لأحد أن يخبرني ما هو الخطأ هنا؟ (جافا)

تشيس ر

ملصق أصلي
8 مايو 2008
PDX
  • 2 يونيو 2009
لقد انتهيت للتو من كتابة هذا البرنامج لصفي جافا. إنه برنامج بسيط يقوم بحساب تكلفة تركيب السياج. في النهاية ، يسألك 'هل ترغب في عمل تقدير آخر (نعم / لا)' ، ويفترض أن يختار المستخدم نعم أم لا. ومع ذلك ، بعد أن انتهيت من تشغيل خاصتي ، لن أحصل على هذا الخيار ، فهو يقول فقط:

حساب تقدير آخر (نعم / لا): استثناء في سلسلة المحادثات 'الرئيسية' java.lang.StringIndexOutOfBoundsException: فهرس السلسلة خارج النطاق: 0
في java.lang.String.charAt (String.java:558)
في Test1.main (Test1.java:73)

لماذا تفعل هذا !!!

هنا البرنامج بالمناسبة:

الكود: public class Test1 { public static void main( String[] args ) { String customer = ' '; String customerUC = ' '; String type1 = ' '; String type2 = ' '; char type = ' '; String another1 = ' '; char another = 'y'; int fence = 0; int count = 0; double costFoot = 0; double costTotal = 0; double costGrand = 0; Scanner read = new Scanner(System.in); System.out.print( ' ----------SIERRA FENCING COMPANY----------' ); while ( Character.toUpperCase(another) == 'Y' ) { System.out.print( ' Your Name: ' ); customer = read.nextLine(); customerUC = customer.toUpperCase(); System.out.print( ' New Installation (N) or Repair (R): ' ); type1 = read.nextLine(); type2 = type1.toUpperCase(); type = type2.charAt(0); System.out.print( ' Amount of Fencing Needed (linear feet): ' ); fence = read.nextInt(); System.out.print( ' Cost-Per-Foot of Fencing: ' ); costFoot = read.nextDouble(); if ( costFoot > 6 && type == 'N' ) { costFoot = 6; } else if ( costFoot > 5 && type == 'R' ) { costFoot = 5; } costTotal = fence * costFoot; costGrand += costTotal; count++; System.out.print( ' -------------------------------------------------------' ); System.out.print( ' Name: ' + customerUC ); System.out.print( ' Type: ' + type ); System.out.print( ' Linear Fencing: ' + fence + ' feet' ); System.out.print( ' Cost-Per-Foot: $' + costFoot ); System.out.print( ' Total: $' + costTotal ); System.out.print( ' -------------------------------------------------------' ); System.out.print( ' Calculate Another Estimate (Y/N): ' ); another1 = read.nextLine(); another = another1.charAt(0); } System.out.print( ' Grand Total: $' + costGrand ); System.out.print( ' You made ' + count + ' estimates' ); } }

ليتلودي 914

9 يونيو 2004


روتشستر ، نيويورك
  • 2 يونيو 2009
واو ، هذا صعب. لقد نجحت في العمل عن طريق تغيير 'read.nextLine () الأخير' إلى 'read.next ()' فقط ، لكنني سأبحث عن قرب لمعرفة سبب عدم نجاحها بالطريقة الأولى.

يحرر: يبدو أن له علاقة بطريقة nextLine () التي تدفع المؤشر إلى ما بعد السطر الحالي. لا أفهم ذلك كثيرًا بنفسي ، لكن هذه الروابط قد تساعد في توضيح بعض الالتباس:

ماسح API
مشاركة المنتدى ذات الصلة

HiRez

6 يناير 2004
غرب الولايات المتحدة
  • 2 يونيو 2009
سأخمن أن واحدة من الخاص بك السابق قراءة المكالمات تترك حرف السطر الجديد في المخزن المؤقت لإدخال لوحة المفاتيح. لذلك ، عند استدعاء nextLine () ، تحصل على سلسلة فارغة ، مما يؤدي إلى الاستثناء الذي يحاول فحص الحرف في الموضع 0 ، نظرًا لعدم وجود أي سلسلة. هذه أيضًا مشكلة في العديد من وظائف إدخال وحدة التحكم C. بطريقة ما ربما تريد مسح المخزن المؤقت أولاً بمكالمة قراءة وهمية أو شيء من هذا القبيل. لم أستخدم Java منذ فترة طويلة ، لذا لا أعرف ما هو الإجراء الصحيح بالضبط.

ابي ايدك 729

موقوف عن العمل
25 نوفمبر 2005
  • 2 يونيو 2009
قال Chase R: لقد انتهيت للتو من كتابة هذا البرنامج لفصلي java. إنه برنامج بسيط يقوم بحساب تكلفة تركيب السياج. في النهاية ، يسألك 'هل ترغب في عمل تقدير آخر (نعم / لا)' ، ويفترض أن يختار المستخدم نعم أم لا. ومع ذلك ، بعد أن انتهيت من تشغيل خاصتي ، لن أحصل على هذا الخيار ، فهو يقول فقط:

حساب تقدير آخر (نعم / لا): استثناء في سلسلة المحادثات 'الرئيسية' java.lang.StringIndexOutOfBoundsException: فهرس السلسلة خارج النطاق: 0
في java.lang.String.charAt (String.java:558)
في Test1.main (Test1.java:73)

لماذا تفعل هذا !!!

نظرًا لأن لديك الكود المصدري ، ربما في محرر برنامج يمكن إجراؤه لعرض أرقام الأسطر ، يجب أن تكون قادرًا على العثور على مكان السطر 73 في الملف Test1.main. سيظهر لك ذلك مكان حدوث المشكلة.

الآن لديك استثناء مفاده أن الفهرس 0 'خارج النطاق'. إذا قمت بالوصول إلى سلسلة بها حرف n ، فما هي المؤشرات الصالحة؟

الآن هل يمكنك إخبارنا في أي حالة بالضبط لا يعتبر الفهرس 0 فهرسًا صالحًا؟

لابد أن ذلك قد أجاب سؤالك.

سايلنت باندا

مشرف فخري
8 أكتوبر 2002
غابة الخيزران
  • 2 يونيو 2009
قال gnasher729: نظرًا لأن لديك شفرة المصدر ، ربما في محرر برنامج يمكن إجراؤه لعرض أرقام الأسطر ، يجب أن تكون قادرًا على العثور على مكان السطر 73 في الملف Test1.main. سيظهر لك ذلك مكان حدوث المشكلة.

الخط هو:

الكود: another1 = read.nextLine();
مباشرة بعد عرض 'احسب تقديرًا آخر (نعم / لا)':