![](/img/trans.png)
[英]How do I get the type of an object's variable if I know the name of the variable in java?
[英]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();
但這可能不是一個好主意。
您可能應該從基類派生Fighter
, Mage
等,例如Character
。 除了基類,您還可以使用接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.