如何调试java.lang.StringIndexOutOfBoundsException:字符串索引超出范围错误?



我对Java编程非常陌生,并且在学校作业中遇到了障碍。我的程序在JGRASP中工作,不会产生任何错误。我得到了所有正确的输出。但是当我提交作业时,我收到以下错误。我不知道出了什么问题。

运行 SpaceTicket 程序时发生运行时错误: java.lang.StringIndexOutOfBoundsException: String index 超出范围: -23.请在家测试您的程序并在重新提交之前修复错误。(2次出现(

所需的输入应该是:

12579500s15300701209817DSpaceX-001 地球到火星

法典:

import java.util.Scanner;
import java.text.DecimalFormat;
import java.util.Random;

public class SpaceTicket
{

static final double STUDENT_DISCOUNT = 0.25;
static final double CHILD_DISCOUNT = 0.35;

public static void main(String[] args)
{
Scanner userInput = new Scanner(System.in);
String ticketCode = "";
String price = "";
String spaceTicket = "";
double priceParse = 0;
double cost = 0;
int ranNum = 0;

System.out.print("Enter ticket code: ");
ticketCode = userInput.nextLine();
ticketCode = ticketCode.trim();
if (ticketCode.length() < 25) {
System.out.println("*** Invalid ticket code ***");
System.out.println("Ticket code must have at least 25 
characters.");
}
else {
price = ticketCode.substring(0, 6);
priceParse = Double.parseDouble(price);

if (ticketCode.charAt(8) == 's') {
cost = priceParse - (priceParse * STUDENT_DISCOUNT);
}
else if (ticketCode.charAt(8) == 'c') {
cost = priceParse - (priceParse * CHILD_DISCOUNT);
}
else {
cost = priceParse;
}
}

spaceTicket = ticketCode.substring(24, ticketCode.length());
System.out.println("Space Ticket: " + spaceTicket);
System.out.println("");
System.out.println("Date: " + ticketCode.substring(13, 15) + "/"
+ ticketCode.substring(15, 17) + "/" + ticketCode.substring(17, 
21)
+ "   Time: " + ticketCode.substring(9, 11) + ":"
+ ticketCode.substring(11, 13) + "   Seat: "
+ ticketCode.substring(21, 24));
DecimalFormat df = new DecimalFormat("$#,##0.00");
priceParse = Double.parseDouble(price);   
System.out.println("Price: " + df.format(priceParse)
+ "   Category: " + ticketCode.charAt(8)
+ "   Cost: " + df.format(cost));
Random generator = new Random();
ranNum = generator.nextInt(999999) + 1;
System.out.print("Prize Number: " + ranNum);

}
}

您的错误基于子字符串方法。在调用 ticketCode.substring 方法之前,您可以控制票证代码的长度。如果 ticketCode 的长度小于 24,则会出现以下错误:字符串索引超出范围:-23

如果ticketCode.length() < 25,请停止程序

if (ticketCode.length() < 25) {
System.out.println("*** Invalid ticket code ***");
System.out.println("Ticket code must have at least 25 
characters.");
return;
}

否则声明

spaceTicket = ticketCode.substring(24, ticketCode.length());

throwsexception

在您的情况下,票证长度为 1,因此称为ticketCode.substring(24,1);

最新更新