我必须制作一个Java Program
,用户输入学生总数,所以我制作了这段代码:
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
int numReaders = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of magazin readers:");
numReaders = scan.nextInt();
现在,在添加学生总数后,我们应该将他们的名字添加到一个数组中:
//Creating an array of names, where the length is the total number entered by the user
String[] nameStr = new String[numReaders];
int[] ages = new int[numReaders];
for(int i=0; i<numReaders; i++)
{
Scanner n = new Scanner(System.in);
System.out.println("Enter the name of reader: "+i);
nameStr[i] = n.next();
}
之后,我们应该相应地添加每个名称的年龄,所以我做了这部分代码:
for(int i=0; i<numReaders; i++)
{
Scanner a = new Scanner(System.in);
System.out.println("Enter the age of reader: "+i);
ages[i] = a.nextInt();
}
//Display the results
System.out.println("Number of readers is: "+numReaders);
for (int i=0; i<numReaders; i++)
{
System.out.println("The name of reader "+i+" is "+nameStr[i]+ " and his age is "+ages[i]);
}
在制作此代码后,我使用Ideone和命令提示符对其进行了测试,并且它正常工作:
现在,我需要根据用户的选择调用方法: 如果他输入“a”,则应调用一种方法来指定最年长学生的姓名和年龄。 如果他输入'b'一种方法,叫做有多少学生有用户指定的年龄,如果他输入'c',则调用一个函数来计算他们的平均年龄。
我是方法的新手,所以我不知道如何在方法和make语句中添加数组。
以下是完整代码:
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
int numReaders = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of magazin readers:");
numReaders = scan.nextInt();
//Creating an array of names, where the length is the total number entered by the user
String[] nameStr = new String[numReaders];
int[] ages = new int[numReaders];
for(int i=0; i<numReaders; i++)
{
Scanner n = new Scanner(System.in);
System.out.println("Enter the name of reader: "+i);
nameStr[i] = n.next();
}
for(int i=0; i<numReaders; i++)
{
Scanner a = new Scanner(System.in);
System.out.println("Enter the age of reader: "+i);
ages[i] = a.nextInt();
}
//Display the results
System.out.println("Number of readers is: "+numReaders);
for (int i=0; i<numReaders; i++)
{
System.out.println("The name of reader "+i+" is "+nameStr[i]+ " and his age is "+ages[i]);
}
//Choosing a statistic
//if a:
System.out.println("Please choose a, b or C:");
Scanner stat = new Scanner(System.in);
char X;
X = stat.next().charAt(0);
if(X=='a')
System.out.println(X+X);
else if(X=='b')
//System.out.println(X);
//Scanner newAge = new Scanner(System.in);
//int ageToSearchFor = newAge.nextInt();
//maxAge(ageToSearchFor);
else
System.out.println(X);
}
}
答案 0 :(得分:1)
是的,所以从您的用户开始输入input
,例如&#39; a
&#39;,让我们一起来看看:
首先,您需要创建显示最早学生姓名的方法,因此我们可以将其称为&#39; getOldestStudent
&#39; - 当命名方法时,这是典型的命名约定,从每个新单词开始小写然后移到大写 - 尝试使它们尽可能直观。
制作方法签名时,您需要为其提供可见性以及返回的内容。在这种情况下,由于您只使用一个类,我们将为其提供私有,因此只有此类可见。
现在我们需要返回两件事,因此我们可以将这些内容放入string
或将它们放入array
,这是我建议的,所以我们要{{1一个return
。但是,您希望array
input
进行搜索,因此括号为array
(或parameters
)。因此,我们的arguments
如下:
method signature
然后在这个方法中,您可以简单地执行找到最老的学生所需的代码,将他们的姓名和年龄添加到数组中,然后private String[] getOldestStudent(String[] students, int[] ages)
这个。
需要帮助才能发表评论。
另一方面,您最好创建一个&#39; return
&#39;对象然后给这个对象一个名字&#39;财产和年龄&#39;属性,然后只为这些属性制作Student
array
和students
以及getters
(或setters
和accessors
)。
答案 1 :(得分:1)
James Lloyd很好地介绍了你的问题,我想我可能会添加一些输入,因为我认为你正在努力解决一些原则。
首先,我会像詹姆斯建议的那样创建一个类Student
来存储每个人的值。
public class Student {
public String name;
public int age;
// Constructors allow you to create a new Object and set some variables
// when you create it.
public Student (String name) {
this.name = name;
}
}
我使用public
来避免使用getter和setter进行此解释,但我最常使用private
来自己编写。
无论如何,这样你只需要使用一个而不是两个数组(并且name
和age
相互连接,例如,你知道学生的年龄你知道的名字是,而对于两个不同的数组,您可能不知道nameArray[0]
是否属于ageArray[0]
。
所以你有一个数组Student[] students = new Student[numReaders];
,你可以在阅读输入后设置每个Student
,即在阅读name
之后你打电话students[i] = new Student(name);
如果你想设置之后age
的{{1}}您可以使用Student
完成此操作。
现在我们已经填满了我们的数组,我们可以提出你的实际问题。
student[i].age = age
现在,您可以为每个必须编写的方案编写自己的方法。
char method;
method = stat.next().charAt(0);
// I think switch is a little easier to read for such cases
switch(method) {
case 'a': Student oldest = getOldestStudent(students);
if (oldest != null)
System.out.println(oldest.name);
break;
case 'b': //another method
break;
default: // equals to else as if none of the other cases was fulfilled
break;
}
这样您就可以轻松访问public Student getOldestStudent(Student[] students) {
// at first we check some cases that do not require further checks
if (students.length == 0) {
System.out.println("No students have been specified");
return null; // this might lead to a NullPointerException so check the return Object whether it is null before doing anything with it
} else if (students.length == 1)
return students[0];
// no we have to see which students if the oldest in the regular case
// the first student will be used for comparison
Student oldestStudent = students[0];
for (int i = 1; i < students.length; i++) {
// see if our current student is older
if (oldestStudent.age < students[i].age)
oldestStudent = students[i];
}
return oldestStudent;
}
的名称(参见上面的开关)。您可以通过将数组传递给方法并迭代它来构建所有类似的方法。根据您是要返回一个或多个Student
(因为它可能因不同方法而异),您必须将返回类型从Student
更改为Student
。