将数组作为参数传递并进行计算

时间:2016-01-29 09:53:06

标签: java

我必须制作一个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和命令提示符对其进行了测试,并且它正常工作:

enter image description here

现在,我需要根据用户的选择调用方法: 如果他输入“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);
    }
}

2 个答案:

答案 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 arraystudents以及getters(或settersaccessors)。

答案 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来自己编写。

无论如何,这样你只需要使用一个而不是两个数组(并且nameage相互连接,例如,你知道学生的年龄你知道的名字是,而对于两个不同的数组,您可能不知道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