2013-12-02 8 views
0

У меня проблема, которая звучит так. Пользователь вводит 5 оценок в массив. Затем массив должен быть отсортирован от наивысшего до самого низкого, а затем усреднен.Вызов метода void в конструкторе

Методы выбораСорт и расчетМеан должны быть недействительными.

Как я могу назвать их в своем конструкторе? то мне нужно распечатать данные в toString.

Это то, что у меня есть до сих пор.

import java.util.Scanner; 

public class Average { 

//the array which will contain the scores 
private int data[]; 
//the average of the scores 
private double mean; 



public Average(){ 
    Scanner sc = new Scanner(System.in); 

    double data[] = new double[6]; 

    for(int i = 1; i < data.length; i++){ 
     System.out.println("Enter score number " + i); 
     data[i] = sc.nextDouble(); 

    } 

    /*for(int p = 1; p < data.length; p ++){ 
     System.out.println(data[p]); 
    }*/ 
    //selectionSort(); 




} 
public void calculateMean(){ 
    double total = 0; 
    double sum = 0; 
    double average = 0; 

      for(int counter = 0; counter < data.length; counter++){ 
       sum = sum + data[counter]; 
       average = sum/data.length; 

      } 

} 


public void selectionSort(){ 
    int temp = 0; 
    for(int joey = 0; joey<data.length; joey++){  
     for(int i = 1; i < data.length; i++) { 
      if(data[i - 1] > data[i]) { 
      temp = data[i-1]; 
      data[i-1] = data[i]; 
      data[i] = temp; 
      } 
     } 
    } 
     for(int p = 0; p < data.length; p++){ 
      System.out.println(data[p]); 

    } 


    } 
public String toString(){ 



    return null; 
} 
} 
+0

Почему downvote ??? .. Этот парень пытался что-то ... – TheLostMind

+0

Это не совсем понятно, что вы имеете в виду под «называют в мой конструктор». Обратите внимание, что обычно конструктор просто инициализирует переменные для класса, а код, который делает такие вещи, как получение пользовательского ввода, идет другими способами (или 'main' для простой программы, подобной этой). – chrylis

ответ

1

Вы можете назвать 2 метода в конструкторе, как этот

// Inside constructor 
selectionSort(); // call the method 
calculateMean(); // call the method 
System.out.println(toString()); // print the data using toString 

И ваш toString() может выглядеть следующим образом

public String toString() { 
    return Arrays.toString(data); 
} 

Кроме того, логика в вашем calculateMean() немного неправильно ,

for (int counter = 0; counter < data.length; counter++) { 
    sum = sum + data[counter]; 
} 
average = sum/data.length; // Calculate the average after finding the sum and not at every iteration. 

Кроме того, я вижу, что переменная mean экземпляр не является. Возможно, вы захотите присвоить ему average, рассчитанный по методу calculateMean(), и вы можете захотеть напечатать его каким-либо методом или самим toString(), в зависимости от ваших потребностей.

Edit:

Вы затенения экземпляр переменной int data[]; с локальной переменной в конструкторе, double data[] = new double[6]; и что является причиной, вы получаете NPE. Удалить локальную переменную из конструктора и вместо того, чтобы инициализировать его как этот

data[] = new int[5]; 

И следующий for петли, чтобы получить информацию от пользователя, чтобы начать с индексом 0 и не 1.

for(int i = 0; i < data.length; i++){ 
+1

Или 'System.out.println (this);' если он соответствующим образом переопределяет 'toString()'. – chrylis

+0

@chrylis - Да, конечно. Но я думал, так как OP хотел вызвать методы, было бы лучше напечатать данные, вызвав 'toString()' явно, чем путем неявного вызова его, просто используя 'this'. – SudoRahul

+0

@ R.J ok, поэтому у меня есть методы, называемые и toString. Но как именно я получаю результат calculateMean(), хранящийся в частном двойном значении; ? – Joey

Смежные вопросы