如何使用一个数组链接到另一个?

时间:2012-12-04 22:18:22

标签: java arrays

嗨,大家好基本上刚接触Java的新手,我正在做ComScience。我需要帮助,以下将非常感谢。

注意:我还没有真正编写代码,可以这么说,我想在结构化/评论等之前先让程序工作。 UULIB是大学图书馆的名称。

目标:找到低于AVERAGE标记的学生的姓名。

这是我在下面用来尝试找到它的代码,但它跳过了第一个[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 个答案:

答案 0 :(得分:2)

您应该将for-loop拆分为两个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] + " ");
}

答案 1 :(得分:1)

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

  1. 收集输入数据(来自控制台)
  2. 计算平均值(以及您需要计算的任何其他内容)。您的代码具有最高和最低,但您的问题文本并不表示需要提供信息。
  3. 输出结果。
  4. 这是一些有助于改进代码组织的代码。

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

你正在检查第一次走动,这显然不会低于它是否相同。你应该在数组填满所有成绩后运行if语句检查,并对循环检查哪些等级低于平均值进行同样的操作。