【问题标题】:Accepting input through an array in Java通过Java中的数组接受输入
【发布时间】:2014-02-22 01:05:55
【问题描述】:

我正在尝试让用户输入一组数字(=学生的分数)。此外,用户自己将决定数组的大小,即班级的学生人数。接受每个学生的分数后,我想将它们存储在一个数组中,显示所有学生的分数,并计算班级的平均值。稍后将达到平均部分。 有人可以帮我解决这段(显然是错误的)代码吗,谢谢!!

package chapter2.Arrays;
import java.util.*;

public class Arrays_ExampleOne {

static int size;
static int marks;
static int [] numbers=new int [size];
static Scanner in=new Scanner(System.in);


public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("Welcome to Cincinnati Elementary");
    System.out.println("Class report details for ");
    System.out.println("Enter the number of students in the class");
    size=in.nextInt();
    System.out.println("Enter the marks of each student");
    for(int i=0;i<=size;i++)
    {
    numbers[i]=in.nextInt();    
    }

/*  System.out.println("The marks of all students are"+ " ");
    {
    for(int i=0;i<=size;i++)
    {
        System.out.print(numbers[i]);
    }
    System.out.println();

    }
    //int avg=
    */}
}

================================================ =============

修改后的代码,希望在 main 之外创建一个函数来计算数组的平均值:

package chapter2.Arrays;
import java.util.*;

public class Arrays_ExampleOne {

/*static int size;
static int marks;
static int [] numbers=new int [size];*/
static Scanner in=new Scanner(System.in);


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println("Welcome to Cincinnati Elementary");
        System.out.println("Class report details for ");
        System.out.println("Enter the number of students in the class");
        int size;
        //static int marks;
        //static int [] numbers=new int [size];

        size=in.nextInt();

        int [] numbers=new int [size];
        System.out.println("Enter the marks of each student");
        for(int i=0;i<size;i++)
        {
        numbers[i]=in.nextInt();    
        }

        System.out.println("The marks of all students are:"+ " ");
        {
        for(int temp:numbers)
        {
            System.out.print(temp+ " ");
        }
        System.out.println();
        }

        int arraySize=numbers.length;
        int arraySum=0;
        //Calculate the sum of array elements
        for(int temp1:numbers)
        {
            arraySum+=temp1;
        }

        int average=arraySum/arraySize;

        System.out.println("The average of all the students scores is:"+ " "+average);
    }

    /*public int calculateAverage(int array[])
    {
        int arraySize=array.length;

    }*/
}

================================================ ================ 在 main 之外添加了用于计算平均值的单独代码。

package chapter2.Arrays;
import java.util.*;

public class Arrays_ExampleOne {

/*static int size;
static int marks;
static int [] numbers=new int [size];*/
static Scanner in=new Scanner(System.in);


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Arrays_ExampleOne obj=new Arrays_ExampleOne();
        System.out.println("Welcome to Cincinnati Elementary");
        System.out.println("Class report details for ");
        System.out.println("Enter the number of students in the class");
        int size;
        //static int marks;
        //static int [] numbers=new int [size];

        size=in.nextInt();

        int [] numbers=new int [size];
        System.out.println("Enter the marks of each student");
        for(int i=0;i<size;i++)
        {
        numbers[i]=in.nextInt();    
        }

        System.out.println("The marks of all students are:"+ " ");
        {
        for(int temp:numbers)
        {
            System.out.print(temp+ " ");
        }
        System.out.println();
        }

    /*  int arraySize=numbers.length;
        int arraySum=0;
        //Calculate the sum of array elements
        for(int temp1:numbers)
        {
            arraySum+=temp1;
        }

        int average=arraySum/arraySize;

        System.out.println("The average of all the students scores is:"+ " "+average);*/
        int average=obj.calculateAverage(numbers);
        System.out.println("The average of all the students is:"+ " "+average);
    }

    public int calculateAverage(int array[])
    {
        int arraySize=array.length;
        int arraySum=0;
        for(int temp: array)
        {
        arraySum+=temp;
        }

        int average=arraySum/arraySize;

        return average;
    }
}

【问题讨论】:

  • Y我们的代码看起来没问题,你只需要先声明numbers数组(int[] numbers = new int[size]
  • 非常感谢@Johannes H.

标签: java arrays


【解决方案1】:

首先,你应该让用户先输入大小,然后你设置数组大小:

static int size;
static int marks;
static Scanner in=new Scanner(System.in);

public static void main(String[] args) {
    System.out.println("Enter number of student:");
    size = in.nextInt();
    int [] numbers=new int [size];

    //the rest of your code goes here
}

注意:小心你的 for 循环:

for(int i=0;i<=size;i++){
             ^
    numbers[i]=in.nextInt();
}

这将导致ArrayIndexOutOfBoundException,因为您正在尝试访问索引size 处的元素,其中具有n 大小的数组的最大indexn-1 em> 。 应该是 &lt; 而不是 &lt;=

对于方法calculateAverage,它应该是这样的:

public static double calculateAverage(int array[])
{
    double sum=0.0;
    for(int i=0;i<array.length;i++){
       sum+=array[i];
    }
    return sum / array.length;
}

请注意,此方法应该是静态的,因为您想在静态方法中使用它,并且 average 始终处理 double/float 数据类型,而不是 int

在 main 方法中,你可以这样调用它:

System.out.println("Average marks:"+calculateAverage(numbers));

【讨论】:

  • 除此之外,不管它放在哪里都不会编译,你的想法是正确的。
  • 等一下。我只是从问题中复制粘贴:D
  • @JohannesH。这两个声明存在于类级别,这导致创建数组时size 的核心问题为零。除此之外,在 for 循环中使用 &lt;= 而不是 &lt; 时会出现一个错误。
  • @Vulcan 现在(编辑后)他们是。然而,在编辑之前,它们被当作在函数内部使用,但在声明时就像在外部一样。
  • 非常感谢@RafaEl 对声明和 for 循环问题的建议。它帮助很大!现在我已经能够打印出学生的平均成绩,但这一切都在主函数本身之内。我正在寻找创建一个单独的函数(calculateArea(int array[]),它将计算数组平均值并将其返回给主函数)。它在我这里包含的代码中,请您帮忙!
【解决方案2】:
static int size;
static int marks;
static int [] numbers=new int [size];

在创建数组时,size 仍为默认值,即零。你总是在这里得到一个长度为零的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多