试图理解Java中的"driver"程序



我收到了这个任务,不知道如何继续。

我完成了以下任务:询问5个数组输入,5个数据输入的平均值,并从最高到最低进行排序。

但我不明白(toString)要求做什么,它怎么能同时返回一个包含数组升序和平均值的"字符串"数据?

目前我的程序可以工作,但我认为我在运算符类中的toString方法上做得不正确(平均值)。

操作员类、驱动程序类、输出窗口:https://i.stack.imgur.com/ijGSG.jpg

任务:https://i.stack.imgur.com/DG5j0.jpg

操作员等级(平均)

    import java.util.Scanner;
    public class average
{
    private int data[] = new int[5];
    private double mean = 0;
    Scanner keyboard = new Scanner(System.in);
    int i = 1;
    int index = 0;
    average()
    {
        for (int num : data)
        {
            System.out.print("Enter score for student " + i + " : ");
            i++;
            data[index] = keyboard.nextInt();
            index++;
        }
        toString();
    }
    public void calculateMean()
    {
        double total = 0;
        for (int num : data)
        {
            total = total + num;
        }
        mean = total / data.length;
        System.out.println("Average score is :" + mean);
    }
    public String toString()
    {
        selectionSort();
        System.out.print("Data after selection sort (lowest to highest): ");
        index = 0;
        for (int num : data)
        {
            System.out.print(data[index] + " ");
            index++;
        }
        System.out.println("");
        calculateMean();
        String result = null;
        return result;
    }
    public void selectionSort()
    { 
        java.util.Arrays.sort(data);
    }
}

驾驶员等级(平均值)

public class avgdr
{
    public static void main(String[] args)
    {
        average e1 = new average();
    }
}

提前谢谢。

正如它所说,在赋值中,构造函数应该接受用户的输入,并且已经进行了计算平均值的计算。

在计算平均值之后,toString方法应该只是简单的答案,即它应该打印对象状态。[数组中的所有值和平均值。]

public String toString() {
    return "Data after selection sort (lowest to highest): "
            + Arrays.toString(data) + "nAverage score is: " + mean;
}

因此,所有的计算和方法都应该从构造函数中调用。和toString方法,您可以从构造函数或驱动程序类调用。通常的做法是从下面的驾驶员类中调用它——驾驶员类

public class avgdr {
    public static void main(String[] args) {
        average e1 = new average();
        System.out.println(e1);
    }
}

在自动调用System.out.println(e1);时,将调用类的toString方法,返回的字符串将显示在控制台上。

构造函数将看起来像这样-

average() {
    for (int num : data) {
        System.out.print("Enter score for student " + i + " : ");
        i++;
        data[index] = keyboard.nextInt();
        index++;
    }
    selectionSort();
    calculateMean();
}

您的toString需要返回String,其中包含升序数组和平均值
为此,您需要类中已有的两个实例变量
1.数组:int data[]=new int[5]
2.均值:双均值
从用户那里获取输入后,立即调用selectionSort和calculateMean方法,然后调用不进行进一步计算的string方法,只需返回您想要的字符串

import java.util.Scanner;
public class average {
private int data[] = new int[5];
private double mean = 0;
Scanner keyboard = new Scanner(System.in);
int i = 1;
int index = 0;
average()
{
    for (int num : data)
    {
        System.out.print("Enter score for student " + i + " : ");
        i++;
        data[index] = keyboard.nextInt();
        index++;
    }
    selectionSort();
    calculateMean();
    toString();
}
public void calculateMean()
{
    double total = 0;
    for (int num : data)
    {
        total = total + num;
    }
    mean = total / data.length;
    System.out.println("Average score is :" + mean);
}
public String toString()
{
    StringBuilder builder = new StringBuilder();
    builder.append("Sorted Data is: ");
    for (int num : data)
    {
        builder.append(data[index] + " ");
        index++;
    }
    builder.append(", Mean is: ").append(mean);
    return builder.toString();
}
public void selectionSort()
{ 
    java.util.Arrays.sort(data);
}

}

public String toString() //overriding toString() method here. This method belongs to Object Class.
    {
        selectionSort(); // calling selectionSort() here.
        System.out.print("Data after selection sort (lowest to highest): ");
        index = 0;
        for (int num : data)
        {
            System.out.print(data[index] + " ");
            index++;
        }
        System.out.println("");
        calculateMean();  //  Calling calculateMean() here.
        String result = null;
        return result;
     }

现在您正在Constructor 中调用此方法

平均值(){

    for (int num : data)
    {
        System.out.print("Enter score for student " + i + " : ");
        i++;
        data[index] = keyboard.nextInt();
        index++;
    }
    toString(); //calling toString Method Here.
}

执行流:-在Constructor内部,您正在调用toString()方法,该方法在内部调用两个函数a)selectionSort();和B)selectionSort();。在main()中,您使average e1 = new average();的实例平均。它调用构造函数So,Execution将类似于Constuctor>toString()>calculateMean()selectionSort()

事实证明,您似乎不应该从代码中的任何位置调用toString ()。只要让它返回一个由所有元素按降序组成的Stringmean。此外,在这种情况下,使用DecoratorScanner从用户那里获取输入的方式有点不正确。为此,首选缓冲流,并让它们进行字节读取。

这是修改后的代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
public class Average {
    private static final int TOTAL_SCORES = 5;
    private int [] data;
    private double mean;
    private BufferedReader inputStream;
    public Average () {
        data = new int [ TOTAL_SCORES ];
        try {
            inputStream = new BufferedReader ( 
                        new InputStreamReader ( System.in ) );
            for ( int i = 0; i < data.length; ++i ) {
                System.out.print ( "Enter Score Number " + ( i + 1 ) + ": " );
                data [ i ] = Integer.parseInt ( inputStream.readLine () );
            }
        } catch ( IOException ioex ) {
            ioex.printStackTrace ();
        }
        selectionSort ();
        calculateMean ();
    }
    private void selectionSort () {
        for ( int i = 0; i < ( data.length - 1 ); ++i ) {
            int max = i;
            for ( int j = ( i + 1 ); j < data.length; ++j ) {
                if ( data [ max ] < data [ j ] ) {
                    max = j;
                }
            }
            if ( max != i ) {
                int temp = data [ max ];
                data [ max ] = data [ i ];
                data [ i ] = temp;
            }
        }
    }
    private void calculateMean () {
        double result = 0.0;
        for ( int number : data ) {
            result += number;
        }
        result /= data.length;
        mean = result;
    }
    @Override
    public String toString () {
        StringBuilder sb = new StringBuilder ();
        sb.append ( "Elements: n" );
        for ( int number : data ) {
            sb.append ( number + "n" );
        }
        sb.append ( "Mean: " + mean );
        return sb.toString ();
    }    
    private void display ( int [] data ) {
        System.out.println ( "Data in Array is: " );
        for ( int number : data ) {
            System.out.println ( number );
        }
    }
    public static void main ( String [] args ) {
        System.out.println ( new Average () );
    }
}

最新更新