如何检查数组中匹配的int值/ String值?

时间:2019-07-12 04:35:25

标签: java arrays for-loop

要求我们编写代码,并输入4个人的姓名和年龄。之后,我们需要查找是否年龄匹配。稍后的问题询问名称是否匹配,但是我还没有提到这一部分。

我尝试制作一个数组,以便可以存储输入年龄的值。我无法弄清楚如何将age的值与数组中的其他元素进行比较。

package person;

public class Person 
{
    static int personAge;
    String personName;

    public void setName(String name) {
        name=personName;
    }

    public String getName() {
        return personName;       
    }

    public void setAge(int age){
        age=personAge;
    }

    public int getAge() {
        return personAge;
    }
}

package person;

import java.util.Scanner;

public class PersonMain extends Person
{
    static int [] ageStore=new int [4];

    public static void main(String[] args) 
    {
        for(int i=1;i<5;i++)
        {
            Person person= new Person();

            person.setName(person.personName);

            System.out.println("Please enter name for person " + i );

            Scanner input= new Scanner(System.in); 
            person.personName=input.next();
            Scanner keyboard= new Scanner(System.in);
            System.out.println("Now, input " + person.personName + "'s age" );
            person.setAge(personAge);
            personAge=keyboard.nextInt();
            ageStore[i]=person.personAge;
            System.out.println("Age is " + ageStore[i]);
        }
        //what can help me compare the values of int age in the array? 
    }
}

这里的最终目标是打印出年龄相同的人的名字。

2 个答案:

答案 0 :(得分:2)

当然,它们的年龄都相同:personAge被声明为static。删除声明前面的static关键字。

更新:是的,使用getter和setter代替直接访问字段。

总结:

  • 删除static声明前面的personAge关键字,
  • personAgepersonName声明为private,以确保您使用getter和setter,
  • 删除extends Person类中的PersonMain
  • 在方法main中,使用getter和setter代替直接访问字段。

更新2:哦!是!一些其他问题:

  • 在设置器中,将参数分配给字段,而不是相反的方式(personName=name;personAge=age)。
  • 变量i应该从0到3,因为声明数组的大小为4:for(int i=0;i<4;i++)或更好:for(int i=0;i<ageStore.length;i++)
  • Scanner声明和初始化移出循环,并仅使用其中之一。

答案 1 :(得分:1)

如果要收集以后处理所需的信息,则需要存储所有这些信息。

目前,您将年龄存储在一个数组中,但会丢弃这些名称。

因此,与其保留这样的年龄数组:

static int [] ageStore=new int [4];

...尝试保留一组“人”。另外,您无需将其保留在main方法之外。因此,在主要方法中:

Person[] persons = new Person[4];

还请修复Person类,以使年龄不是静态的并且变量是私有的:

private int personAge;
private String personName;

现在创建一个扫描仪,因为您不需要每个循环或每个输入一个扫描仪:

Scanner input= new Scanner(System.in);

然后创建您的循环,但是将其从0运行到小于要填充的数组的长度(因为Java中的索引从0开始):

for (int i = 0; i < persons.length; i++) {

然后创建一个新的Person对象以填充:

Person person = new Person();

然后从用户那里收集姓名和年龄(记住i比要向用户显示的内容少1):

System.out.println("Please enter name for person " + (i + 1) );
person.setName(input.next());

System.out.println("Now, input " + person.getName() + "'s age" );
person.setAge(input.nextInt());

并将此人添加到数组:

persons[i] = person;

然后您可以关闭循环。

到目前为止,您应该拥有:

package person;

import java.util.Scanner;

public class PersonMain {

    public static void main(String[] args) {
        Person[] persons = new Person[4];

        Scanner input= new Scanner(System.in);

        for (int i = 0; i < persons.length; i++) {

            Person person = new Person();

            System.out.println("Please enter name for person " + (i + 1) );
            person.setName(input.next());

            System.out.println("Now, input " + person.getName() + "'s age" );
            person.setAge(input.nextInt());

            persons[i] = person;
        }

        // matching code will go here
    }
}

现在我们需要进行匹配。

执行此操作的一种方法是对照列表中位于其后的所有项目检查每个项目。看起来像这样:

for (int i = 0; i < persons.length - 1; i++) { // until 'persons.length - 1' because if we look at the last item, it has nothing left to compare against
    Person currentPerson = persons[i];

    for (int j = i + 1; j < persons.length; j++) { // start at the next index (i + 1)

        if (currentPerson.getAge() == persons[j].getAge()) { // we have an age match
            System.out.println(currentPerson.getName() + " has the same age as " + persons[j].getName());
        }

    }
}