0

我已经将我所有的课程从高中课程的 Java 学院简介中拿出来,并将它们放入一个名为gameChoices. 然后我创建了一个类,当用户要求它们时会调用这些类,这被称为whichGame. 我已经导入了我想要使用的类import gameChoices。“无论它是什么游戏”;。我如何调用这些类whichGame?我也有它们public static main(string [] args),哪些不应该有(我认为whichGame应该是..)?而我会放什么呢?感谢您帮助新手:)

4

2 回答 2

1

最简单的方法可能是设置一个大的 if/then 语句。

if(input.equals("t"))
  thisOne.start();
else if(input.equals("a"))
  anotherOne.start();
else if(input.equals("y"))
  yetAnotherOne.start();

等等。如果您有很多课程,或者它们以相同的字母开头,可能会很痛苦。

于 2013-05-09T15:10:02.703 回答
0

不确定你想要实现什么,但如果你需要通过它的名字访问一个类,你可以尝试Class.forName()并检查抛出的异常(特别是 ClassNotFoundException)。使用不区分大小写的字符串相等性进行名称检查,如果允许您通过反射访问 ClassLoader 的任何现有类。

编辑

这是您的主要课程:

package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
    // initializes your map of letter->game class 
    private static final Map<String, Class<?>> GAMES = new HashMap<String, Class<?>>();
    // constant name of main method for your games
    private static final String MAIN_METHOD_NAME = "main";
    // add your games
    static {
        GAMES.put("c", Chess.class);
        GAMES.put("d", Doom.class);
        // TODO moar gamez
    }

    public static void main(String[] args) {
        try {
            // prompts the user
            System.out.println("Enter the game's name or starting letter: ");
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in)
            );
            // gets the response
            String input = br.readLine();
            br.close();
            // iterates over your games' first letters
            for (String gameName : GAMES.keySet()) {
                // the input starts with one game's first letter...
                if (gameName.startsWith(input.toLowerCase())) {
                    // gets the class
                    GAMES.get(gameName)
                        // gets its main method (typical signature is String[] args)
                        .getMethod(MAIN_METHOD_NAME, String[].class)
                        // invokes its main method with no arguments
                        .invoke((Object) null, (Object) null);
                }
            }
        // handles any disaster
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

现在这里有两个“游戏”类:

package test;

public class Chess {

    public static void main(String[] args) {
        System.out.println("You've chosen Chess!");

    }

}

... 和...

package test;

public class Doom {

    public static void main(String[] args) {
        System.out.println("You've chosen Doom!");

    }

}

现在将您的“主要”课程设置为您的...主要课程。当您启动应用程序时,它会询问您的首字母。如果你选择“c”或“d”,它会打印出:“你选择了[Chess/Doom]!”

我希望这可以帮助您入门。

于 2013-05-09T14:58:44.690 回答