我有一个使用数组的赋值,但我似乎无法打印出正确的结果。赋值要求创建一个具有允许用户执行以下功能的类:
1-为无数人插入姓名,年龄和体重,直到输入名称“已完成”。
2-它应该能够显示所有人的姓名,年龄和体重,从最轻的体重到最重的体重。
3-用户还应该能够显示他们搜索过的人的年龄和体重(如果存在)。
这是我到目前为止所得到的:
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
ArrayList<Persons> peopleAr = new ArrayList<Persons>();
Persons ewPeople = new Persons();
ewPeople.name = "Peter";
ewPeople.age = 20;
ewPeople.weight = 70.0;
peopleAr.add(ewPeople);
for (int i = 0; i < peopleAr.size()+5; i++) {
System.out
.println("Enter the number of the action you'd like to preform:");
System.out.println("1. Add new profile.");
System.out.println("2. View all prfiles (lightest to heaviest).");
System.out.println("3. Search for a person.");
System.out.println("4. Exit.");
int key = kb.nextInt();
switch (key) {
case 1:
System.out
.println("Enter the required information. Enter 'finished' in the name field to "
+ "return to main menu. ");
Persons newPeople = new Persons();
newPeople.name = "abc";
while (!newPeople.name.equals("finished")) {
System.out.println("Enter name: ");
newPeople.name = kb.next();
System.out.println("Enter age: ");
newPeople.age = kb.nextInt();
System.out.println("Enter weight: ");
newPeople.weight = kb.nextDouble();
peopleAr.add(newPeople);
}
break;
case 2:
for (int j = 0; j < peopleAr.size(); j++) {
System.out.println(peopleAr.get(i) + " "
+ peopleAr.get(i) + " " + peopleAr.get(i + 2));
}
break;
case 3:
String nameTemp = "abc";
while (!nameTemp.equalsIgnoreCase("done")) {
System.out
.println("Enter the name you'd like to search. Enter 'done' to return to main menu. ");
nameTemp = kb.next();
boolean check = peopleAr.contains(nameTemp);
if (check = true) {
int p = peopleAr.indexOf(nameTemp);
System.out.println(peopleAr.get(p) + " "
+ peopleAr.get(p + 1) + " "
+ peopleAr.get(p + 2));
} else {
System.out
.println("There is no match for your search.");
}
}
break;
case 4:
System.exit(0);
}
}
}
}
所以,第一部分有效(除了小错误)。
第二部分不会将值作为字符串返回。我已经尝试使用toString()
方法并将对象转换为带循环的字符串,但它们都不起作用。我需要一些帮助,将对象显示为字符串而不是“lab04.Persons@14eac69”。
第三部分也有一些问题,但我认为它们与第二个问题有关,因为编译器可能不喜欢将字符串与对象进行比较。
我知道在我的代码中有很多看起来像垃圾的东西,但它们可以将各种东西放在一起,否则我会收到错误。我想在选择小错误并清理代码之前修复主要功能。
答案 0 :(得分:0)
您可以使用ArrayList
动态添加新的Person对象。
ArrayList为您提供了许多有用的选项,例如:
因此,对于您的任务,您可以实现目标:
通过Scanner
或GUI界面询问用户姓名,年龄和体重。 (可能与Swing
)。可以在此处找到使用Scanner
类的示例:Scanner Example。然后,您应该将它们包装在Person数据模型类中,并将此对象添加到ArrayList
。
要根据人物的权重对创建的ArrayList
进行排序,您应该实施Comparator
。可以在此处找到一个示例:Comparator Example
最后但并非最不重要的是通过Scanner
向用户询问搜索到的人员,并使用ArrayList
中的contains方法实际搜索该对象。您始终可以编写自己的hash()
和equals()
方法来控制contains()
方法的工作方式。可以在此处找到一个示例:Search ArrayList example
答案 1 :(得分:-1)
您可以使用List对象和add()
方法向该列表中添加更多实体。
但是,由于您必须添加多个值,因此您应该创建包含其他列表的List,或者您可以实现其他类型的二维结构。
答案 2 :(得分:-1)
首先,定义班级人员
public class People
{
public String name = "";
public int age ;
public double weight;
}
其次,定义类People的列表
List <People> peopleArray = new ArrayList < People> ();
// create a new people
People newPeople = new People();
newPeople.name = "Peter";
newPeople.age = 20;
newPeople.weight = 70.0;
// add it to array
peopleArray.add(newPeople );