Java ArrayList和不同类的连接
我对Java很陌生。我正在尝试将这些类连接在一起。Java ArrayList和不同类的连接,java,class,arraylist,Java,Class,Arraylist,我对Java很陌生。我正在尝试将这些类连接在一起。Go类是主类,应该最终运行程序。根据Eclipse,程序不包含任何错误,但在运行时,输出为空 围棋课: public class Go { public static void main(String[] args) { Data klasseObject = new Data(); klasseObject.infoListe(); } } An
Go
类是主类,应该最终运行程序。根据Eclipse,程序不包含任何错误,但在运行时,输出为空
围棋课:
public class Go {
public static void main(String[] args) {
Data klasseObject = new Data();
klasseObject.infoListe();
}
}
Ansat
类:
import java.util.ArrayList;
public class Ansat {
public String navn;
public int alder;
public Ansat(String navn, int alder, ArrayList<Ansat> ansat){
this.navn = navn;
this.alder = alder;
}
public int getAlder() {
return alder;
}
public void setAlder(int alder) {
this.alder = alder;
}
public String getNavn() {
return navn;
}
public void setNavn(String navn) {
this.navn = navn;
}
}
实际上,您所遵循的过程是完全正确的,但是由于您没有打印arraylist,所以您的输出变为空白。只需添加下面的行,您将看到正确的输出
public void infoListe(){
ansat = new ArrayList<Ansat>();
ansat.add(new Ansat("Hej", 123, ansat));
System.out.println(ansat);
}
即使在数组列表上迭代,也会获取输出-
for (Ansat ansatLoop : klasseObject.getAnsat()) {
System.out.println(ansatLoop.getAlder() + ":"
+ ansatLoop.getNavn());
}
我希望这能解决您的查询。将
ArrayList的内容输出到控制台
public class Go {
public static void main(String[] args) {
Data klasseObject = new Data();
klasseObject.infoListe();
for(Ansat ansat : getAnsat()){
system.out.println(ansat.getNavn(), ansat.getAlder());
}
}
}
我建议只进行两次修改,以获得正确的可读输出
将以下方法添加到您的Ansat
类
//modify the returned string however you want it to appear
public String toString() {
return navn + " , " + alder;
}
然后将这一行添加到Go
class的主方法中(最后一条语句)
添加到Ansat
的toString()
类覆盖了Ansat的toString()方法,这意味着它允许您以所需的方式打印Ansat类的字段,并且每当您在Ansat对象上调用toString()
时,它都会为您打印它,如下所示:
Hej , 123
您可以更新toString()
方法以按需打印
如果您希望在ArrayList中包含多个元素,则必须执行以下更改(但是,我确实希望声明您的操作方式不正确):
这将改变您的数据类
public void infoListe(){
if(ansat != null) {
ansat.add(new Ansat("Hej", 123, ansat));
} else {
ansat = new ArrayList<Ansat>();
ansat.add(new Ansat("Hej", 123, ansat));
}
}
public void infoListe(){
if(ansat!=null){
增加(新的安萨特(“Hej”,123,安萨特));
}否则{
ansat=新的ArrayList();
增加(新的安萨特(“Hej”,123,安萨特));
}
}
如果我要检查您的代码并提出改进建议,那么我会在您的类中做以下更改(复制/粘贴以下代码Go.java文件并运行它):
import java.util.ArrayList;
公共课围棋{
公共静态void main(字符串[]args){
//在下面运行将创建位于KlasseObject内部的ArrayList
数据对象=新数据();
//创建一个Ansat(嘿,123)并将其添加到列表中
设置数据(“嘿”,123);
//创建一个Ansat(Raf,555)并将其添加到列表中
klasseObject.setData(“Raf”,555);
//创建一个Ansat(X战警,999)并将其添加到列表中
klasseObject.setData(“X战警”,999);
//只要您想要多少类,它就会将它们全部添加到列表中
//克拉塞物体
//现在我们设置了三个ansat,我们将检索列表并打印
//全部
对于(Ansat s:klasseObject.getAnsatList())
System.out.println(s.toString());
}
}
安萨特班{
公共字符串导航;
公共国际桤木;
//从构造函数中删除数组列表(不需要)
公共安萨特(字符串导航,内部导航){
this.navn=navn;
this.alder=桤木;
}
public int getAlder(){
返回桤木;
}
公共空间塞特奥尔德(内部奥尔德){
this.alder=桤木;
}
公共字符串getNavn(){
返回导航;
}
公共void setNavn(字符串navn){
this.navn=navn;
}
//将toString方法重写为pretty print Ansat对象
公共字符串toString(){
返回navn+“,”+alder;
}
}
类数据{
私人ArrayList ansat;
//添加了数据的构造函数以使用空列表初始化数据
公共数据(){
ansat=新的ArrayList();
}
//将infoListe替换为setData,并向其中添加了参数,以便
//从主方法传递它们
public void setData(字符串名,int-age){
//每次调用setData时,都会向列表中添加一个新的Ansat
安萨特a=新安萨特(姓名、年龄);
安萨特.添加(a);
}
公共阵列列表getAnsatList(){
返回安萨特;
}
}
您的代码工作正常!它没有
System.out.println();
在运行的方法中的任何位置。
如果修改infoListe()方法以添加println,它将打印出一些内容
public void infoListe(){
ansat = new ArrayList<Ansat>();
ansat.add(new Ansat("Hej", 123, ansat));
System.out.println("Element Added to ArrayList");
}
public void infoListe(){
ansat=新的ArrayList();
增加(新的安萨特(“Hej”,123,安萨特));
System.out.println(“添加到ArrayList的元素”);
}
这可能是因为您没有输出任何内容,但我已经通过数据类向ArrayList添加了信息。我希望程序输出“Hej,123”,就像在数据类中写的那样代码>添加这个System.out.println(klasseObject.getAnsat().get(0));到您的主方法,并查看您在输出中得到了什么。您没有打印任何内容。请使用S.O.P打印输出。你已经准备好了你的接受者和接受者,所以不会有太大的问题。谢谢你的回答。输出仍然不是100%正确。输出为:[Ansat@6d06d69c]“对于(Ansat-ansatLoop:klasseObject.getAnsat()){System.out.println(ansatLoop.getAlder()+”:“+ansatLoop.getNavn());}请在main方法中尝试上述代码,以便获得答案是的。非常感谢。它仍然不会打印结果,只会打印:“元素添加到ArrayList”。@XOR Manik原始代码中没有其他行可以打印任何内容。基本上,您的答案很好,谢谢。但是如果我在ArrayList中添加更多的数据,它仍然只打印“Hej,123”,您需要在列表中循环。让我用示例更新代码。@EmilMørkeberg我修改了我的答案,以展示如何在列表中添加多个Ansat对象,然后打印它们。修改代码以允许添加多个Ansat对象是一件棘手的事情,但我在上面的示例中展示了这一点。我刚才还修改了所有代码,以帮助您轻松添加Ansat对象。复制/粘贴最后一段代码并运行它,看看它是如何工作的。非常感谢您的详细回答。非常感激
Data klasseObject = new Data();
klasseObject.infoListe();
Data klasseObject2 = new Data();
klasseObject.infoListe();
Data klasseObject3 = new Data();
klasseObject.infoListe();
for(Ansat s: klasseObject.getAnsat())
System.out.println(s.toString());
public void infoListe(){
if(ansat != null) {
ansat.add(new Ansat("Hej", 123, ansat));
} else {
ansat = new ArrayList<Ansat>();
ansat.add(new Ansat("Hej", 123, ansat));
}
}
import java.util.ArrayList;
public class Go {
public static void main(String[] args) {
// running below creates an ArrayList<Ansat> that is inside KlasseObject
Data klasseObject = new Data();
// creates one Ansat(Hey,123) and add it to list
klasseObject.setData("Hey", 123);
// creates one Ansat(Raf,555) and add it to list
klasseObject.setData("Raf", 555);
// creates one Ansat(X-men,999) and add it to list
klasseObject.setData("X-men", 999);
//as many classes as you want, it would add them all to the list
//of klasseObject
// now that we set three Ansats, we will retrieve the list and print
// them all
for (Ansat s : klasseObject.getAnsatList())
System.out.println(s.toString());
}
}
class Ansat {
public String navn;
public int alder;
//remove the array list from constructor, not needed
public Ansat(String navn, int alder) {
this.navn = navn;
this.alder = alder;
}
public int getAlder() {
return alder;
}
public void setAlder(int alder) {
this.alder = alder;
}
public String getNavn() {
return navn;
}
public void setNavn(String navn) {
this.navn = navn;
}
//overrided toString method to pretty-print Ansat object
public String toString() {
return navn + " , " + alder;
}
}
class Data {
private ArrayList<Ansat> ansat;
// added the constructor for Data to initialize Data with empty list
public Data() {
ansat = new ArrayList<Ansat>();
}
//replaced infoListe to setData and added args to it so you can
//pass them from main method
public void setData(String name, int age) {
// every time setData is called a new Ansat is added to list
Ansat a = new Ansat(name, age);
ansat.add(a);
}
public ArrayList<Ansat> getAnsatList() {
return ansat;
}
}
System.out.println();
public void infoListe(){
ansat = new ArrayList<Ansat>();
ansat.add(new Ansat("Hej", 123, ansat));
System.out.println("Element Added to ArrayList");
}