【问题标题】:How do you loop through several objects to find, for example, a name?您如何遍历多个对象以查找例如名称?
【发布时间】:2014-01-17 16:56:10
【问题描述】:

我创建了 4 个“Testklasse”类的对象。这些对象中的每一个都有一个名称(Ingrid、Ask、Tom、Dana),它们每个都代表一个人。我想要做的是创建不同的方法来循环遍历对象以查看它们是否相互认识,是 bf/gf,如果它们彼此喜欢等等等等。我试图创建方法 blirKjentMed(翻译:getsToKnow ),但它不起作用,我不知道从这里去哪里。 有小费吗?

import easyIO.*;
import java.io.*;
import java.util.*;

    class Oblig1{
        public static void main(String[] args){
        Testklasse t = new Testklasse();

        }

    }
    class Testklasse{

        public Testklasse(){

            Person ingrid = new Person("Ingrid", 3);
            Person ask = new Person("Ask", 3);
            Person tom = new Person("Tom", 3);
            Person dana = new Person("Dana",3);

            ingrid.blirKjentMed(ingrid);
        }
    }

    class Person{

        private String navn; 
        private Person [] kjenner;
        private Person [] kjennerIkke; 
        private Person forelsket;
        private Person sammenmed;

        Person(String n, int lengde){
            this.navn = n;
            this.kjenner = new Person[lengde];
            this.kjennerIkke = new Person[lengde];
            this.forelsket = forelsket;
            this.sammenmed = sammenmed;


        }

        public void blirKjentMed(Person ingrid){
            for(int i = 0; i < ingrid.kjenner.length; i++){
                if(ingrid.navn.equalsIgnoreCase("ingrid")){
                    continue;
                } else {
                    kjenner[i] = ingrid;
                    System.out.println(ingrid.navn + kjenner[i].navn);
                }

            }

        }

【问题讨论】:

  • 现在你的数组是空的。不确定您在getsToKnow 方法中真正想要做什么。现在,因为你将 ingrid 传递给它自己,你可能观察到它基本上什么都不做。如果你将 tom 传递给 ingrid,它会做一些事情(用 tom 填充 ingrid 的数组),但我不确定它应该完成什么。如果您可以稍微澄清一下您的描述,以便更具体地说明您要做什么,也许我们可以提供帮助。

标签: java loops object methods


【解决方案1】:

我认为这是一个家庭作业问题,因为固定大小的数组不适合代表一个人的朋友。人们可以有很多朋友,而且名单可以改变。

让我们看看Person 类。您会注意到,构造函数并不能很好地工作,因为它为forelsketsammenmed 构造了带有nullPerspn。线

this.forelsket = forelsket;  \\ Google: forelsket means lover in English.

不起作用。 forelsket 永远不会被初始化,所以在构造函数的开头,this.forelsketnull。由于forelsket没有作为构造函数参数出现,所以代码sn-p被解释为

this.forelsket = this.forelsket;

什么都不做。更好的构造函数是:

Person(final String n,         final Person forelsket,
       final Person sammenmed, final int    lengde) {
    this.navn        = n;
    this.forelsket   = forelsket;
    this.sammenmed   = sammenmed;
    this.kjenner     = new Person[lengde];
    this.kjennerIkke = new Person[lengde];
}

不过,一旦你了解了集合,摆脱 lengde 并使用 ArrayList 会更好。

接下来,您需要编写方法来操作kjennerkjennerIkke 数组(或列表)。您可以自己填写:

public void  setForelsket(final Person forelsket);
public Person getForelsket();
public void  setSammenmed(final Person sammenmed);
public Person getSammenmed();
// Return whether the addition changed anything.
public boolean addKjenner(Person kjenner);
public boolean removeKjenner(Person kjenner);
// Same for kjennerIkke.

毕竟,您可能想要创建自己的 equalshashCode 方法;这些是收藏所必需的。

【讨论】:

    【解决方案2】:

    将你的对象放入一个数组或ArrayList,然后通过它进行交互:

    for(Testklasse obj : myArray) {
        // do stuff
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多