簡體   English   中英

我如何知道要用於對象實例的變量類型?

[英]How do I know what type of variable to use for an instance of an object?

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();

/ *運行代碼時,它突出顯示第一個“用戶”並說“此處不允許使用變量聲明”,我不知道該如何解決。 * /

您有一些可能導致問題的拼寫錯誤

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");

此外,在Java SDK中,大寫的Class()和小寫的class也已經存在。 您應該使用其他變量名。 我在下面的示例中使用了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();

} 

第一個問題:如果不將聲明放在括號之間,則不能在if語句的then中聲明變量。 編譯器不接受。

第二個問題:如果希望在實例化實例上調用方法,則應該在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();

假設“用戶”是具有“階級”(即戰士/法師)的玩家。 我將創建一個單獨的播放器類並存儲該信息。

class Player {

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

  int hitPoints;

}

變量的類型必須是您可能分配給它的所有對象的通用基類。 由於Object類是所有其他類的基類,因此可以這樣做:

Object user = new Fighter();

但這可能不是一個好主意。

您可能應該從基類派生FighterMage等,例如Character 除了基類,您還可以使用接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM