我一直在尝试使用此代码进行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,我可以这样做吗?在那种情况下,返回类型是什么?
答案 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(...)
。
回答你的第二个问题。要同时返回int
和String
,您可以将该方法的返回类型设置为Object[]
,但在这种情况下,您应该为itunes
类创建一些Getters和Setter。 / p>