- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
(26 个回答)
2年前关闭。
我一直坚持让我的程序工作无数个小时,就像我认为我已经完成了所有工作一样,它提出了 ArrayIndexOutOfBounds。我不明白为什么会发生这种情况,因为它只发生在第一个循环 0 0 上。循环本质上是查看一组对象,然后查看每个对象是否被保留(寻找一个开放的飞机座位)。我将发布很多代码,因为我的很多项目都链接到其他类。
当我启动 TrainSeatBookingApplication 时,我按 p、m、f、s 的顺序回答问题。因此,请使用该命令进行调试,因为我还没有完全完成我所知道的其他结果。
火车座位预订申请:
package exercises;
import java.util.Scanner;
public class TrainSeatBookingApplication {
public static void main(String[] args) {
SeatType theSeatType;
FloorGrid floorType;
TrainWay aTrainWay = null;
TrainSmart aTrainSmart = null;
Seat customerSeat;
Seat trainSeats;
char planeSizeChoice;
char seatingArea;
char seatEconomyOrFirst;
char programBookingChoice;
Scanner scan = new Scanner(System.in);
System.out.println("Would you like to board a petite floor sized plane or a grande floor sized plane?");
planeSizeChoice = Character.toLowerCase(scan.next().charAt(0));
if (planeSizeChoice == 'p') {
floorType = new PetiteFloorGrid();
floorType.initialiseFloorGrid();
System.out.println("Would you like to be in the middle, window or asile?");
seatingArea= Character.toUpperCase(scan.next().charAt(0));
if (seatingArea == 'M') {
theSeatType = SeatType.MIDDLE;
}
else if (seatingArea == 'A') {
theSeatType = SeatType.AISLE;
}
else {
theSeatType = SeatType.WINDOW;
}
System.out.println("Would you like to be seated in first class or economy class?");
seatEconomyOrFirst = Character.toUpperCase(scan.next().charAt(0));
System.out.println("Would you like your seat to be booked via the smart program or the way program?");
programBookingChoice = Character.toUpperCase(scan.next().charAt(0));
if (seatEconomyOrFirst == 'F') {
if (programBookingChoice == 'S') {
customerSeat = floorType.queryAvailableFirstClassSeat(theSeatType);
aTrainSmart.reserveFirstClass(planeSizeChoice, theSeatType);
System.out.println(floorType);
}
else {
customerSeat = floorType.queryAvailableFirstClassSeat(theSeatType);
aTrainWay.reserveFirstClass(planeSizeChoice, theSeatType);
System.out.println(floorType);
}
}
else {
}
}
else {
floorType = new GrandeFloorGrid();
floorType.initialiseFloorGrid();
System.out.println("Would you like to be in the middle, window or asile?");
seatingArea= Character.toUpperCase(scan.next().charAt(0));
if (seatingArea == 'M') {
theSeatType = SeatType.MIDDLE;
}
else if (seatingArea == 'A') {
theSeatType = SeatType.AISLE;
}
else {
theSeatType = SeatType.WINDOW;
}
System.out.println("Would you like to be seated in first class or middle class?");
seatEconomyOrFirst = Character.toUpperCase(scan.next().charAt(0));
System.out.println("Would you like your seat to be booked via the smart program or the way program?");
programBookingChoice = Character.toUpperCase(scan.next().charAt(0));
//System.out.println("Did not reach start of if");//testing program
if (seatEconomyOrFirst == 'F') {
if (programBookingChoice == 'S') {
customerSeat = new Seat();
customerSeat = floorType.queryAvailableFirstClassSeat(theSeatType);
aTrainSmart.reserveFirstClass(planeSizeChoice, theSeatType);
System.out.println(floorType);
}
else {
customerSeat = aTrainWay.reserveFirstClass(planeSizeChoice, SeatType.MIDDLE);
System.out.println(floorType);
}
//System.out.println("Did not go through either if or else");//testing program
}
}
}
}
package exercises;
abstract class FloorGrid {
protected Seat[][] seat;
protected int nRows;
protected int nColumns;
protected int nFirstClassRows;
abstract protected void initialiseFloorGrid();
public Seat getLeft(Seat seatx)
{
int column = seatx.getSeatPosition().getColumn();
int row = seatx.getSeatPosition().getRow();
column = column - 1;
if (seat[column + 1][row].getSeatType() == seat[column][row].getSeatType()) {
return seat[column][row];
}
else {
return null;
}
}
public Seat getRight(Seat seatx)
{
int column = seatx.getSeatPosition().getColumn();
int row = seatx.getSeatPosition().getRow();
column = column + 1;
if (seat[column - 1][row].getSeatType() == seat[column][row].getSeatType()) {
return seat[column][row];
}
else {
return null;
}
}
ublic Seat queryAvailableFirstClassSeat(SeatType seatx)
{
boolean found = false;
int row;
int column;
int xMax = nRows + nFirstClassRows;
int yMax = nColumns;
seat = new Seat[xMax][yMax];
for (int x = 0; x < xMax; x++) {
for (int y = 0; y < yMax; y++) {
seat = new Seat[x][y];
if (seatx.getSpecificSeatType() == 2) /*2 is middle*/ {
if (!seat[x][y].isReserved()) {
if (seat[x][y].getFirstClass()) {
found = true;
column = seat[x][y].getSeatPosition().getColumn();
row = seat[x][y].getSeatPosition().getRow();
return seat[x][y];
}
}
}
else if(seatx.getSpecificSeatType() == 3) { //3 is windows
if (!seat[x][y].isReserved()) {
if (seat[x][y].getFirstClass()) {
found = true;
column = seat[x][y].getSeatPosition().getColumn();
row = seat[x][y].getSeatPosition().getRow();
return seat[x][y];
}
}
}
else if (seatx.getSpecificSeatType() == 1) { // 1 is aisle
if (!seat[y][x].isReserved()) {
if (seat[y][x].getFirstClass()) {
found = true;
column = seat[x][y].getSeatPosition().getColumn();
row = seat[x][y].getSeatPosition().getRow();
return seat[x][y];
}
}
}
else if (seatx.getSpecificSeatType() == 10) {
if (!seat[y][x].isReserved()) {
if (seat[y][x].getFirstClass()) {
found = true;
column = seat[x][y].getSeatPosition().getColumn();
row = seat[x][y].getSeatPosition().getRow();
return seat[x][y];
}
}
}
if (x == (nRows - 1) & y == (nColumns = 1) & found == false) { //this checks to see if the loop is looping through the last seat. If it is and no open seat has been found it returns null
return null;
}
}
}
return null;
}
}
public Seat getSeat(int seatRow, char seatPosition)
{
return null;
}
}
package exercises;
package exercises;
public class PetiteFloorGrid extends FloorGrid {
Seat[][] newSeats;
public PetiteFloorGrid () {
this.nColumns = 7;
this.nRows = 10;
this.nFirstClassRows = 4;
this.initialiseFloorGrid();
}
protected void initialiseFloorGrid() {
int xMax = nRows + nFirstClassRows;
int yMax = nColumns;
newSeats = new Seat[xMax][yMax];
for (int x = 0; x < xMax; x++) {
for (int y = 0; y < yMax; y++) {
Seat seat = new Seat();
seat.setReserved(false);
if (x < 4) {
seat.setFirstClass(true);
}
if (y > 1 & y < 5) {
seat.setSeatType(SeatType.MIDDLE);
}
else if (y < 1 & y > 5) {
seat.setSeatType(SeatType.WINDOW);
}
else {
seat.setSeatType(SeatType.AISLE);
}
SeatPosition aSeatPosition = new SeatPosition(x, (char) ('A' + y));
seat.setSeatPosition(aSeatPosition);;
newSeats[x][y] = seat;
}
}
}
public Seat[][] initialisedSeat() {
return newSeats;
}
}
package exercises;
public class Seat {
private boolean firstClass;
private boolean reserved;
private SeatType seatType;
private SeatPosition seatPosition;
public Seat(SeatPosition seatPosition, SeatType seatType, boolean reserved, boolean firstClass)
{
this.seatPosition = seatPosition;
this.seatType = seatType;
this.reserved = reserved;
this.firstClass = false;
}
public Seat(SeatPosition seatPosition, boolean reserved, boolean firstClass)
{
this.seatPosition = seatPosition;
this.seatType = SeatType.AISLE;
this.reserved = reserved;
this.firstClass = false;
}
public Seat() {
SeatPosition aSeatPosition = new SeatPosition(1,'a');
this.seatPosition = aSeatPosition;
this.seatType = SeatType.AISLE;;
this.reserved = false;
}
public SeatType getSeatType()
{
return this.seatType;
}
public void setSeatType(SeatType seattype) {
this.seatType = seattype;
}
public boolean getFirstClass() {
return this.firstClass;
}
public boolean isFirstClass()
{
if (firstClass == true)
{
return true;
}
else
{
return false;
}
}
public void setFirstClass(boolean trueOrNot) {
this.firstClass = trueOrNot;
}
public boolean isReserved()
{
if (reserved == true)
{
return true;
}
else
{
return false;
}
}
public void setReserved(boolean reserved)
{
this.reserved = reserved;
}
public SeatPosition getSeatPosition()
{
return this.seatPosition;
}
public void setSeatPosition(SeatPosition aSeatPosition) {
this.seatPosition = aSeatPosition;
}
public String toDescription()
{
String typeClass;
String bookedOrNot;
if (firstClass == true)
{
typeClass = "First Class";
}
else
{
typeClass = "Economy Class";
}
if (reserved == true) {
bookedOrNot = "";
}
else {
bookedOrNot = " not ";
}
return ""+typeClass+" "+seatType+"seat at: "+seatPosition.getColumn()+""+seatPosition.getRow()+" is"+bookedOrNot+"booked";
}
public String toString()
{
char reservedOrNot;
char firstClassOrNot;
if (firstClass == true)
{
if (seatType.toString().equals(SeatType.AISLE)) {
firstClassOrNot = 'A';
}
else if (seatType.toString().equals(SeatType.MIDDLE)) {
firstClassOrNot = 'M';
}
else if (seatType.toString().equals(SeatType.WINDOW)) {
firstClassOrNot = 'W';
}
else {
firstClassOrNot = 'X';
}
}
else
{
if (seatType.toString().equals(SeatType.AISLE)) {
firstClassOrNot = 'a';
}
else if (seatType.toString().equals(SeatType.MIDDLE)) {
firstClassOrNot = 'm';
}
else if (seatType.toString().equals(SeatType.WINDOW)) {
firstClassOrNot = 'w';
}
else {
firstClassOrNot = 'x';
}
}
if (reserved == true)
{
reservedOrNot = 'X';
}
else
{
reservedOrNot = '_';
}
return "["+firstClassOrNot+" "+reservedOrNot+"]";
}
}
package exercises;
public enum SeatType {
WINDOW(3),MIDDLE(2),AISLE(1);
private int option;
private SeatType(int option)
{
this.setSeatType(option);
}
private SeatType()
{
}
public int getSeatType()
{
return this.option;
}
public void setSeatType(int option)
{
this.option = option;
}
public int getSpecificSeatType() {
return this.getSeatType();
}
}
package exercises;
public class TrainSmart extends TrainOperator {
private Seat aSeat;
private int foundFClass = 1;
private int foundEClass = 1;
private String sameAsWindow;
private String sameAsAisle;
PetiteFloorGrid aPetiteFloor = new PetiteFloorGrid();
public PetiteFloorGrid getPetiteFloor() {
return this.aPetiteFloor;
}
@Override
public Seat reserveFirstClass(char chosenGrid, SeatType aType) {
if (aType == SeatType.WINDOW) {
sameAsWindow = "yes";
}
else if(aType == SeatType.AISLE) {
sameAsAisle = "yes";
}
System.out.println("Outside If, attempting to enter");
if (chosenGrid == 'P') { //checks if the user specified grid is P for petite, if not carries on untill grand
System.out.println("Inside if");
if (aPetiteFloor.queryAvailableFirstClassSeat(aType) != null) { //Checks if seat of specified type is free, if so then it books it
aSeat = aPetiteFloor.queryAvailableFirstClassSeat(aType);
aSeat.setReserved(true);
foundFClass = 2;
return aSeat;
}
else if (aPetiteFloor.queryAvailableFirstClassSeat(SeatType.WINDOW) != null & sameAsAisle.equals("yes")) {
aSeat = aPetiteFloor.queryAvailableFirstClassSeat(SeatType.WINDOW);
foundFClass = 2;
if (aPetiteFloor.getLeft(aSeat) != null) {
aSeat = aPetiteFloor.getLeft(aSeat);
}
else {
aSeat = aPetiteFloor.getRight(aSeat);
}
aSeat.setReserved(true);
return aSeat;
}
else if (aPetiteFloor.queryAvailableFirstClassSeat(SeatType.AISLE) != null & sameAsWindow.equals("yes")) {
aSeat = aPetiteFloor.queryAvailableFirstClassSeat(SeatType.AISLE);
foundFClass = 2;
if (aPetiteFloor.getLeft(aSeat) != null) {
aSeat = aPetiteFloor.getLeft(aSeat);
}
else {
aSeat = aPetiteFloor.getRight(aSeat);
}
aSeat = aPetiteFloor.getLeft(aSeat);
aSeat.setReserved(true);
return aSeat;
}
return null;
}
else {
GrandeFloorGrid aGrandeFloor = new GrandeFloorGrid();
if (aGrandeFloor.queryAvailableFirstClassSeat(aType) != null) { //Checks if seat of specified type is free, if so then it books it
aSeat = aGrandeFloor.queryAvailableFirstClassSeat(aType);
aSeat.setReserved(true);
foundFClass = 2;
return aSeat;
}
else if (aGrandeFloor.queryAvailableFirstClassSeat(SeatType.WINDOW) != null & sameAsAisle.equals("yes")) {
aSeat = aGrandeFloor.queryAvailableFirstClassSeat(SeatType.WINDOW);
foundFClass = 2;
if (aGrandeFloor.getLeft(aSeat) != null) {
aSeat = aGrandeFloor.getLeft(aSeat);
}
else {
aSeat = aGrandeFloor.getRight(aSeat);
}
aSeat.setReserved(true);
return aSeat;
}
else if (aGrandeFloor.queryAvailableFirstClassSeat(SeatType.AISLE) != null & sameAsWindow.equals("yes")) {
aSeat = aGrandeFloor.queryAvailableFirstClassSeat(SeatType.AISLE);
foundFClass = 2;
if (aGrandeFloor.getLeft(aSeat) != null) {
aSeat = aGrandeFloor.getLeft(aSeat);
}
else {
aSeat = aGrandeFloor.getRight(aSeat);
}
aSeat = aGrandeFloor.getLeft(aSeat);
aSeat.setReserved(true);
return aSeat;
}
return null;
}
}
@Override
public Seat reserveEconomyClass(char chosenGrid, SeatType aType) {
if (aType == SeatType.WINDOW) {
sameAsWindow = "yes";
}
else if(aType == SeatType.AISLE) {
sameAsAisle = "yes";
}
if (chosenGrid == 'P') { //checks if the user specified grid is P for petite, if not carries on untill grand
PetiteFloorGrid aPetiteFloor = new PetiteFloorGrid();
if (aPetiteFloor.queryAvailableEconomySeat(aType) != null) { //Checks if seat of specified type is free, if so then it books it
aSeat = aPetiteFloor.queryAvailableEconomySeat(aType);
aSeat.setReserved(true);
foundFClass = 2;
return aSeat;
}
return null;
}
else {
GrandeFloorGrid aGrandeFloor = new GrandeFloorGrid();
if (aGrandeFloor.queryAvailableEconomySeat(aType) != null) { //Checks if seat of specified type is free, if so then it books it
aSeat = aGrandeFloor.queryAvailableEconomySeat(aType);
aSeat.setReserved(true);
foundFClass = 2;
return aSeat;
}
return null;
}
}
}
package exercises;
public class GrandeFloorGrid extends FloorGrid {
Seat[][] newSeats;
public GrandeFloorGrid () {
this.nColumns = 9;
this.nRows = 12;
this.nFirstClassRows = 6;
}
@Override
protected void initialiseFloorGrid() {
int xMax = nRows + nFirstClassRows;
int yMax = nColumns;
newSeats = new Seat[xMax][yMax];
for (int x = 0; x < xMax; x++) {
for (int y = 0; y < yMax; y++) {
Seat seat = new Seat();
seat.setReserved(false);
if (x < 6) {
seat.setFirstClass(true);
}
if (y > 2 & y < 6) {
seat.setSeatType(SeatType.MIDDLE);
}
else if (y < 2 & y > 6) {
seat.setSeatType(SeatType.WINDOW);
}
else {
seat.setSeatType(SeatType.AISLE);
}
SeatPosition aSeatPosition = new SeatPosition(x, (char) ('A' + y));
seat.setSeatPosition(aSeatPosition);;
newSeats[x][y] = seat;
}
}
}
}
for (int y = 0; y < nRows; ++y) {
for (int x = 0; x < nColumns; ++x) {
aPetiteFloor.queryAvailableFirstClassSeat(aType.values()[+chosen]) != null
aGrandeFloor.queryAvailableFirstClassSeat(aType.values()[+chosen]) != null
.
java.lang.NullPointerException
while (foundEClass == 1 & (chosen < 4) ) { //This algorithm checks each enum type SeatType and if there is a available seat on each type
if (aPetiteFloor.queryAvailableEconomySeat(aType.values()[+chosen]) != null) {
aSeat = aPetiteFloor.queryAvailableEconomySeat(aType.values()[+chosen]);
aSeat.setReserved(true);
foundEClass = 2;
if (foundEClass == 2) {
return aSeat;
}
}
++chosen;
}
最佳答案
迭代本身不是问题。看看你是如何初始化地板网格的
@Override
protected void initialiseFloorGrid() {
for (int y = 0; y < nRows + nFirstClassRows; ++y) {
for (int x = 0; x < nColumns; ++x) {
//newSeats[y][x].getSeatPosition().setSeatPosition(nRows, (char) ('A' + nColumns));
newSeats = new Seat[y][x];
newSeats[y][x].setReserved(false);
}
}
}
newSeats
变量每次都被初始化。 @Override
protected void initialiseFloorGrid() {
int xMax = nRows + nFirstClassRows;
int yMax = nColumns;
newSeats = new Seat[xMax][yMax];
for (int x = 0; x < xMax; x++) {
for (int y = 0; y < yMax; y++) {
Seat seat = new Seat();
seat.setReserved(false);
newSeats[x][y] = seat;
}
}
}
关于java - ArrayIndexOutOfBounds 应在边界内的对象上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744214/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!