Java 填充多维字符串数组的特定部分(超出范围)

Java 填充多维字符串数组的特定部分(超出范围),java,multidimensional-array,Java,Multidimensional Array,我正在建立一个数据库,你可以输入动物和它们需要的补充剂。我必须使用多维数组。我遇到的问题是,当用户将数据输入多维数组时,我会得到一个越界错误。我很困惑,因为我使用了相同的方法让用户输入动物的类型和所需的补充剂的数量,但当实际输入补充剂时,我引入并保留了数组,以使每只动物的补充剂保持有序。为了获得更直观的参考,我的逻辑如下: 名字 动物类型1补编1 动物种类排在第一列,而补充剂则以水平方式填充每只动物。我将发布我的代码,但具体来说,我遇到了数组超出边界的问题。我怀疑这与我如何初始化多数组有关,但我

我正在建立一个数据库,你可以输入动物和它们需要的补充剂。我必须使用多维数组。我遇到的问题是,当用户将数据输入多维数组时,我会得到一个越界错误。我很困惑,因为我使用了相同的方法让用户输入动物的类型和所需的补充剂的数量,但当实际输入补充剂时,我引入并保留了数组,以使每只动物的补充剂保持有序。为了获得更直观的参考,我的逻辑如下:

名字 动物类型1补编1

动物种类排在第一列,而补充剂则以水平方式填充每只动物。我将发布我的代码,但具体来说,我遇到了数组超出边界的问题。我怀疑这与我如何初始化多数组有关,但我现在不确定。任何帮助都将不胜感激

//尼古拉斯·斯塔福德 //2016年2月1日 //该程序允许用户输入最多任意数量的动物和饮食信息,然后允许用户在搜索数据库时显示该信息

import java.util.Scanner;
import java.util.Arrays;
公共类目录{

    public static void main(String[] args)
    {

        //Initial variables
        int choiceent;
        int numAnimals = 0;
        int numDiet = 0;
        int ArrayHold = 0;
        boolean isNum;
        boolean isNum2;
        boolean quit = false;


        //Scanners needed for input
        Scanner choice = new Scanner(System.in);
        Scanner input1 = new Scanner(System.in);
        Scanner input2 = new Scanner(System.in); 
        Scanner input3 = new Scanner(System.in);
        Scanner input4 = new Scanner(System.in);

        //Initial value needed to enter animals into database
        System.out.println("Enter the number of animals you wish to enter:");
        do
        {
            if(input1.hasNextInt()) {
                numAnimals = input1.nextInt();
                isNum = true;

            }
            else {
                System.out.println("Please enter an integer value!");
                isNum = false;
                input1.next();
            }

        }
        while(!(isNum));
        System.out.println("You are entering " +numAnimals+ " animals.");

        //Multidimensional array
        String [][] ZooBase = new String [100][100];

        //Array for data types
        int numDietA[] = new int [numAnimals];

        do{ 

        System.out.println("1. Enter the names of each animal");
        System.out.println("2. Enter the dietary information");
        System.out.println("3. Search the array for information");
        System.out.println("4. Close the program");

        choiceent = choice.nextInt();

        switch(choiceent)
        {
        case 1:
            //Data validation for name

            for(int i = 0; i < numAnimals; i++)
            {
                System.out.println("Enter the type of animal for animal " +i+ "");
                while(!input2.hasNext("[a-zA-Z]+"))
                {
                    System.out.println("Enter a type of animal!");
                    ZooBase[i+1][0] = input2.nextLine();
                }
                ZooBase[i+1][0] = input2.nextLine();
            }

            //Display Names
            System.out.println("Names");
            for(int j = 0; j < numAnimals; j++){
                    System.out.println(ZooBase[j+1][0]);
            }
            break;

        case 2:

            for(int j = 0; j < numAnimals; j++)
            {
                System.out.println("How many supplements does the " +ZooBase[j+1][0]+ " need?");
                do
                {
                    if(input3.hasNextInt()) {
                        numDietA[j] = input3.nextInt();
                        isNum2 = true;

                    }
                    else {
                        System.out.println("Please enter an integer value!");
                        isNum2 = false;
                        input3.next();
                    }
                }while(!(isNum2));

                }

                for(int k = 0; k < numAnimals; k++)
                {
                    ArrayHold = k+1;
                    for(int m = 0; m < numDietA[m]; m++ )
                    {
                    System.out.println("Enter item " +m+ " for the " +ZooBase[m+1][0]+ "");

                        while(!input4.hasNext("[a-zA-Z]+"))
                        {
                            System.out.println("Enter a supplement (No integers)!");
                            ZooBase[ArrayHold][m+2] = input4.nextLine();
                        }
                        ZooBase[ArrayHold][m+2] = input4.nextLine();        
                    }
                }



            break;

        case 3:
            break;

        case 4:
            quit = true;
            break;

        default:

            System.out.println("Invalid option!");
            break;



        }
        }while(choiceent != 4);

    }       
publicstaticvoidmain(字符串[]args)
{
//初始变量
精益求精;
int numAnimals=0;
int numDiet=0;
int-ArrayHold=0;
布尔数;
布尔isNum2;
布尔退出=假;
//输入所需的扫描仪
扫描仪选择=新扫描仪(System.in);
扫描仪输入1=新扫描仪(System.in);
扫描仪输入2=新扫描仪(System.in);
扫描仪输入3=新扫描仪(System.in);
扫描仪输入4=新扫描仪(System.in);
//将动物输入数据库所需的初始值
System.out.println(“输入您希望输入的动物数量:”);
做
{
if(input1.hasNextInt()){
numAnimals=input1.nextInt();
isNum=true;
}
否则{
System.out.println(“请输入一个整数值!”);
isNum=false;
input1.next();
}
}
而(!(isNum));
System.out.println(“您正在输入”+numAnimals+“动物”);
//多维数组
字符串[][]ZooBase=新字符串[100][100];
//数据类型的数组
int numDietA[]=新int[numAnimals];
做{
System.out.println(“1.输入每只动物的名称”);
System.out.println(“2.输入饮食信息”);
System.out.println(“3.搜索数组中的信息”);
System.out.println(“4.关闭程序”);
choiceent=choice.nextInt();
开关(选择)
{
案例1:
//名称的数据验证
对于(int i=0;i

}

一旦数组初始化,其大小就无法更改。要确保不会发生这种情况,请使用ArrayList,它没有固定的边界。您可以在此处找到语法+所有详细信息:

希望有帮助


另外,您还可以初始化一个扫描仪输入,并在整个过程中使用它。我被迫使用多维数组,没有数组列表,但我会问用户是否希望为每次迭代输入另一个补充。我想,如果我将数组定义为100,并询问用户需要多少补充,它只会填充数组,而不会实际更改其初始化值。