4

让我快速解释一下。我在 7 月份通过一家公司参加了为期 5 周的 Java 课程。它们涵盖了基本的东西,比如控制台应用程序、crud 操作、mysql 和 n 层架构。自从课程结束后,我并没有太多使用它,因为我回去工作了,其他医疗原因浮出水面……等等。

公司告诉我做一个简单的程序来反映我学到的东西。原来我保留的很少。

我决定制作一个视频游戏明星节目。它将用于盯着你的视频游戏,这样你就不必搜索你的书柜(或者你如何存储你的游戏。)

切入正题,我似乎无法从一个类到另一个类获得用户输入。我的表示层中的 AddGame 方法应该将用户输入发送到我的逻辑层中的 NewGame 方法。我不断收到的错误是“标题”列不能为空。

这是我的 AddGame 方法

    public static Games AddGame() {
    Games g = new Games();
    Logic aref = new Logic();
    Scanner scanline = new Scanner(System.in);
    System.out.println("Please enter the title of your game:");
    scanline.nextLine();
    System.out.println("Please enter the rating of your game:");
    scanline.nextLine();
    System.out.println("Please enter the platform for your game:");
    scanline.nextLine();
    System.out.println("Please thenter the developer of your game:");
    scanline.nextLine();
    aref.NewGame(g);
    return g;

}

这是我的新游戏方法

    public static void NewGame(Games g)
{
    try {
         Class.forName(driver).newInstance();
         Connection conn = DriverManager.getConnection(url+dbName,userName,password);
         PreparedStatement ps = (PreparedStatement) conn.prepareStatement("INSERT INTO games(Title,Rating,Platform,Developer) " +
                "VALUES(?,?,?,?)");
         ps.setString(1, g.getTitle());
         ps.setString(2, g.getRating());
         ps.setString(3, g.getPlatform());
         ps.setString(4, g.getDeveloper());
         ps.executeUpdate();
         conn.close();

         } catch (Exception e) {
         e.printStackTrace();
}
}

我还没有学会如何使用休眠,只知道如何制作控制台应用程序。我查找的所有内容要么是休眠的,要么是网络应用程序。(对不起,如果代码看起来草率或蹩脚)请任何建议都会非常有帮助。提前致谢!

4

4 回答 4

1

假设您的游戏类具有实例变量的设置器,

用这个

System.out.println("Please enter the title of your game:");
g.setTitle(scanner.nextLine());

System.out.println("Please enter the rating of your game:");
g.setRating(scanner.nextLine());

System.out.println("Please enter the platform for your game:");
g.setPlatform(scanner.nextLine());

System.out.println("Please thenter the developer of your game:");
g.setDeveloper(scanner.nextLine());

nextLine 方法返回用户输入的文本行,该数据使用 setter 存储在 Games 对象的实例变量中。

于 2013-10-23T07:21:25.637 回答
1

在您的AddGame方法中,您不会Games使用任何数据填充您的对象。您从用户那里读取数据,但只是将其丢弃。

我建议您向Games对象添加一个接受所有必要参数的构造函数,例如:

public static Games addGame() {

    Scanner scanline = new Scanner(System.in);
    System.out.println("Please enter the title of your game:");
    String title = scanline.nextLine();

    System.out.println("Please enter the rating of your game:");
    String rating = scanline.nextLine();

    System.out.println("Please enter the platform for your game:");
    String platform = scanline.nextLine();

    System.out.println("Please thenter the developer of your game:");
    String developer = scanline.nextLine();

    Games g = new Games(title, rating, platform, developer);
    aref.NewGame(g);
    return g;
}

旁注:Java 方法应该是camelCase,例如addGamenewGame

于 2013-10-23T07:21:42.873 回答
1

我看到的最明显的问题是:

Games g = new Games();
Scanner scanline = new Scanner(System.in);
System.out.println("Please enter the title of your game:");
scanline.nextLine();
System.out.println("Please enter the rating of your game:");
scanline.nextLine();
System.out.println("Please enter the platform for your game:");
scanline.nextLine();
System.out.println("Please thenter the developer of your game:");
scanline.nextLine();

您基本上忽略了用户传递的任何内容。我假设你想做这样的事情:

Scanner scanline = new Scanner(System.in);
System.out.println("Please enter the title of your game:");
g.setTitle(scanline.nextLine());
...

这将基本上填充您的Games对象。您遇到的问题是Games对象已初始化但从未真正填充任何内容,这导致程序抱怨null值。

于 2013-10-23T07:22:07.190 回答
0

您需要修改您的代码如下

您需要将值传递 scanline.nextLine();给您的g.setTitle(), g.setRating(),g.setPlatform()g.setDeveloper().

System.out.println("Please enter the title of your game:");
g.setTitle(scanline.nextLine());
System.out.println("Please enter the rating of your game:");
g.setRating(scanline.nextLine());
System.out.println("Please enter the platform for your game:");
g.setPlatform(scanline.nextLine());
System.out.println("Please thenter the developer of your game:");
g.setDeveloper(scanline.nextLine());
aref.NewGame(g);
于 2013-10-23T07:21:35.507 回答