Java静态数组修改

时间:2012-10-19 00:45:32

标签: 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 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]);如何从主菜单

修改(添加,删除,编辑等)
    import java.util.Scanner;

     public class InvMenu {
     public static void addBook(){

      System.out.println("\nYou selected Add a Book\n");
       BookInfo bookinfo = new BookInfo();
      bookinfo.BookInfo(); // only these two are working but I cannot modify arrays at all
      System.out.println(bookinfo.isbnInfo[0]);

        }

       public static void editBook(){

     System.out.println("\nYou selected Edit a Book's Record\n"); 

     }

     public static void deleteBook(){

      System.out.println("\nYou selected Delete a Book\n");

    }

    public static void printInvMenu(){

    String choice;
    int x = 0;
    boolean b;
    char letter;
    boolean menu = true;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Serendipity Booksellers");
    System.out.println("Inventory Database\n");
    System.out.println("       1. Look Up a Book");
    System.out.println("       2. Add a Book");
    System.out.println("       3. Edit a Book's Record");
    System.out.println("       4. Delete a Book");
    System.out.println("       5. Return to the Main Menu\n");

    do{

    System.out.print("Enter your choice: ");
    choice = keyboard.nextLine();
    b = true;

    try {
        x = Integer.parseInt(choice);
        System.out.println(x);

    }

    catch(NumberFormatException nFE) {

        b = false;
        System.out.println("You did not enter a valid choice. Try again!\n");

    }

       }while(b == false);

    do{

    else if(x == 1){

        addBook();

    }

    else if(x == 2){

        editBook();

    }

    else if(x == 3){

        deleteBook();

    }

    else if(x == 4){

        System.out.println("Returning to the Main Menu\n");
        break;

    }

    else{

        System.out.println("\nYou did not enter a valid choice. Try again!\n");

    }

     printInvMenu();

    }while(x == 5);

      }
     }

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

5 个答案:

答案 0 :(得分:3)

创建后,您无法在Array上添加新元素。从oracle教程页面:

  

数组是一个容器对象,它包含单个类型的固定数量的值。当阵列创建 时,阵列的长度 已建立。创建后,它的长度是固定的。

因此,如果你想在List中添加和删除元素,我建议你使用一个ArrayList对象,可以定义为

  

List接口的可调整大小的数组实现。

例如,您可以替换您的代码行

private static String[] isbnInfo;

private static ArrayList<String> isbnInfo;

并将其初始化为:

isbnInfo = new ArrayList<String>()
isbnInfo.add("978-0060014018");
isbnInfo.add("978-0449221431");
isbnInfo.add("978-0545132060");
isbnInfo.add("978-0547745527");

至于编辑数组,您只需为私有字段添加一些公共getter

public static String[] getIsbnInfo()
{
   return isbnInfo;
}

并在你的公共课上:

String[] isbnInfo = BookInfo.getIsbnInfo();

您还可以使用公共方法编辑数组,例如:

public static void replaceIsbnInfo(int index, String isbn)
{
   isbnInfo[index] = isbn;
}

在您的菜单类

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

我希望它有所帮助。干杯!

答案 1 :(得分:1)

你有点搞砸了这件事。

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

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

接下来,要么将这样的BookInfo对象的集合放在可搜索的对象(例如HashMap(用于单个搜索字段))中,要么将它们放在某种数组中,并构建单独的HashMaps或从搜索参数映射到的任何内容。数组索引(将所有部分锚定在“库”对象中)。

当有人搜索某本书时,返回BookInfo对象,该对象可以使用“getter”方法提取(理想情况下为私有的)实例字段值。这将以书面形式返回有关该书的所有信息。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

ClassName.VariableName = whatever;

使用时

ClassName variable = new ClassName();

每次调用它时都会运行该类。确保你的变量是

public static VariableType Variablename;

或者你无法打电话/改变它

答案 4 :(得分:0)

ArrayList似乎是所有选项中最灵活的。 即使是Effective Java 2nd Edition,第25项:首选列表到数组。感谢您的所有投入!