Java静态数组修改

Java静态数组修改,java,arrays,static,Java,Arrays,Static,我有以下两个java类(如下所列)类BookInfo声明数组的静态块 public class BookInfo { // Global arrays accessible by all methods public static String[] isbnInfo; public static String[] bookTitleInfo; public static String[] authorInfo; public static S

我有以下两个java类(如下所列)类BookInfo声明数组的静态块

     public class BookInfo {

    // Global arrays accessible by all methods

    public static String[] isbnInfo;
    public static String[] bookTitleInfo;
    public static String[] authorInfo;
    public static String[] publisherInfo;
    public static String[] dateAddedInfo;;
    public static int[] qtyOnHandInfo;
    public static double[] wholesaleInfo;
    public static double[] retailInfo;

    static {

        isbnInfo = new String[] {

                                "978-0060014018",
                                "978-0449221431",
                                "978-0545132060",
                                "978-0312474881",
                                "978-0547745527"

                                };

        bookTitleInfo = new String[] {

                                "The Greatest Stories",
                                "The Novel",
                                "Smile",
                                "The Bedford Introduction to Drama",
                                "AWOL on the Appalachian Trail"

                                };

        authorInfo = new String[]  {

                                 "Rick Beyer",
                                 "James A. Michener",
                                 "Raina Telgemeier",
                                 "Lee A. Jacobus",
                                 "David Miller"

                                };

        publisherInfo = new String[] {

                                "HerperResource",
                                "Fawcett",
                                "Graphix",
                                "Bedford St. Martins",
                                "Mariner Books"

                                };

        dateAddedInfo = new String[] {

            "05/18/2003", 
            "07/07/1992", 
            "02/01/2010", 
            "09/05/2008", 
            "11/01/2011"

            };

        qtyOnHandInfo = new int[] {7, 5, 10, 2, 8};

        wholesaleInfo = new double[] {12.91, 7.99, 6.09, 54.99, 10.17};

        retailInfo = new double[] {18.99, 3.84, 4.90, 88.30, 14.95};

    }

    public static void BookInfo() {

        System.out.println("             Serendipity Booksellers");
        System.out.println("                Book Information\n");       


        for(int i = 0; i < isbnInfo.length; i++){

            System.out.println("ISBN: " + isbnInfo[i]);
            System.out.println("Title: " + bookTitleInfo[i]);
            System.out.println("Author: " + authorInfo[i]);
            System.out.println("Publisher: " + publisherInfo[i]);
            System.out.println("Date Added: " + dateAddedInfo[i]);
            System.out.println("Quantity-On-Hand: " + qtyOnHandInfo[i]);
            System.out.println("Wholesale Cost: $ " + wholesaleInfo[i]);
            System.out.println("Retail Price: $ " + retailInfo[i]);
            System.out.println();

        }
    }
    }

我可以从其他类主菜单轻松访问一些功能:BookInfo BookInfo=new BookInfo();bookinfo.bookinfo();System.out.println(bookinfo.isbnInfo[0]);如何从主菜单修改(添加、删除、编辑等)?非常感谢您的任何想法和建议

您已将数组声明为私有,因此它们是私有的。您必须编写+访问器方法+以返回相应的数组,或者更优雅地编写访问、搜索、修改等单个数组项的方法。

您已将数组声明为私有,因此它们是私有的。您必须编写+访问器方法+以返回相应的数组,或者更优雅地编写访问、搜索、修改等单个数组项的方法。

如果我理解正确,您想从不同的类文件访问数组的值或任何变量/函数吗

ClassName.VariableName=无论什么

当你使用

ClassName变量=新的ClassName()

每次调用该类时,它都会运行该类。请确保变量

公共静态VariableType Variablename


或者,如果我理解正确,您将无法调用/更改它,您希望从不同的类文件访问数组的值或任何变量/函数

ClassName.VariableName=无论什么

当你使用

ClassName变量=新的ClassName()

每次调用该类时,它都会运行该类。请确保变量

公共静态VariableType Variablename

或者您将无法调用/更改它

您只是无法在创建新元素后将其“添加”到。从oracle教程页面:

数组是一个容器对象,它保存单个类型的个固定的值。数组的长度是在创建数组时建立的。创建后,其长度是固定的

因此,如果您想从列表中添加和删除元素,我建议您使用一个对象,它可以定义为

列表接口的可调整大小的数组实现

例如,您可以替换代码行

private static String[] isbnInfo;
为了

在你的公开课上:

String[] isbnInfo = BookInfo.getIsbnInfo();
还可以使用公共方法编辑数组,如:

public static void replaceIsbnInfo(int index, String isbn)
{
   isbnInfo[index] = isbn;
}
在你的菜单课上

BookInfo.replaceIsbnInfo(1, "978-0547745527");
我希望这有帮助。干杯

在创建新元素之后,您无法将其“添加”到。从oracle教程页面:

数组是一个容器对象,它保存单个类型的个固定的值。数组的长度是在创建数组时建立的。创建后,其长度是固定的

因此,如果您想从列表中添加和删除元素,我建议您使用一个对象,它可以定义为

列表接口的可调整大小的数组实现

例如,您可以替换代码行

private static String[] isbnInfo;
为了

在你的公开课上:

String[] isbnInfo = BookInfo.getIsbnInfo();
还可以使用公共方法编辑数组,如:

public static void replaceIsbnInfo(int index, String isbn)
{
   isbnInfo[index] = isbn;
}
在你的菜单课上

BookInfo.replaceIsbnInfo(1, "978-0547745527");

我希望这有帮助。干杯

你把这件事搞砸了

您应该首先创建一个“BookInfo”类(但不是您定义的类),该类包含isbnInfo、bookTitleInfo、authorInfo等实例字段(每个字段一本书只有一个实体,而不是数组)

然后,为每本书创建并初始化相应的BookInfo对象

接下来,将这些BookInfo对象的集合放在一个可搜索的对象中,例如HashMap(对于单个搜索字段),或者将它们放在某种数组中,并构建单独的HashMap或任何从搜索参数映射到数组索引的对象(将所有片段锚定在“Library”对象中)


当有人搜索一本书时,返回BookInfo对象,它可以有“getter”方法来提取(理想情况下是私有的)实例字段值。这会完整地返回关于这本书的所有信息。

你把这件事搞砸了

您应该首先创建一个“BookInfo”类(但不是您定义的类),该类包含isbnInfo、bookTitleInfo、authorInfo等实例字段(每个字段一本书只有一个实体,而不是数组)

然后,为每本书创建并初始化相应的BookInfo对象

接下来,将这些BookInfo对象的集合放在一个可搜索的对象中,例如HashMap(对于单个搜索字段),或者将它们放在某种数组中,并构建单独的HashMap或任何从搜索参数映射到数组索引的对象(将所有片段锚定在“Library”对象中)


当有人搜索一本书时,返回BookInfo对象,它可以有“getter”方法来提取(理想情况下是私有的)实例字段值。这将完整地返回有关该书的所有信息。

在所有选项中,ArrayList似乎是最灵活的。
甚至有效的Java第二版,第25项:更喜欢列表而不是数组。谢谢大家的意见

ArrayList似乎是所有选项中最灵活的。
甚至有效的Java第二版,第25项:更喜欢列表而不是数组。谢谢大家的意见

将它们公开是合理的吗?@Vladimir过去25年的所有面向对象编程经验都说“不”。编写方法。将它们公开是否合理?@Vladimir过去25年所有面向对象编程经验都说“不”。写方法。你说“我如何从这个类访问数组列表?”但你没有定义“数组列表”是什么意思。你说“我如何从这个类访问数组列表?”但你没有定义“数组列表”是什么意思。但是,你可以创建一个新数组,然后