-2

大家好,基本上我是 Java 新手,从 10 月开始,我在做 ComScience。我需要以下帮助,将不胜感激。

注意:我还没有真正制定代码,可以这么说,我想让程序在结构化/注释等之前先运行。UULIB 是大学图书馆的名称。

目标:找出低于平均分的学生的姓名。

这是我在下面用来尝试找到它的代码,但它跳过了第一个 [0] 数组编号并只给了我一个名字。

import uulib.*;

public class Q3
{
    public static void main(String[] args)
    {
        int class_number = Console.getInt("Enter how many students between 1-10");

        while (class_number < 1 || class_number > 10)
            class_number = Console.getInt("Enter how many students between 1-10");

        System.out.println("");

        String[] name = new String[class_number];
        int[] score = new int[name.length];

        for (int i=0; i<class_number; i=i+1)
        {
            name[i] = Console.getString("Enter Name");
            score[i] = Console.getInt("Enter score");

            if ( score[i] < average(score))
                System.out.print(name[i] + " ");
        }

        System.out.println(" ");
        System.out.println("Average mark = " + Num.format(average(score), 1 ));
        System.out.println("Lowset mark = " +lowset(score) );
        System.out.println("Highest mark = " +highestValue(score) );
        System.out.println("Name of students with highest mark =  " );
    }

    public static double average(int[] nums)
    {
        double total = 0;

        for (int i=0; i<nums.length; i=i+1)
        {
            total = total + nums[i];
        }
        return total / nums.length;
    }

    public static int lowset(int[] nums)
    {
        int minimum = nums[0]; //sets the first to be the smallest

        for (int i = 0; i < nums.length; i++) //goes through your array
        {
             if (nums[i] < minimum) //checks and replaces if necessary
             {
                 minimum = nums[i];   
             }
        }
        return minimum;
    }

    private static int highestValue(int[] numbers) 
    {
        int highest = numbers[0];
        for (int i = 0; i < numbers.length; i++) 
        {
            if (numbers[i] > highest) 
            {
                highest = numbers[i];
            }
        }
        return highest;
    }
}
4

4 回答 4

2

您应该将您的 for 循环分成两个 for 循环,因为在收集所有分数之前您无法计算平均值:

for (int i=0; i<class_number; i=i+1) {
    name[i] = Console.getString("Enter Name");
    score[i] = Console.getInt("Enter score");
}
for (int i=0; i < class_number; i++) {
    if (score[i] < average(score))
        System.out.print(name[i] + " ");
}
于 2012-12-04T22:35:24.510 回答
1

看起来你的程序需要做 3 件主要的事情。

  1. 收集输入数据(从控制台)
  2. 计算平均值(以及您需要计算的任何其他内容)。您的代码有最高和最低,但您的问题文本并未表明该信息是必需的。
  3. 输出结果。

这是一个小代码,可帮助改进代码的组织。

public static void main(String[] args) {
    collectInputData();
    calculate();
    outputResults();
}

如果您只记得答案中的一件事,请记住这一点。不要等到您的代码“工作”或“良好”才能改进结构或评论!您可以通过改进结构和注释来使您的代码变得更好。

于 2012-12-04T22:30:56.910 回答
0

在您的第一次迭代 ( i == 0) 中,score[i] < average(score)将评估为 false,因为实际上score[i] == average(score),这就是您没有打印名字的原因。

但是,您的整个逻辑是有缺陷的。您应该首先循环并要求用户输入数据,然后计算平均数,最后再次循环数据以确定哪个学生的成绩低于计算的平均值。

于 2012-12-04T22:30:19.690 回答
0

您正在检查第一次,这显然不会少于相同的情况。您应该在数组填充完所有成绩后运行 if 语句检查,并执行相同的循环检查哪些成绩低于平均水平。

于 2012-12-04T22:31:01.547 回答