英文:
Getting & displaying the highest score & names from an arraylist
问题
import java.util.*;
public class test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String name, gender;
int score;
ArrayList<String> nameArray = new ArrayList<String>();
ArrayList<Integer> scoreArray = new ArrayList<Integer>();
ArrayList<String> genderArray = new ArrayList<String>();
while (true) {
System.out.print("Enter name: ");
name = input.next();
if (name.equalsIgnoreCase("Q")) {
break;
} else {
System.out.print("Enter Score: ");
score = input.nextInt();
System.out.print("Gender: ");
gender = input.next();
System.out.println("");
genderArray.add(gender);
scoreArray.add(score);
nameArray.add(name);
}
}
// Find the highest score and its index
int highestScore = Integer.MIN_VALUE;
int highestScoreIndex = -1;
for (int i = 0; i < scoreArray.size(); i++) {
if (scoreArray.get(i) > highestScore) {
highestScore = scoreArray.get(i);
highestScoreIndex = i;
}
}
// Display the highest score and corresponding information
if (highestScoreIndex != -1) {
String highestScoreName = nameArray.get(highestScoreIndex);
String highestScoreGender = genderArray.get(highestScoreIndex);
System.out.println("Highest score is " + highestScoreName + ", with a score of " +
highestScore + ", is a " + highestScoreGender + ".");
}
}
}
英文:
i am new to programming, and to java. I couldnt figure out how arraylist works.<br>
Here are my current code:
import java.util.*;
public class test3
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String name,gender;
int score;
ArrayList<String> nameArray = new ArrayList<String>();
ArrayList<Integer> scoreArray = new ArrayList<Integer>();
ArrayList<String> genderArray = new ArrayList<String>();
while (true)
{
System.out.print("Enter name: ");
name = input.next();
if (name.equalsIgnoreCase("Q"))
{
break;
}
else
{
System.out.print("Enter Score: ");
score = input.nextInt();
System.out.print("Gender: ");
gender = input.next();
System.out.println("");
genderArray.add(gender);
scoreArray.add(score);
nameArray.add(name);
}
}
///After Quitting loop, how to display the highest score & the names?
}
}
After quitting the loop, i need the program to get and display the highest score along with the names and gender. I couldnt figure out how to do this with arraylist.
Example of what i want the code to output
> Enter name: Alfred<br> Enter Score: 60<br> Gender: Male<br>
>
> Enter name: Tina<br> Enter Score: 86<br> Gender: Female<br>
>
> Enter name: Ben <br> Enter Score: 95 <br> Gender: Male <br>
>
> Enter name: q<br> Highest score is Ben, with a score of 95, is a Male.
Sorry if i dont explain my question well, if anyone could help i would be gratefull!
Thanks
答案1
得分: 2
以下是翻译好的内容:
最好创建一个类来存储每个人的信息
class Person {
String name;
Integer score;
String gender;
// 构造函数,获取器,设置器
}
然后创建一个 Person 的 ArrayList
ArrayList<Person> list = new ArrayList<>();
然后在循环中输入后可以添加到列表中
list.add(new Person(name, score, gender));
您可以使用带有比较器的 Collections.max
来获取最高分的人员信息
Person maxScoredPerson = Collections.max(list, Comparator.comparing(Person::getScore));
英文:
It's better to create a class to store information for every person
class Person {
String name;
Integer score;
String gender;
// constructor, getter, setter
}
And create an ArrayList of Person
ArrayList<Person> list = new ArrayList<>();
Then you can add in the list after taking input in loop
list.add(new Person(name, score, gender));
You can use Collections.max
with a comparator to get the max scored Person information
Person maxScoredPerson = Collections.max(list, Comparator.comparing(Person::getScore));
答案2
得分: 1
另一种可能的方法是这样做。
找到最大元素的索引,假设输入是并行输入的,获取最大元素的索引,然后从其他列表中获取相应的对象:
int max = Collections.max(scoreArray);
int index = scoreArray.indexOf(max);
gender = genderArray.get(index);
name = nameArray.get(index);
System.out.println("最高分是" + name + ",得分为" + max + ",是" + gender);
英文:
Another possible way of doing it.
Find the index of the maximum element, assuming input is entered in parallel, get the index of the maximum element and then get the corresponding objects from other lists:
int max = Collections.max(scoreArray);
int index = scoreArray.indexOf(max);
gender = genderArray.get(index);
name = nameArray.get(index);
System.out.println("Highest score is "+name+", with a score of "+max+", is a "+gender);
答案3
得分: 1
你的实现存在一个根本性问题,关于一个人的信息分散在三个不同的列表中。这个示例只对练习有用。真实世界的实现应该将相关细节组织在一个类中,如下所示。
class Person {
String name;
Integer score;
String gender;
// ......
}
对于这种特殊情况,你可以找到max
的索引,然后使用该索引来找到其他信息。
///退出循环后,如何显示最高分和姓名?
Integer maxScore = Collections.max(scoreArray);
Integer index = scoreArray.indexOf(maxScore);
gender = genderArray.get(index);
name = nameArray.get(index);
System.out.println("最高分是" + name + ",得分为" + maxScore + ",是一个" + gender);
或者
如果你想自己实现(不使用Collections.max()
),可以添加一个方法来找到最大值,如下:
private int getMax(List<Integer> list) {
int max = list.get(0);
for (int i = 0; i < list.size(); i++) {
if (max < list.get(i)) {
max = list.get(i);
}
}
return max;
}
英文:
Your implementation has a fundamental problem, information about a person is scattered in 3 different lists. This example will only be useful for practice. The real world implementation should organize related details in a class as the following.
class Person {
String name;
Integer score;
String gender;
......
}
For this particular case, you can find the index of max
and use the index to find the others.
> ///After Quitting loop, how to display the highest score & the names?
Integer maxScore = Collections.max(scoreArray);
Integer index = scoreArray.indexOf(maxScore );
gender = genderArray.get(index);
name = nameArray.get(index);
System.out.println("Highest score is" + name + ", with a score of " +maxScore + ", is a " + gender);
OR
If you would like to do it by your self(not to use Collections.max()
), add a method to find the max as:
private int getMax(List<Integer> list) {
int max = list.get(0);
for(int i = 0; i < list.size(); i++) {
if(max < list.get(i)) {
max = list.get(i);
}
}
return max;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论