Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只能从数组中的索引0中删除对象_Java_Arrays_Oop - Fatal编程技术网

Java 只能从数组中的索引0中删除对象

Java 只能从数组中的索引0中删除对象,java,arrays,oop,Java,Arrays,Oop,我遇到的问题如下:我创建了两个表示船舶停靠空间的数组。第一个数组(dock1[])ship对象(shipName和size-通常是超级容器)可以保存在数组中。如果要从dock1[]中删除对象,请输入shipName以将其删除 但是我只能从数组中的第一个空间(索引0)中删除ship对象,而不能从任何其他空间(即索引1,2,3)中删除ship对象 你能帮忙吗?下面是我的dock类,undock()if语句中的问题: import java.util.*; public class Main {

我遇到的问题如下:我创建了两个表示船舶停靠空间的数组。第一个数组(dock1[])ship对象(shipName和size-通常是超级容器)可以保存在数组中。如果要从dock1[]中删除对象,请输入shipName以将其删除

但是我只能从数组中的第一个空间(索引0)中删除ship对象,而不能从任何其他空间(即索引1,2,3)中删除ship对象

你能帮忙吗?下面是我的dock类,undock()if语句中的问题:

import java.util.*;

public class Main {

static Scanner scan = new Scanner(System.in);

private static Ship[] dock1 = new Ship[10];
private static Ship[] waitingList = new Ship[10];

public static void main(String[] args) {
    menu();
}

public static void menu() {


    Scanner scan = new Scanner(System.in);


    while (true) {

        System.out.println("Choose an option: 1-3");
        System.out.println("1. Dock");
        System.out.println("2. Undock");
        System.out.println("3. Status");

        int menu = scan.nextInt();
        switch (menu) {
            case 1:
                System.out.println("1. Dock");
                dock();
                break;
            case 2:
                System.out.println("2. Undock");
                undock();
                break;
            case 3:
                System.out.println("3. Status");
                printDock();
                printWaitingList();
                break;
            case 4:
                System.out.println("4. Exit");
                System.exit(0);
            default:
                System.out.println("No such option");
                break;
        }
    }
}


public static void dock() {

    System.out.println("Enter ship's name: ");
    String name = scan.nextLine();

    System.out.println("Enter ship's size: ");
    String size = scan.nextLine();

    System.out.println("Enter the ships dock:");
    //Check if the dock number is valid
    int i = Integer.valueOf(scan.nextLine());
    if (i >= 0 && i < 10 && dock1[i] == null) {
        int c = 0;
        int co = 0;
        int sco = 0;
        for (int j = 0; j < dock1.length; j++) {
            if (dock1[j] != null && dock1[j].getShipSize().equals("Cargo")) {
                c++;
            }
            if (dock1[j] != null && dock1[j].getShipSize().equals("Container")) {
                co++;
            }
            if (dock1[j] != null && dock1[j].getShipSize().equals("Super-Container")) {
                sco++;
            }
        }

        if (c < 10 && co < 5 && sco < 2) {
            //Add ship to the dock
            dock1[i] = new Ship(name, size);
            System.out.println("Enough space you can dock");
            System.out.println("Ship has been docked");
        } else {
            System.out.println("You cannot dock");
            waitingList(name, size);
        }

    } else {
        System.out.println("Couldn't dock");
        waitingList(name, size);
    }

}


public static void undock() {
    System.out.println("Status of ships: ");
    printDock();
    System.out.println("Enter ship's name to undock: ");
    String name = scan.nextLine();

    for (int i = 0; i < dock1.length; i++) {
        if (dock1[i] != null && dock1[i].getShipName().equals(name)) { //ONLY FINDING in ARRAY 0
            dock1[i] = null;
            System.out.println("Ship removed");
            /// HERE CHECK IF SHIP IN DOCK
            for (int j = 0; j < waitingList.length; j++) {
                if (dock1[i] == null && waitingList[j] != null) {
                    // Add ship to the dock
                    dock1[i] = new Ship(waitingList[j].getShipName(), waitingList[j].getShipSize());
                    System.out.println("Move ship from waiting list to dock 1");
                    waitingList[j] = null;
                    return;
                } else {
                 //   System.out.println("No space in dock");
                    return;
                }
            }
        } else {
            System.out.println("Ship not docked here");
            break;
        }

    }

}

public static void waitingList(String name, String size) {

    System.out.println("Dock 1 is full, ship will try to be added to Waiting List");
    for (int i = 0; i < waitingList.length; i++) {
        if (waitingList[i] == null) {
            //Add ship to the dock
            waitingList[i] = new Ship(name, size);
            System.out.println("Enough space added to waiting list");
            return;
        } else {

        }
    }
    System.out.println("No space on waiting list, ship turned away.");
}

public static void printDock() {

    System.out.println("Docks:");

    for (int i = 0; i < dock1.length; i++) {
        if (dock1[i] == null) {
            System.out.println("Dock " + i + " is empty");
        } else {
            System.out.println("Dock " + i + ": " + dock1[i].getShipName() + " " + dock1[i].getShipSize());
        }
    }
}

private static void printWaitingList() {

    System.out.println("Waiting List:");

    for (int i = 0; i < waitingList.length; i++) {
        if (waitingList[i] == null) {
            System.out.println("Dock " + i + " is empty");
        } else {
            System.out.println("Dock " + i + ": " + waitingList[i].getShipName() + " " + waitingList[i].getShipSize());
        }
    }
}
}
import java.util.*;
公共班机{
静态扫描仪扫描=新扫描仪(System.in);
私人静态船舶[]dock1=新船[10];
私人静态船舶[]等待列表=新船舶[10];
公共静态void main(字符串[]args){
菜单();
}
公共静态无效菜单(){
扫描仪扫描=新扫描仪(System.in);
while(true){
System.out.println(“选择一个选项:1-3”);
System.out.println(“1.Dock”);
System.out.println(“2.disock”);
系统输出打印项次(“3.状态”);
int menu=scan.nextInt();
开关(菜单){
案例1:
System.out.println(“1.Dock”);
dock();
打破
案例2:
System.out.println(“2.disock”);
解开();
打破
案例3:
系统输出打印项次(“3.状态”);
printDock();
printWaitingList();
打破
案例4:
System.out.println(“4.Exit”);
系统出口(0);
违约:
System.out.println(“无此选项”);
打破
}
}
}
公共静态void dock(){
System.out.println(“输入船名:”);
字符串名称=scan.nextLine();
System.out.println(“输入船舶尺寸:”);
字符串大小=scan.nextLine();
System.out.println(“进入船舶码头:”);
//检查船坞号是否有效
int i=Integer.valueOf(scan.nextLine());
如果(i>=0&&i<10&&dock1[i]==null){
int c=0;
int co=0;
int sco=0;
对于(int j=0;j
我看到两个错误:

1) 您可以在
undock
方法中中断else语句中的循环。 2) 如果您在第一个dock中找到船名,那么您总是在waitingList循环的第一次迭代中返回

for (int i = 0; i < dock1.length; i++) {
    if (dock1[i] != null && dock1[i].getShipName().equals(name)) { //ONLY FINDING in ARRAY 0
        dock1[i] = null;
        System.out.println("Ship removed");
        /// HERE CHECK IF SHIP IN DOCK
        for (int j = 0; j < waitingList.length; j++) {
            if (dock1[i] == null && waitingList[j] != null) {
                // Add ship to the dock
                dock1[i] = new Ship(waitingList[j].getShipName(), waitingList[j].getShipSize());
                System.out.println("Move ship from waiting list to dock 1");
                waitingList[j] = null;
                return;
            } else {
             //   System.out.println("No space in dock");
                return;
            }
        }
        // NOTE -> THIS ALWAYS ENDS IN A RETURN
    } else {
        System.out.println("Ship not docked here");
        break;
    }
}
我看到两个错误:

1) 您可以在
undock
方法中中断else语句中的循环。 2) 如果您在第一个dock中找到船名,那么您总是在waitingList循环的第一次迭代中返回

for (int i = 0; i < dock1.length; i++) {
    if (dock1[i] != null && dock1[i].getShipName().equals(name)) { //ONLY FINDING in ARRAY 0
        dock1[i] = null;
        System.out.println("Ship removed");
        /// HERE CHECK IF SHIP IN DOCK
        for (int j = 0; j < waitingList.length; j++) {
            if (dock1[i] == null && waitingList[j] != null) {
                // Add ship to the dock
                dock1[i] = new Ship(waitingList[j].getShipName(), waitingList[j].getShipSize());
                System.out.println("Move ship from waiting list to dock 1");
                waitingList[j] = null;
                return;
            } else {
             //   System.out.println("No space in dock");
                return;
            }
        }
        // NOTE -> THIS ALWAYS ENDS IN A RETURN
    } else {
        System.out.println("Ship not docked here");
        break;
    }
}

问题是,当一艘船没有停靠在第一个位置(索引0)时,你不会检查另一个p
 System.out.println("Status of ships: ");
printDock();
System.out.println("Enter ship's name to undock: ");
String name = scan.nextLine();
boolean deleted = false;
for (int i = 0; i < dock1.length; i++) {
    if (dock1[i] != null && dock1[i].getShipName().equals(name)) { //ONLY FINDING in ARRAY 0
        dock1[i] = null;
        System.out.println("Ship removed");
        deleted = true;
        /// HERE CHECK IF SHIP IN DOCK
        for (int j = 0; j < waitingList.length; j++) {
            if (dock1[i] == null && waitingList[j] != null) {
                // Add ship to the dock
                dock1[i] = new Ship(waitingList[j].getShipName(), waitingList[j].getShipSize());
                System.out.println("Move ship from waiting list to dock 1");
                waitingList[j] = null;
                return;
            } else {
                //   System.out.println("No space in dock");
                return;
            }
        }
    }

}
if (!deleted) System.out.println("No ship was removed")