我如何知道用于对象实例的变量类型?

时间:2016-12-12 20:34:37

标签: java instances

package RPG;
import java.util.Random;
import java.util.Scanner;

public class Beginnings
{
    public static boid main (String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Pick a class:");
        System.out.println("Fighter: Deals more damage");
        System.out.println("Mage: Has more health");
        System.out.println("Theif: Deals less damage but has         more health");
        String Class = scan.nextLine();
        if (Class.matches(".*Fighter.*"));
            Fighter user = new Fighter();
        else if (Class.matches(".*Mage.*"));
            Mage user = new Mage();
        else if (Class.matches(".*Thief.*"));
            Thief user = new Thief();
        else
            Human user = new Human();
        user.Name();
        user.Explore();

/ *当我运行代码时,它突出显示第一个"用户"并说"这里不允许变量声明"  我不知道如何解决这个问题。 * /

4 个答案:

答案 0 :(得分:1)

你有一些可能导致问题的拼写错误

public static boid main (String[] args)

应该是

public static void main (String[] args)

System.out.println("Theif: Deals less damage but has         more health");

应该是

System.out.println("Thief: Deals less damage but has         more health");

此外,大写字母Class()和小写class也是Java SDK中的东西。您应该使用不同的变量名称。我在下面的示例中使用了characterStr。标准实践规定,您应该使用camelcase来命名变量,使用大写来命名Java类。在实例化Class()对象时,人们通常将其实例化为Class clazz = new Class()

继续前进,我认为你应该为不同的用户类创建一个超类。设置这样的东西:

public abstract class Character
public class Fighter extends Character
public class Thief extends Character
public class Mage extends Character
public class Human extends Character

这样,main()中的代码就可以使用您的Character()对象

public static void main(String[] args)
{
    // Prompt the user for the character they want
    Scanner scan = new Scanner(System.in);
    System.out.println("Pick a class:");
    System.out.println("Fighter: Deals more damage");
    System.out.println("Mage: Has more health");
    System.out.println("Theif: Deals less damage but has         more health");

    // Get the user's response
    String characterStr = scan.nextLine();

    Character user; // You might have to initialize this. Did not test
    if (characterStr.matches(".*Fighter.*"))
    {
        user = new Fighter();
    }
    else if (characterStr.matches(".*Mage.*"));
    { 
        user = new Mage();
    }        
    else if (characterStr.matches(".*Thief.*"));
    {
        user = new Thief();
    }
    else
    {
        user = new Human();
    }

    user.Name();
    user.Explore();

} 

答案 1 :(得分:1)

第一个问题:如果您没有在括号之间放置声明,则无法在then语句的if中声明变量。编译器不接受它。

第二个问题:如果你想在最后调用实例化实例上的方法,你应该在if-else-if之前声明一个变量:

user.Name();
user.Explore();


在每个if中,您应该实例化合适的子User类并将其分配给上面声明的user变量。

在Java中,方法应以小写开头。我修改了它。 代码假设User是父类,并且在条件语句中实例化的类是User的子类。 User应定义name()方法和explore()方法。

    User user = null;
    if (Class.matches(".*Fighter.*")){
         user = new Fighter();
    }
    else if (Class.matches(".*Mage.*")){
         user = new Mage();
    }
    else if (Class.matches(".*Thief.*")){
         user = new Thief();
    }
    else{
         user = new Human();
    }
    user.name();
    user.explore();

答案 2 :(得分:0)

假设'用户'是一个拥有“班级”的球员。 (即战斗机/法师)。我会创建一个单独的玩家类并存储该信息。

class Player {

  String classType; // where you would store the player's class information

  int hitPoints;

}

答案 3 :(得分:0)

变量的类型必须是您可能分配给它的所有对象的公共基类。由于类Object是所有其他类的基类,因此您可以这样做:

Object user = new Fighter();

但这可能不是一个好主意。

你应该从基类派生FighterMage等,比如Character。您也可以使用界面代替基类。