有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何知道对象实例使用哪种类型的变量?

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) 个答案

  1. # 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也已经是JavaSDK中的东西了。您应该使用不同的变量名。我在下面的示例中使用了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();
    
    } 
    
  2. # 2 楼答案

    变量的类型必须是可能分配给它的所有对象的公共基类。由于类Object是所有其他类的基类,因此可以执行以下操作:

    Object user = new Fighter();
    

    但这可能不是一个好主意

    您可能应该从基类派生FighterMage等,比如Character。也可以使用接口而不是基类

  3. # 3 楼答案

    假设“用户”是一个拥有“职业”(即战士/法师)的玩家。我将创建一个单独的player类并存储该信息

    class Player {
    
      String classType; // where you would store the player's class information
    
      int hitPoints;
    
    }
    
  4. # 4 楼答案

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

    第二个问题:如果希望在最后调用实例化实例上的方法,则应在if-else-if之前声明一个变量,如下所示:

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


    在每个if中,您应该实例化合适的子用户类,并将其分配给上面声明的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();