繁体   English   中英

程序输出问题

[英]Program Output Issue

我为冗长的提交道歉,但我在使这个程序正常工作方面遇到了一些困难。

还有另一个驱动程序运行这个程序,它要求我打印出魔术师的名称,等级,用品等(给定某些参数)。

但是,当我使用toString()方法打印出String时。 我不断对我的名字/等级/用品得到“空”回复。 我的号码似乎也没有更新。

有人可以看一看,看看我做错了什么?

我似乎无法让程序拿起魔术师的参数。

public class Magician
{
    private String name, level, supplies;  
    private int galleons;   
    private double health;

    public Magician(String initialValues)
    {   
        double health = 1000;
        int galleons = 200;
        initialValues = name + "#" + level + "#" + supplies;
    }

    public String toString()
    {
        return "Name: " + name+
        "Level: " + level +
        "Galleons: " + galleons +
        "Health: " + health +
        "Supplies: " +supplies; 
    }
}  

这是我无法打印出来的Driver程序的开头:

public class MagicAndMalice
{
    public static void main (String[] args) 
    {
        Magician harry = new Magician("Harry Potter#apprentice#Owl#Wand");
        System.out.println(harry);  // test toString() method
        System.out.println("------------------------\n\n");
    }
}

首先,你再次宣布healthgalleons 您不应该再次声明它们,只需分配值:

health = 1000;
galleons = 200;

而且,似乎你对任务感到困惑。 如果要为namelevelsupplies分配一些值,则必须执行以下操作:

name = ...;
level = ...;
supplies = ...;

如果initialValues将包含类似"a#b#c"的字符串,并且您希望将每个“part”分配给这些变量,则可以使用String#split()

String[] parts = initialValues.split("#");

name = parts[0];
level = parts[1];
supplies = parts[2];

我真的建议你阅读一本书或者阅读一些Java教程,这样你就可以先了解基础知识。

当您创建对象时

Magician harry = new Magician("Harry Potter#apprentice#Owl#Wand");

只有双倍health = 1000; int galleons = 200; 将initialed作为一些值。

然后调用toString()方法

public String toString()
         {
         return "Name: " + name+
         "Level: " + level +
         "Galleons: " + galleons +
         "Health: " + health +
         "Supplies: " +supplies; 
          }

返回某些字段的值null ,因为它根本没有初始化。

我认为更改构造函数以获取单独的参数而不是必须拆分的一个字符串可能更有意义。

public Magician(String name, String levels, String supplies, int gallons, double health) {
    this.name = name;
    this.levels = levels;
    ...
}

注意前缀“this”。 这可以防止类的成员变量和传递给构造函数的参数之间的名称冲突。

你很想念Java中的赋值事项。 你不需要像#这样的分隔符,但是如果你这样做,你需要在构造函数中包含例如给定的String。

这是一个简短的(未经测试的)版本,应该澄清我的意思:

public class Magician {
    private String name, level, supplies;
    private int galleons;   
    private double health;

    public Magician(String name, String level, String supplies) {
        health = 1000;
        galleons = 200;
        this.name = name;
        this.level = level;
        this.supplies = supplies;
    }

    // Let's do some Constructor overloading here
    public Magician(String initialValueString) {
        String[] initialValues = initialValueString.split("#");
        this(initialValues[0], initialValues[1], initialValues[2]);
    }

    public String toString() {
        return "Name: " + name +
         "Level: " + level +
         "Galleons: " + galleons +
         "Health: " + health +
         "Supplies: " + supplies; 
    }
}


public class MagicAndMalice {
    public static void main (String[] args) {
        // Method one
        Magician harry = new Magician("Harry Potter", "apprentice", "Wand");
        System.out.println(harry);
        System.out.println("------------------------\n\n");

        // Method two
        Magician ron = new Magician("Ron Weasley#apprentice#Owl");
        System.out.println(ron);
        System.out.println("------------------------\n\n");
     }
}

如果您希望在supplies字段中拥有的值不仅仅是一个,请查看数组或尝试使用某些正则表达式拆分/替换值。

希望这有助于更清楚地了解Java中的变量赋值。

暂无
暂无

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

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