我必须根据实例和使用System.in输入的问题。
首先是实例:
我创建了一个名为woodenSword
的实例变量,其中包含:
Sword woodenSword=new Sword("Wooden Sword", 2);
public Sword(String nameSword, int damageSword){
this.nameSword=nameSword;
this.damageSword=damageSword;
numberOfSwords++;
}
现在,我想访问damageSword,但我该怎么做?我试过了woodenSword.damageSword,但显然这不起作用......我认为这是因为我制作了变量private
,但我不想改变它,因为我在某处读到它更好保留变量private
。 (还有一个附带问题:为什么保持变量私有更好?)
还有一个问题:我怎样才能获得System.in
的输入?是否必须使用System.in.toString()
完成?
我应该使用这个功能吗?要从类中获取私有变量,并将该函数放在类中? 我想到了这个功能:
public static int getSwordStats(String nameSword){
damageSword=nameSword.damageSword;
}
但是,我在nameSword.damageSword
上收到错误,我认为它不明白它是一个变量......我该如何解决这个问题?
希望你能帮助我!
答案 0 :(得分:3)
看起来你的剑类负责跟踪三件事:
前两个需要是成员变量,而最后一个需要是静态变量。
public class Sword {
// private (so no one can access it but Sword)
// static (so it belongs to the class Sword and not any specific Sword)
private static int numberOfSwords = 0; // initialize to 0
// public accessor method
public static int getNumberOfSwords() {
return numberOfSwords;
}
// notice there's no "setNumberOfSwords" - no one can come along and change
// our data - it's 'encapsulated' in the class
private String name; // private
private int damage; // private
public Sword(String name, int damage) {
this.name = name;
this.damage = damage;
numberOfSwords++; // the only place we change number of swords
}
// this is how people outside Sword access the name
// note that we could add a "setName(String name)" if we want
public String getName() {
return name;
}
// same with name - protect and provide an accessor
public int getDamage() {
return damage;
}
}
在以后的课程中,您现在可以执行此操作:
Sword wood = new Sword("Wooden Sword", 2);
System.out.println("wood's name is " + wood.getName());
System.out.println("wood's damage is " + wood.getDamage());
System.out.println("swords crafted so far: " + Sword.getNumberOfSwords());
Sword mithril = new Sword ("Mithril Sword", 10);
System.out.println("mithril 's name is " + mithril .getName());
System.out.println("mithril 's damage is " + mithril .getDamage());
System.out.println("swords crafted so far: " + Sword.getNumberOfSwords());
将打印
Wooden Sword
2
1
Mithril Sword
10
2
对于您的第二个问题,有一些很好的资源,我相信Google可以帮助您找到。作为一个简单的例子,这就是我的工作:
// assumes you "import java.util.Scanner"
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
String line = sc.nextLine();
System.out.println("You typed: " + line);
}
答案 1 :(得分:1)
如果您需要从任何地方获取剑的伤害,那么您应该使用公共方法返回此信息:
public int getDamage() {
return this.damageSword;
}
(请注意,我将方法命名为getDamage()
,而不是getDamageSword()
。该方法位于Sword类中。将剑放在任何地方都是无用的,只会增加噪音,并使代码不易读取)。
关于你的第二个问题。是的,System.in是标准输入流。 toString()不会返回用户输入的内容。阅读该类的javadoc以及它是如何工作的。另请阅读Java IO tutorial,其中有一节关于命令行。
关于最后一部分,您的代码会尝试获取String的损坏。字符串没有损坏。剑有伤害。