我正在开发一个程序,提示用户输入姓名、年龄和性别。该程序应该从每个输入中给我一个姓名、年龄和性别的列表,并告诉我谁是该列表中年龄最大的人。我已经创建了一个数组列表来保存这些值,我可以使用增强循环打印出姓名、年龄和性别。我遇到的问题是让程序打印出数组列表中最高(最老)的数字。我已经创建了一个替代方法,通过创建一个只有年龄的附加数组列表来实现这一点,但是我似乎没有找到从原始数组列表中获取这一点的方法。这种替代方法只给出了额外数组中的最高数字,但是如果我想打印年龄最大的人的名字,这是行不通的。我会感谢一些帮助来解决这个问题。我真的是新来Java。
到目前为止,我的代码如下:
从个人类别:
package person;
public class Person {
private String name ;
private int age;
private String gender;
private int oldestPerson;
public Person(String name1, int age1, String gender1){
name = name1;
age = age1;
gender = gender1;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getGender() {
return gender;
}
public void changeName(String newName){
name = newName;
}
public void changeAge(int newAge){
age = newAge;
}
public void changeGender(String newGender){
gender = newGender;
}
public int getOldest(int max){
if (age > max){
max = age;
}
return oldestPerson;
}
}
来自Persontest课程:
package person;
import java.util.Scanner;
import java.util.ArrayList;
public class personTester {
public static void main(String [] args){
ArrayList<Person> personList = new ArrayList<Person>();
ArrayList<Integer> personAges = new ArrayList<Integer>(); //extra array
boolean Done = false;
Scanner input = new Scanner(System.in);
while(!Done){
System.out.println("enter a name");
String name = input.next();
System.out.println("enter an age");
int age = input.nextInt();
System.out.println("enter a gender");
String gender= input.next();
personList.add(new Person(name, age, gender)); //put a person inside an arraylist
personAges.add(new Integer(age));
System.out.println("Press Y to exit or N to continue");
String choice = input.next();
if(choice.equalsIgnoreCase("Y")){
Done=true;
}
}
for(Person e :personList){
System.out.println("Name: "+e.getName() +" - Age: "+ e.getAge()+" -
Gender: " + e.getGender());
} // getting the highest number from the aditional array.
int max = 0;
for (int ages: personAges){
if (ages > max){
max = ages;
}
}
System.out.println("The oldest person in the list is " + max);
}
}
我创建了一个人的测试列表来说明我的解决方案:
List<Person> persons = new ArrayList<>();
persons.add(new Person("Kees", 100, "M"));
persons.add(new Person("Kees", 0, "V"));
persons.add(new Person("Kees", 10, "V"));
persons.add(new Person("Kees", 1, "M"));
然后,使用Java 8流,您可以根据人的年龄(使用
reversed()
)进行排序,然后得到第一个结果:
Person oldest = persons.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.findFirst().get();
在Person类中添加了一个标准的
toString()
方法来打印结果
System.out.println(oldest);
它现在打印:
Person [name=Kees, age=100, gender=M]
打印人员列表详细信息的另一种方法是使用
forEach()
而不是for循环
persons.forEach(p -> System.out.println(p.getName() + " " + p.getAge() + " " + p.getGender()));
您可以使用比较器按年龄对列表进行排序,并获得最旧的列表,例如:
String choice;
do {
System.out.println("enter a name");
String name = input.next();
System.out.println("enter an age");
int age = input.nextInt();
System.out.println("enter a gender");
String gender = input.next();
personList.add(new Person(name, age, gender)); //put a person inside an
System.out.println("Press Y to exit or N to continue");
choice = input.next();
} while (choice.equalsIgnoreCase("Y"));
Collections.sort(personList, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println("The oldest person in the list is " +
personList.get(personList.size()-1).getName() +
" His/Her age is " + personList.get(personList.size()-1).getAge());
想象一下下面的现实场景:有一群人彼此一无所知,而你作为旁观者想知道谁是最年长的。你不能问一个人:你是最大的吗?因为他们不知道团队中其他人的年龄。
取而代之的是,你必须询问每个人的年龄,并在此基础上确定谁是最大的。
所以在你的代码中,应该从Person中删除私有int oldecPerson;
字段和公共int getOldest(int max)
方法。他们不知道他们是否最老,他们只能给你他们的age
。
你(程序员)应该向所有人询问年龄,并根据年龄确定谁最老。
因此,请更改代码的这一部分:
int max = 0;
for(int ages : personAges){
if(ages > max){
max = ages;
}
}
System.out.println("The oldest person in the list is " + max);
对此:
int maxAge = 0;
for(Person p : personList){
int pAge = p.getAge();
if(pAge > maxAge){
maxAge = pAge;
}
}
System.out.println("The oldest person in the list is " + maxAge + " years old");
您也可以删除ArrayList
这样,您就可以从这些人那里获得年龄(使用getter
getAge()
并将其存储在maxAge
中)。
问题内容: 我有一个ResultSet返回不同类型的数据。该查询是动态构造的,因此在编译时,我不知道查询将返回哪种类型的值。 假设所有结果都是字符串,我编写了以下代码。但是我也想获取每个值的类型。我怎样才能做到这一点? 以下是我编写的代码。 此时,我想获取列类型,并根据数据类型获取值。 问题答案: 所述返回一个指定列类型值发现。 例:
问题内容: 有一个ArrayList存储整数值。我需要在此列表中找到最大值。例如,假设arrayList存储的值为:,最大值为。 寻找最大值的有效方法是什么? @Edit:我只是找到一个不确定的解决方案 这将返回最大值。 比较每个值的另一种方法,例如 问题答案: 你可以使用轻松实现所需的内容- 高效阅读 -足够的 Javadoc for Collections.max 根据其元素的自然顺序返回给定
问题内容: 这是我的数据框df 我正在尝试从数据帧的每一行中获取最大值,我期望这样的输出 这就是我尝试过的 我没有得到正确的输出,任何帮助将不胜感激。谢谢 问题答案: 使用有: 如果需要新列:
我有两个具有FK关系的表。我想要的相当于: 我如何在jOOQ中有效地做到这一点?最后,每个结果行需要一个ARecord实例和一个BRecord实例。
这是正确的工作,但它绘制了许多标记的坐标小于600米的用户的位置。我想要的是只在折线的最近点画一个标记。某种程度上评估来自用户的<600的所有coord,然后选择最接近的。感谢任何帮助。