gpt4 book ai didi

java - 在 Java 应用程序中找不到符号

转载 作者:行者123 更新时间:2023-11-30 07:07:21 27 4
gpt4 key购买 nike

我正在开发一个简单的基于文本的 rpg 战斗程序,作为对 Java 的介绍。我似乎对大部分代码都有不错的理解,但我遇到了几个问题。

我遇到的问题是在 Project 类中。

在我的 switch 语句中,我尝试使用 setSpells() 和 setArrows() 方法,但我收到“找不到符号”错误消息。我意识到这可能是由于我在子类中设置不正确,但我不确定那是什么。

第二个问题是在使用 c.getName() 提取角色名称的打印语句中。该语句的 c 部分给出了相同的错误消息。

在这些情况下,我是否误解了一些简单的事情?解决此问题的任何帮助将不胜感激。谢谢。

这是我的主要项目类文件:

package project;

import java.util.Scanner;

public class Project {

public static void main(String[] args) {
System.out.println("Welcome to Lands of the Sun\n");

Scanner sc = new Scanner(System.in);
String choice = "y";
while (choice.equalsIgnoreCase("y"))
{
System.out.print("Please choose your class (wizard or elf): \n");
String classChoice = sc.next();
sc.nextLine();

System.out.print("Please choose a name for your " + classChoice + ": ");
String charName = sc.next();
sc.nextLine();

int healthVal = (int) (Math.random() * 10) + 1;

switch (classChoice) {
case "wizard":
{
Character c = new Wizard();
c.setName(charName);
c.setGold(25);
c.setHealth(healthVal);
c.setSpells(10);
break;
}
case "elf":
{
Character c = new Elf();
c.setName(charName);
c.setGold(25);
c.setHealth(healthVal);
c.setArrows(10);
break;
}
}

System.out.print(c.getName());

System.out.print("Continue? (y/n): ");
choice = sc.nextLine();
System.out.println();
}
}

}

这是我的角色类:

package project;

public abstract class Character {
private String name;
private int gold;
private int health;
public static int count = 0;

public Character()
{
name = "";
gold = 0;
health = 0;
}

public Character(String name, int gold, int health) {
this.name = name;
this.gold = gold;
this.health = health;
}

public void setName(String name)
{
this.name = name;
}

public String getName(){
return name;
}

public void setGold(int gold)
{
this.gold = gold;
}

public int getGold()
{
return gold;
}

public void setHealth(int health)
{
this.health = health;
}

public int getHealth()
{
return health;
}
@Override
public String toString()
{
return "Name: " + name + "\n" +
"Gold: " + gold + "\n" +
"Health: " + health + "\n";
}

public static int getCount()
{
return count;
}

public abstract String getDisplayText();
}

这是我的向导子类:

package project;

public class Wizard extends Character {
private int spells;

public Wizard()
{
super();
spells= 0;
count++;
}

public void setSpells(int spells)
{
this.spells= spells;
}

public int getSpells(){
return spells;
}

@Override
public String getDisplayText()
{
return super.toString() +
"Spells: " + spells+ "\n";
}
}

最后是我的 Sprite 子类:

package project;

public class Elf extends Character{
private int arrows;

public Elf()
{
super();
arrows = 0;
count++;
}

public void setArrows(int arrows)
{
this.arrows = arrows;
}

public int getArrows(){
return arrows;
}

@Override
public String getDisplayText()
{
return super.toString() +
"Arrows: " + arrows + "\n";
}
}

最佳答案

当您创建一个角色时...

Character c = new Elf();

您将实例向下转换为“表现”为Character,这是面向对象编程中非常有用的功能,但在这种情况下会导致您出现问题,如Character没有您正在寻找的方法。

相反,首先将类分配给实例的具体版本...

Elf elf = new Elf();

应用您需要的属性,然后将其分配给Character 引用...

Character c = null;
//...
switch (classChoice) {
//...
case "elf":
{
Elf elf = new Elf();
//...
c = elf;
}
}
c = elf;

例如...

查看关于 Polymorphism 的部分了解更多详情

关于java - 在 Java 应用程序中找不到符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25006609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com