Java不是在不包含main的不同类中打印

时间:2014-10-21 21:43:34

标签: java

我一直在尝试使用此代码进行OOP。我刚刚开始使用斯坦福大学的CS106A,因为它使用的是ACM库,语法可能有些偏差。

所以,这是javadoc,http://cs.stanford.edu/people/eroberts/jtf/javadoc/student/acm/program/ConsoleProgram.html

我使用两个名为" itunes"和"测试"。 "测试"是包含" main"的类,但在这里它使用" run"方法类似于" main"方法

头等,"测试"

import acm.program.ConsoleProgram;

public class test extends ConsoleProgram{
    public void run(){

        itunes song1=new itunes("acdc",1991);
        song1.displaySong();

    }
}

第二课," itunes"

import acm.program.ConsoleProgram;

public class itunes extends ConsoleProgram {
    private static String name;
    private static int year;

    public itunes(String name1,int year1){
        name = name1;
        year = year1;
    }

    public void displaySong(){
        println(name);
        println(year);

    }
}

它编译没有错误但控制台上没有任何内容。空白。 但是,如果我将这些值返回运行然后在运行中显示它,它就可以工作。不知道为什么会发生这种情况?

此外,如果我想从单个函数返回字符串名称和int year,我可以这样做吗?在那种情况下,返回类型是什么?

2 个答案:

答案 0 :(得分:3)

您的itunes类也在扩展ConsoleProgram

这意味着,在您创建此类的实例的那一刻,将创建一个第二个控制台,该类的输出将转到该控制台。

出于这个原因,如果您return显示值(它们由第一个ConsoleProgram打印,与您当前正在查看的第一个控制台一起使用,则会看到输出。)

您应该切换控制台视图(假设是eclipse)或者不要在主程序中创建第二个ConsoleProgram。看起来像常规课程(没有扩展ConsoleProgram)会满足您的需求。


  

此外,如果我想从a返回字符串名称和int年份   单一功能,       我能这样做吗?在那种情况下,返回类型是什么?

有多种选择:

  • 您可以为每个返回的值返回一个具有特定位置的List<Object>
  • 您可以在iTunes类中使用私有属性(和getter),并在处理输入后访问您的结果(itunes.getName(); itunes.getYear();
  • 您可以创建自己的结果对象,其中包含所有必需的返回参数。
  • 以及更多...

答案 1 :(得分:1)

println()类的ConsoleProgram方法不会将对象打印到标准输出,而是将其打印到IOConsole,这是java.awt.Container必须的被添加到Frame JFrame。如果要将这些值打印到控制台,请改为使用System.out.println(...)

回答你的第二个问题。要同时返回intString,您可以将该方法的返回类型设置为Object[],但在这种情况下,您应该为itunes类创建一些Getters和Setter。 / p>