【问题标题】:JAVA ArrayList Class Instance member check is member existsJAVA ArrayList 类实例成员检查是否成员存在
【发布时间】:2017-04-26 20:35:49
【问题描述】:

我现在尝试解决大约一周的问题,但几乎没有解决任何问题。因此我决定问“强大”的 Stackoverflow。抱歉,如果这对于有经验的 JAVA 编码人员来说似乎微不足道。

我有一个扩展自定义类的 ArrayList 对象。我的课程称为“AddMitglied”,旨在将成员存储在我的程序中。用户将添加新成员,并将它们存储在 ArrayList 中。

包mitgliederverwaltung;

public class AddMitglied {

  public String addLastName;
  public int addmemberNumber;
  public String addFirstName;
  public String adddateobBirth;
  public String addstreet;
  public int addNumber;
  public int addPlz;
  public String addtown;
  public String addEmailadresse;
  public int addTelefonnumber;

    AddMitglied(String addLastName,int addmemberNumber,String addFirstName,
                String adddateobBirth,String addstreet,int addNumber,
                int addPlz,String addtown,String addEmailadresse,
                int addTelefonnumber)
    {
        this.addLastName = addLastName;
        this.addmemberNumber = addmemberNumber;
        this.addFirstName = addFirstName;
        this.adddateobBirth = adddateobBirth;
        this.addstreet = addstreet;
        this.addNumber = addNumber;
        this.addPlz = addPlz;
        this.addtown = addtown;
        this.addEmailadresse = addEmailadresse;
        this. addTelefonnumber = addTelefonnumber;
    }  
}

显然我想获取某种会员编号(public int addNumber)以便能够通过

获取每个会员
mitgliederliste.get(i).addNumber

到目前为止一切顺利,.. 我可以添加成员。我还想在用户输入新成员时检查成员编号是否已经存在。 为了检查程序中是否输入了“int”,我编写了以下方法:

public static int validateinputUser(){

        System.out.println("give a number (only numeric values allowed): ");  
        Scanner inputUser = new Scanner(System.in);
            int inputnumber = 0;

                while (!inputUser.hasNextInt()) 
                    {
                        inputUser.next();
                        System.out.println("please enter numeric value");
                    }
                inputnumber = inputUser.nextInt();
                return 0;
        }
    }

到目前为止,这也很好用。现在我的问题是如何检查用户输入是否为数字并检查该数字是否已存在于我的 Arraylist 中以避免使用相同用户号的多个用户...我搜索了大量但不知何故没有找到合适的解决方案。

我在这里找到的是以下问题:Check if a value exists in ArrayList。在那里我了解到有一种所谓的“包含”方法。但在那里他已经知道要使用哪一个。我不能使用“包含”方法,因为我必须以某种方式遍历所有成员并检查是否已经有成员编号。如果是这样,用户必须留在循环中以强制他选择另一个。

我在网上找到了一个网站,告诉我如何做到这一点:http://crunchify.com/how-to-iterate-through-java-list-4-way-to-iterate-through-loop/ 但他在那里用字符串迭代了一个 ArrayList,这很简单,但并不直接指向我的问题。那里提到的一个方法是

java.util.stream.Stream.forEach

但不知道如何在我的具体示例中使用它。

【问题讨论】:

  • " 我不能使用 "contains" 方法,因为我必须以某种方式循环" 为什么?你这部分问题不清楚

标签: java arraylist


【解决方案1】:

如果我理解正确,如果当前用户尚未使用 addNumber,您希望用户仅在 mitgliederliste 内大声说话。

您需要检查用户选择的addNumber是否与mitgliederliste中的当前用户无关。

public static boolean isValid(int inputnumber, ArrayList mitgliederliste) {
  for (AddMitglied a : mitgliederliste) {

     if (a.addNumber == inputnumber) {

      return false;
     }
  }
 return true;

}

将它包含在您的 while 循环中;

int inputnumber = 0;

while (inputnumber == 0 || !isValid(inputnumber)) {

  while (!inputUser.hasNextInt()) {                        
      inputUser.next();
      System.out.println("please enter numeric value");
  }
  inputnumber = inputUser.nextInt();
}

【讨论】:

  • 您好,非常感谢,这就是我的意思。但不知何故,在我的代码中实现这些方法时,我遇到了范围界定问题。 NetBeans 要求我定义一个局部变量“mitgliederliste”。我找到了这个stackoverflow.com/questions/10976212/…,但不知道该怎么做。我在谷歌上找不到任何东西可以使 ArrayList 全局化,以便我的类中的所有方法都可以直接访问它。
  • mitgliederliste 是您的AddMitglied 集合,将其作为参数添加到isValid
  • 我更新了答案。如果您使用菱形表示法,则参数类型可能是 ArrayList<AddMitglied>
  • 谢谢 nevabyte,.. 我不得不用谷歌搜索并弄清楚某些事情,但现在它工作得非常好:-)
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 2010-09-17
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多