繁体   English   中英

Java:实例访问和输入System.in

[英]Java: instance access and input System.in

我必须根据实例提出问题,并使用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.damageSwordnameSword.damageSword错误,我认为它不理解这是一个变量...我该如何解决?

希望你能帮我!

您的剑班似乎负责跟踪3件事情:

  1. 每把剑的名字
  2. 每把剑的伤害
  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);
}

如果您需要从任何地方访问剑的伤害,则应该有一个公共方法返回此信息:

public int getDamage() {
    return this.damageSword;
}

(请注意,我将方法命名为getDamage() ,而不是getDamageSword() 。该方法位于Sword类中。到处乱放剑是无用的,只会增加噪音,并使代码的可读性降低)。

关于第二个问题。 是的,System.in是标准输入流。 toString()不会返回用户输入的内容。 阅读该类的javadoc以了解其工作原理。 另请阅读Java IO教程 ,其中包含有关命令行的部分。

关于最后一部分,您的代码尝试获取String的损坏。 琴弦没有损坏。 剑有伤害。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM