Java(eclipse)公共变量不保存值

Java(eclipse)公共变量不保存值,java,eclipse,Java,Eclipse,我的Java程序遇到了一些问题。我们必须创建一个库,其中包含标题(光环、lotr)、格式(xbox、dvd等)、借出日期(如果借出过)和借出对象(如果借出过) 我没有完成我的代码,但是我正在测试它,而不是仅仅在5个小时的编码后编译整个完成的代码。我遇到了一个问题。每当我将一个公共字符串变量设置为一个值时,它都会保存在我在中声明它的方法中,但当在其他方法中调用system.out.print时,它会显示“null” 这是我的密码。第一类是图书馆 package p1; import java.ut

我的Java程序遇到了一些问题。我们必须创建一个库,其中包含标题(光环、lotr)、格式(xbox、dvd等)、借出日期(如果借出过)和借出对象(如果借出过)

我没有完成我的代码,但是我正在测试它,而不是仅仅在5个小时的编码后编译整个完成的代码。我遇到了一个问题。每当我将一个公共字符串变量设置为一个值时,它都会保存在我在中声明它的方法中,但当在其他方法中调用system.out.print时,它会显示“null”

这是我的密码。第一类是图书馆

package p1;
import java.util.Scanner;
public class Library {
// \/ FIELDS
private String[] mediaItemTitle = new String[100];
public String[] mediaItemFormat = new String[100];
public String[] mediaItemLoanedTo = new String[100];
public String[] mediaItemOnLoan = new String[100];
public String[] mediaItemDateLoaned = new String[100];
public String today = "3/9/2015";
public int numberOfItems;   
// /\ FIELDS

// \/ METHODS
public static void main(String[] brad){

    Scanner input = new Scanner(System.in);

    MediaItem main;
    main = new MediaItem();
    String title;
    String format;
    String date;
    String name;

    for ( int i = 0; i != 5; ){
    i = displayMenu();
    if (i == 1){
        System.out.println("What is the title? ");
        title = input.nextLine();
        System.out.println("What is the format? ");
        format = input.nextLine();
        main.MediaItem(title,format);

    }else if (i == 2){
        System.out.println("Which Item (Enter the title? ");
        title = input.nextLine();
        System.out.println("Who are you loaning it to? ");
        name = input.nextLine();
        System.out.println("When did you loan it to them? ");
        date = input.nextLine();

    }else if (i == 3){
        main.MediaItem();
    }else if (i == 4){
        System.out.print("Which item? (enter the title) ");
        title = input.nextLine();
        main.markReturned(title);
    }else if (i == 5){ // DONE
        System.out.print("Goodbye!");
        break;
    }

    }

}
public static int displayMenu(){ // DONE
    Scanner input = new Scanner(System.in);

    int choice = 0;
    System.out.println("1. Add new item");
    System.out.println("2. Mark an item as on loan");
    System.out.println("3. List all items");
    System.out.println("4. Mark an item as returned");
    System.out.println("5. Quit");
    choice = input.nextInt();


    return choice;
}
public void addNewItem(String title, String format){
    this.mediaItemTitle[numberOfItems] = title;
    this.mediaItemFormat[numberOfItems] = format;
    System.out.print("TEST: " + mediaItemTitle[numberOfItems]);

}
public void incrementNumberOfItems(){
    numberOfItems++;
}
public void listAllItems(){
for (int i = 0; i < numberOfItems; i++){
System.out.print(mediaItemTitle[i])
}
}

这快把我逼疯了。我很想让我的公共变量在方法之间保存它们的值,但这不会发生。控制台(当从displayMenu中选择3时)

0 空的

这意味着numberOfItems和mediaItemTitle[i]被读取为0,且为null。我不明白,因为我在节目的早些时候宣布了


我不明白我做错了什么。请帮帮我!谢谢

您的主要错误是在
MediaItem
方法中创建了
Library
的新实例。该
Library
对象将只存在于
MediaItem
方法的范围内。Plus
Library
是您的主要静态类

我认为你的设计完全错了。看起来您正在学习如何使用Java或OOP,出现这些错误很好

将数据从主类中分离出来,仅为数据创建新类。看看JavaPOJO(普通的旧java对象),比如

例如:

String title;
String format;
String date;
String name;
应该在一个新对象中,即POJO中。比如:

public class MyDataPOJO {

   private String title;
   private String format;
   private String date;
   private String name;

   public MyDataPOJO(String title, String format, String date, String name) {
      this.title = title;
      this.format = format;
      this.date = date;
      this.name = name;
   }

   public String getTitle() {return title;}
   public String getFormat() {return formate;}
   // And the rest of the getter methods for date and name
}
库中
类中,您可能只需要保留逻辑。但即使是这样,也可以重新考虑到另一个类别

另外,请检查java命名约定。这里有一条准则:。换句话说,方法名称以小写开头


例如,您的
public void MediaItem(){/**something*/}
应该是
public void MediaItem(){/**something*/}

遵循上面的答案并将其视为注释,因为人员的答案是正确的,而我的陈述并不是针对您的主要问题

在for循环中,我认为应该添加另一个else if语句。如果用户输入的数字不是1-5,他们将收到一个错误。所以可能是

else if (i < 1 || i > 5)
  System.out.println("Error: Enter a choice 1-5\n");
else if(i<1|i>5)
System.out.println(“错误:输入选项1-5\n”);
另外,我认为您可能忘记了使用}结束listalItems()方法


但正如我刚才所说的,你真正问题的答案已经解决了,所以给他们打勾。这只是我注意到的一个小的用户界面错误。

注释:我将mediaItemTitle设置为private,以查看它是否有任何效果。没有,非常感谢!是的,我刚开始在Java工作。我将尝试遵循代码约定以达到更精确的标准。谢谢,我完全忘记了为用户选择输入做检查。
else if (i < 1 || i > 5)
  System.out.println("Error: Enter a choice 1-5\n");