Java 获取StringIndexOutOfBoundsException
这是我的代码:Java 获取StringIndexOutOfBoundsException,java,arraylist,Java,Arraylist,这是我的代码: //Ticket parent class import java.util.ArrayList; import java.util.Scanner; import java.io.*; public class Ticket { public Ticket() {
//Ticket parent class
import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;
public class Ticket
{
public Ticket()
{
seatArray = new ArrayList<TicketObject>();
}
public void loadIn()
{
//generic seating for plays and concerts
seatArray.add(new TicketObject("A1", 40));
seatArray.add(new TicketObject("A2", 40));
seatArray.add(new TicketObject("A3", 40));
seatArray.add(new TicketObject("A4", 40));
seatArray.add(new TicketObject("A5", 40));
seatArray.add(new TicketObject("B1", 35));
seatArray.add(new TicketObject("B2", 35));
seatArray.add(new TicketObject("B3", 35));
seatArray.add(new TicketObject("B4", 35));
seatArray.add(new TicketObject("B5", 35));
}
public String getSeats(int x)
{
return seatArray.get(x).getName() + " $" + seatArray.get(x).getPrice();
}
protected ArrayList<TicketObject> seatArray;
}
//Concert ticket child class
import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;
public class ConcertTicket extends Ticket
{
public ConcertTicket()
{
super();
}
public void loadIn()
{
super.loadIn();
//Special option for concerts
seatArray.add(new TicketObject("Backstage Pass", 100));
seatArray.add(new TicketObject("Backstage Pass", 100));
seatArray.add(new TicketObject("Backstage Pass", 100));
seatArray.add(new TicketObject("Backstage Pass", 100));
seatArray.add(new TicketObject("Backstage Pass", 100));
}
}
//Play ticket child class
import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;
public class PlayTicket extends Ticket
{
public PlayTicket()
{
super();
}
public void loadIn()
{
super.loadIn();
//Specialized seating for plays
seatArray.add(new TicketObject("Box 1", 150));
seatArray.add(new TicketObject("Box 2", 150));
seatArray.add(new TicketObject("Box 3", 150));
seatArray.add(new TicketObject("Box 4", 150));
seatArray.add(new TicketObject("Box 5", 150));
}
}
//Ticket object for each seat; also used to populate array
public class TicketObject
{
public TicketObject(String inSeatName, int inSeatPrice)
{
seatName = inSeatName;
seatPrice = inSeatPrice;
}
public String getName()
{
return seatName;
}
public int getPrice()
{
return seatPrice;
}
private String seatName;
private int seatPrice;
}
//Price calculation class
public class Calculations
{
public static double addTax(int total)
{
return total * 1.07;
}
}
//Tester class
import java.util.Scanner;
public class TicketTester
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
try {
//Introduction for user
System.out.println("Welcome to the ticket purchasing program!");
System.out.println("You will be able to purchase either a concert or play ticket");
System.out.println("\n");
System.out.println("Type concert or play to display available seats and deals");
running = true;
//Displaying tickets of either a concert or play
String answer = in.next();
if (answer.equalsIgnoreCase("Concert"))
{
ConcertTicket journeyConcert = new ConcertTicket();
journeyConcert.loadIn();
System.out.println("Seat Price");
for(int i=0;i<15;i++)
{
System.out.println(journeyConcert.getSeats(i));
}
System.out.println("\n");
System.out.println("Type in a seat name/option and press enter to reserve it.");
System.out.println("Type purchase and press enter to finalize your ticket purchase");
}
else if(answer.equalsIgnoreCase("Play"))
{
PlayTicket catsPlay = new PlayTicket();
catsPlay.loadIn();
System.out.println("Seat Price");
for(int i=0;i<15;i++)
{
System.out.println(catsPlay.getSeats(i));
}
System.out.println("\n");
System.out.println("Type in a seat name/option and press enter to reserve it.");
System.out.println("Type purchase and press enter to finalize your ticket purchase");
}
else
System.out.println("Enter a valid input");
//Adding up chosen seat numbers and costs
while(running)
{
String seatChoice = in.next();
if ((seatChoice.substring(0,1)).equalsIgnoreCase("A") && seatChoice.length() == 2)
{
total = total + 40;
seats = seats + 1;
}
else if ((seatChoice.substring(0,1)).equalsIgnoreCase("B")&& seatChoice.length() == 2)
{
total = total + 35;
seats = seats + 1;
}
else if ((seatChoice.substring(0,3)).equalsIgnoreCase("Box")&& seatChoice.length() == 5)
{
total = total + 150;
seats = seats + 1;
}
else if ((seatChoice.substring(0,14)).equalsIgnoreCase("Backstage Pass") && seatChoice.length() == 14)
{
total = total + 100;
seats = seats + 1;
}
else if (seatChoice.equalsIgnoreCase("Purchase"))
{
System.out.println("You reserved " + seats + " seats at a price of $" + Calculations.addTax(total));
running = false;
}
else
System.out.println("Enter a valid input");
}
}
finally {
if(in!=null)
in.close();
}
}
private static Boolean running;
private static int total = 0;
private static int seats = 0;
}
从这一点我可以看到错误发生在下面的一行,但我不知道如何解决它
else if ((seatChoice.substring(0,13)).equalsIgnoreCase("Backstage Pass") && seatChoice.length() == 14)
&&
从左到右计算语句。因此子字符串(0,13)
可以在小于14个符号的字符串上调用,从而导致异常。您可以通过交换长度和相等性检查来修复它:
if (seatChoice.length() == 14 && (seatChoice.substring(0, 13)).equalsIgnoreCase("Backstage Pass"))
但是,如果您检查了length()
为14,则取子字符串是没有意义的,因此您可以将其重写为:
if (seatChoice.equalsIgnoreCase("Backstage Pass"))
天哪,我们真的需要那么多代码来理解你的问题吗?你应该先检查长度,然后检查子字符串。非常感谢,这解决了我的问题。
if (seatChoice.equalsIgnoreCase("Backstage Pass"))