我对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());
throws
exception
在您的情况下,票证长度为 1,因此称为ticketCode.substring(24,1);