Khác

Mac 'Chỉ mục chuỗi nằm ngoài phạm vi: 0' ... Ai đó có thể cho tôi biết có gì sai ở đây không? (Java)

Đuổi theo R

Áp phích gốc
Ngày 8 tháng 5 năm 2008
PDX
  • Ngày 2 tháng 6 năm 2009
Tôi vừa viết xong chương trình này cho lớp java của mình. Đó là một chương trình đơn giản tính toán chi phí để lắp đặt hàng rào. Ở phần cuối, nó hỏi 'bạn có muốn thực hiện một ước tính khác (Y / N)' và người dùng được cho là chọn có hoặc không. Tuy nhiên, sau khi tôi chạy xong, tôi sẽ không nhận được tùy chọn đó, nó chỉ nói:

Tính toán ước tính khác (Y / N): Ngoại lệ trong luồng 'main' java.lang.StringIndexOutOfBoundsException: Chỉ mục chuỗi nằm ngoài phạm vi: 0
tại java.lang.String.charAt (String.java:558)
tại Test1.main (Test1.java:73)

Tại sao nó làm điều này!!!

Nhân tiện đây là chương trình:

Mã: 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' ); } }

Littleodie914

Ngày 9 tháng 6 năm 2004


Rochester, NY
  • Ngày 2 tháng 6 năm 2009
Chà, thật là khó. Tôi đã làm cho nó hoạt động bằng cách thay đổi 'read.nextLine ()' cuối cùng của bạn thành 'read.next ()', nhưng tôi sẽ xem xét kỹ hơn một chút để xem tại sao nó không hoạt động theo cách đầu tiên.

Chỉnh sửa: Có vẻ như nó có liên quan gì đó đến phương thức nextLine () tiến con trỏ ra ngoài dòng hiện tại. Bản thân tôi cũng không hiểu lắm, nhưng những liên kết này có thể giúp giải tỏa một chút nhầm lẫn:

Máy quét API
Bài đăng trên diễn đàn liên quan

HiRez

Ngày 6 tháng 1 năm 2004
Tây Hoa Kỳ
  • Ngày 2 tháng 6 năm 2009
Tôi sẽ đoán rằng một trong những Trước cuộc gọi đọc đang để lại ký tự dòng mới trong bộ đệm nhập bàn phím. Do đó, khi bạn gọi nextLine (), bạn nhận được một chuỗi trống, dẫn đến ngoại lệ cố gắng kiểm tra ký tự ở vị trí 0, vì không có. Đây cũng là một vấn đề với nhiều hàm C đầu vào của bảng điều khiển. Bằng cách nào đó, bạn có thể muốn làm sạch bộ đệm trước bằng một cuộc gọi đọc giả hoặc một cái gì đó. Tôi đã không sử dụng Java trong một thời gian dài nên tôi không biết quy trình phù hợp sẽ chính xác là gì.

gnasher729

Cấm
Ngày 25 tháng 11 năm 2005
  • Ngày 2 tháng 6 năm 2009
Chase R cho biết: Tôi vừa viết xong chương trình này cho lớp java của mình. Đó là một chương trình đơn giản tính toán chi phí để lắp đặt hàng rào. Ở phần cuối, nó hỏi 'bạn có muốn thực hiện một ước tính khác (Y / N)' và người dùng được cho là chọn có hoặc không. Tuy nhiên, sau khi tôi chạy xong, tôi sẽ không nhận được tùy chọn đó, nó chỉ nói:

Tính toán ước tính khác (Y / N): Ngoại lệ trong luồng 'main' java.lang.StringIndexOutOfBoundsException: Chỉ mục chuỗi nằm ngoài phạm vi: 0
tại java.lang.String.charAt (String.java:558)
tại Test1.main (Test1.java:73)

Tại sao nó làm điều này!!!

Vì bạn có mã nguồn, có thể là trong một trình soạn thảo chương trình có thể được tạo để hiển thị số dòng, bạn sẽ có thể tìm thấy dòng 73 trong tệp Test1.main nằm ở đâu. Điều đó sẽ cho bạn thấy vấn đề xảy ra ở đâu.

Bây giờ bạn có một ngoại lệ cho biết chỉ số 0 là 'nằm ngoài phạm vi'. Nếu bạn truy cập một chuỗi có n ký tự, các chỉ số hợp lệ là gì?

Bây giờ bạn có thể cho chúng tôi biết chính xác trong trường hợp nào thì chỉ số 0 không phải là chỉ số hợp lệ không?

Điều đó sẽ trả lời câu hỏi của bạn.

SilentPanda

Người điều hành danh dự
8 tháng 10, 2002
Rừng tre
  • Ngày 2 tháng 6 năm 2009
gnasher729 đã nói: Vì bạn có mã nguồn, có thể là trong một trình soạn thảo chương trình có thể được tạo để hiển thị số dòng, bạn sẽ có thể tìm thấy dòng 73 trong tệp Test1.main nằm ở đâu. Điều đó sẽ cho bạn thấy vấn đề xảy ra ở đâu.

Dòng là:

Mã: another1 = read.nextLine();
ngay sau khi nó hiển thị 'Tính toán một ước tính khác (Y / N):'