嗨,大家好基本上刚接触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;
}
}
答案 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件事。
这是一些有助于改进代码组织的代码。
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语句检查,并对循环检查哪些等级低于平均值进行同样的操作。