我收到了这个任务,不知道如何继续。
我完成了以下任务:询问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 ()
。只要让它返回一个由所有元素按降序组成的String
和mean
。此外,在这种情况下,使用Decorator
、Scanner
从用户那里获取输入的方式有点不正确。为此,首选缓冲流,并让它们进行字节读取。
这是修改后的代码:
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 () );
}
}