我有以下两个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]);如何从主菜单修改(添加,删除,编辑等)?任何想法,建议都非常感谢!
答案 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项:首选列表到数组。感谢您的所有投入!