我正在尝试做一个程序,可以添加客户的姓名,年龄,联系电话和电子邮件。我想搜索用户想要的名字,但即使我输入了完全相同的名字,它也不会搜索这个名字。我怎样才能解决这个问题?
这是我的代码:
package com.company;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<customers> customers = new ArrayList<>();
customers.add(new customers("Zen",19,"0912121212","zen@gmail.com"));
customers.add(new customers("Mary",20,"09134343434","mary@gmail.com"));
System.out.println("Enter name: ");
String name = scan.nextLine();
System.out.println(customers.contains(name));
}
}
class customers{
private String name;
private int age;
private String contactNumber;
private String email;
public customers(String name, int age, String contactNumber, String email) {
this.name = name;
this.age = age;
this.contactNumber = contactNumber;
this.email = email;
}
}
为您的类添加另一个构造函数(仅用于名称),并以相同的名称迭代数组列表中的所有对象
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<customers> customers = new ArrayList<>();
customers.add(new customers("Zen",19,"0912121212","zen@gmail.com"));
customers.add(new customers("Mary",20,"09134343434","mary@gmail.com"));
System.out.println("Enter name: ");
String name = scan.nextLine();
customers obj = new customers(name);
customers toBeChecked;
for (int i=0; i<customers.size(); i++) {
toBeChecked = customers.get(i);
if(toBeChecked.getName().equals(obj.getName())) {
System.out.println("Same name");
}
}
}
}
class customers{
private String name;
private int age;
private String contactNumber;
private String email;
public customers(String name, int age, String contactNumber, String email) {
this.name = name;
this.age = age;
this.contactNumber = contactNumber;
this.email = email;
}
public customers (String name) {
this.name = name;
}
public String getName() {
return name;
}
}
name
是一个String
。您的List
包含客户
实例,而不是String
s。因此您的List
不包含name
。
为了通过另一种类型的键查找一种类型的实例,您可以使用Map
:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Map<String,customers> customers = new HashMap<>();
customers.put("Zen",new customers("Zen",19,"0912121212","zen@gmail.com"));
customers.put("Mary",new customers("Mary",20,"09134343434","mary@gmail.com"));
System.out.println("Enter name: ");
String name = scan.nextLine();
System.out.println(customers.containsKey(name));
}
或者,如果您想搜索具有特定名称的客户实例,可以迭代列表中的元素(使用循环或流)。
例如:
System.out.println(customers.stream().anyMatch(c -> c.getName().equals(name)));
这是假设您的客户类有一个getter方法。
<代码>列表。contains()使用对象。equals(),以确定对象是否已在该列表中。
因此,一种方法可能是覆盖该方法:
public class Customer
{
private String m_Name;
private int m_Age;
…
@Override
public final boolean equals( final Object o )
{
return o instanceof String name && name.equals( m_Name );
}
}
尽管这将起作用,但不建议以这种方式实现equals()
(请参阅此处作为起点)。
相反,您应该在列表中搜索名称:
String name = scan.nextLine();
System.out.println( customers.stream().anyMatch( c -> c.getName().equals( name ) ) );
另一种完全不同的方法是将客户对象存储在地图实例中,而不是存储在列表实例中,以名称为键:
public class Main
{
public static void main( String... args )
{
Scanner scan = new Scanner(System.in);
Map<String,Customer> customers = new HashMap<>();
var customer = new Customer( "Zen", 19, "0912121212", "zen@gmail.com" );
customers.put( customer.getName(), customer );
customer = new Customer( "Mary", 20, "09134343434", "mary@gmail.com" );
customers.put( customer.getName(), customer );
System.out.println( "Enter name: " );
String name = scan.nextLine();
System.out.println( customers.containsKey( name ) );
}
}
最后,如果您遵循Java语言的基本命名约定,通常会有所帮助:类名以大写字母开头。
问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么
问题内容: Javadoc的方法 doInBackground方法完成后,在事件调度线程上执行。 我已经暗示,对于被取消的工人,情况并非如此。 在每种情况下都会被调用(正常终止或取消),但是当它 未排入 EDT时(通常终止会发生这种情况)。 在取消a的情况下,何时调用有更精确的分析吗? 澄清:这个问题是 不是 就如何一个。在此假定以正确的方式取消。 它是 不是 什么时候他们应该完成的线程仍在工作。
问题内容: 为什么要退货我可以ping通IP。 问题答案: 在很多情况下,方法对我来说并不值得使用。你可以滚动到底部以查看我的替代方法,该方法可以简单地测试你是否在线并且能够解析外部主机(例如google.com)…这似乎通常可以在机器上使用。 问题 关于此有很多chat不休: 这是其他类似的问题: 使用Java检测互联网连接 如何使用Java测试互联网的可用性? 甚至在同一件事上有报告的错误:
问题内容: 在下面的代码中,如果字符串在方法调用之前出现,为什么方法在字符串之前输出?为什么它会跳出输出方法的第一部分的形式,然后离开方法以输出字符串,然后返回到方法以输出方法的返回值? 码: 输出: 问题答案: 首先要注意的是,当对两个操作数使用a时,两个操作数之一是a ,表达式的结果是a 。 因此,在以下方法中调用表达式 您正在调用,因为它是type的变量。注意该方法如何接受单个参数。因此,
问题内容: 我正在使用a 检查我的哈希密码。我有PHP 5.5: 我上车了。我已经检查了posts的值和mysql user_password_hash返回。 我不知道为什么它返回假 有任何想法吗? 问题答案: 手册中的列长度可能是问题所在: 建议将结果存储在可扩展超过60个字符的数据库列中(255个字符是一个不错的选择)。 链接
这个程序可以工作,但我不确定为什么使用的方法必须在方法头中包含。只是作为背景,程序接受一个文本文件,读取它并将其内容保存到(games)中。用户输入文件名和球队名,程序输出特定球队打了多少场比赛,赢了多少场比赛,输了多少场比赛。 它读取的.csv具有以下格式: 下面的所有四个方法(一个返回,另三个返回s),除非我在方法头中输入关键字。如果我只为方法编写或,它们将无法工作。 当被传递到方法中时,是否