-2

こんにちは皆さん、基本的には 10 月に Java を始めたばかりで、ComScience をやっています。以下の点についてご協力いただければ幸いです。

注:私はまだコードを実際にレイアウトしていないので、いわば、構造化/コメントなどの前にプログラムを最初に機能させたいと思っていました。UULIB は大学図書館の名前です。

目的: 平均点以下の生徒の名前を見つけます。

これは、私が試して見つけるために以下で使用したコードですが、最初の [0] 配列番号をスキップし、1 つの名前のみを与えます。

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 ループを 2 つの 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();
}

答えから1つだけ覚えている場合は、これを覚えておいてください。構造やコメントを改善するために、コードが「機能」または「良好」になるまで待たないでください。構造とコメントを改善することで、コードを改善します。

于 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 に答える