2016-03-04 1 views
1

Я использую конструктор:Неверного метод Decleration - Новый в методы

Donor(String lastName, String firstName, String type, int age, double minutes) 

И я знаю, что я должен назвать его так же, как общественный класс она находится в, но когда я пошевелить фигурные скобки, так что он охвачен общественным классом донора. Меня встретили несколько ошибок.

Мой код выглядит следующим образом:

public class Program5 
{ 
    public static void main(String args[]) 
    { 
     Arrays.sort(Donor, new lastNameComparator()); 
     for (int i = 0; i < donor.length; i++) 
     { 
      System.out.println(Donor[i].getLastName()); 
     } 

     Arrays.sort(Donor, new firstNameComparator()); 
     for (int i = 0; i < donor.length; i++) 
     { 
      System.out.println(Donor[i].getFirstName()); 
     } 

     Arrays.sort(Donor, new typeComparator()); 
     for (int i = 0; i < donor.length; i++) 
     { 
      System.out.println(Donor[i].getType()); 
     } 

     Arrays.sort(Donor, new ageComparator()); 
     for (int i = 0; i < donor.length; i++) 
     { 
      System.out.println(Donor[i].getAge()); 
     } 

     Arrays.sort(Donor, new minutesComparator()); 
     for (int i = 0; i < donor.length; i++) 
     { 
      System.out.println(Donor[i].getMinutes()); 
     } 
    } 

    public ArrayList<Donor> donorCSVList(String filePath) throws IOException 
    { 
     ArrayList<Donor> list = new ArrayList<Donor>(); 
     Scanner scan = new Scanner(new File(filePath)); 
     while (scan.hasNextLine()) 
     { 
      String line = scan.nextLine(); 
      String [] lineArray = line.split(","); 
      list.add(new Donor(lineArray[0], lineArray[1], lineArray[2], lineArray[3], lineArray[4])); 
     } 
    } 

    public class Donor 
    { 
     private String lastName; 
     private String firstName; 
     private String type; 
     private int age; 
     private double minutes; 
    } 

    public void Donor() 
    { 
     super(); 
     type = "Not assigned"; 
     age = 0; 
     minutes = 0.0; 

    } 

    Donor(String lastName, String firstName, String type, int age, double minutes) 
    { 
     super(lastName, firstName); 
     this.lastName = lastName; 
     this.firstName = firstName; 
     this.type = type; 
     this.age = age; 
     this.minutes = minutes; 
    } 

    public String getLastName() 
    { 
     return lastName; 
    } 

    public void setLastName(String lastName) 
    { 
     this.lastName = lastName; 
    } 

    public String getFirstName() 
    { 
     return firstName; 
    } 

    public void setFirstName(String firstName) 
    { 
     this.firstName = firstName; 
    } 

    public String getType() 
    { 
     return type; 
    } 

    public void setType(String type) 
    { 
     this.type = type; 
    } 

    public int getAge() 
    { 
     return age; 
    } 

    public void setAge(int age) 
    { 
     this.age = age; 
    } 

    public double setMinutes() 
    { 
     return minutes; 
    } 

    public void getMinutes(double minutes) 
    { 
     this.minutes = minutes; 
    } 

    public class lastNameComparator implements Comparator 
    { 
     public String compare(Donor o1, Donor o2) 
     { 
      String lastName1 = o1.getLastName(); 
      String lastName2 = o2.getLastName(); 
      return lastName1.compareTo(lastName2); 
     } 
    } 

    public class firstNameComparator implements Comparator 
    { 
     public String compare(Donor o1, Donor o2) 
     { 
      String firsName1 = o1.getFirstName(); 
      String firstName2 = o2.getFirstName(); 
      return firstName1.compareTo(firstName2); 
     } 
    } 

    public class typeComparator implements Comparator 
    { 

     public string compare(Donor o1, Donor o2) 
     { 
      String type1 = o1.getType(); 
      String type2 = o2.getType(); 
      return type1.compareTo(type2); 
     } 
    } 

    public class ageComparator implements Comparator 
    { 
     public int compare(Donor o1, Date o2) 
     { 
      int age1 = o1.getAge(); 
      int age2 = o2.getAge(); 
      //return o2.getAge() - o1.getAge(); 
     } 
    } 

    public class minutesComparator implements Comparator 
    { 
     public double compare(Donor o1, Donor o2) 
     { 
      double minutes1 = o1.getMinutes(); 
      double minutes2 = o2.getMinutes(); 
      //return o2.getMinutes() - o1.getMinutes(); 
     } 
    } 
} 

И моя ошибка:

Program5.java:66: error: invalid method declaration; return type required 
     Donor(String lastName, String firstName, String type, int age, double minutes) 
+0

Какая строка является ошибкой? Сообщение об ошибке должно содержать номер строки. –

+0

Я обновил вопрос, чтобы более правильно отразить текущую проблему, с которой я сталкиваюсь – snitchyc

+0

@snitchyc При отправке кода примера в StackOverflow мы просим вас удалить все ненужные строки. [Создайте минимальный пример] (http://stackoverflow.com/help/mcve) с наименьшими возможными строками, которые все еще демонстрируют вашу проблему. В качестве побочной выгоды, при этом вы можете ответить на свой вопрос. –

ответ

0

Ваша главная проблема заключается в том, что вы неуместны большую часть содержимого вашего Donor класса. То, что вы структурирована следующим образом:

public class Donor 
{ 
    private String lastName; 
} 

public String getLastName() 
{ 
    return lastName; 
} 

Хотя то, что вы хотите больше, как это:

public class Donor 
{ 
    private String lastName; 

    public String getLastName() 
    { 
     return lastName; 
    } 
} 

Все члены класса должны быть внутри фигурных скобок, которые ограничивают содержание из класс, а не только поля.

Кроме того, вы, кажется, вызываете super() с аргументами в конструкторе, который предназначен для класса, который не имеет суперкласс с конструктором, который принимает аргументы. Это не имеет смысла.

Наконец вы, вероятно, имел в виду, чтобы сделать ваш Donor конструктор общественности:

public Donor(String lastName, ... 
+0

Все классы, кроме Object, имеют суперкласс. Вызов 'super()' для него может быть бессмысленным, но это законно. – Douglas

+0

Я переместил финишную фигурную скобку, которая охватывает публичный класс Донор, чтобы держать все мои методы получения и настройки, но это только увеличивает мои ошибки. Я что-то делаю неправильно? – snitchyc

+0

@Douglas: Я думаю, вы более семантически корректны, но то, что я получаю, это вызов 'super()' с аргументами. –

0

Там, кажется, слишком много ошибок в этом примере. Я кратко изложил несколько:

  • Класс донора должен быть вне основного класса. Кроме того, он не должен быть общедоступным, файл Java может иметь только один открытый класс (который в нашем случае является программой5).
  • Все классы компараторов неправильно реализуют метод compare(). Они должны быть параметризированы с помощью типа (<T>) и compare() должны содержать @Override аннотация.
  • public void Donor() - на самом деле способ. Если мы хотим, чтобы он был конструктором, нам нужно удалить void.
  • super() звонки не нужны ни одному из конструкторов, так как класс Donor не распространяется на класс.
  • В методе whiledonorCSVList мы должны проверить количество элементов в lineArray перед доступом по их индексам. Это может привести к arrayIndexOutOfBoundsException.
0

Donor это класс, но в main вы рассматриваете его как переменную. Похоже, что вы намеревались прочитать ввод с donorCSVList, а затем отсортировать результат и вывести его. Чтобы сделать это, вы должны на самом деле назвать donorCSVList и использовать возвращаемое значение, например:

ArrayList<Donor> donors = donorCSVList("someFileNameHere"); 
Arrays.sort(donors, new lastNameComparator()); 

...за исключением того, что ArrayList - это не то же самое, что массив, поэтому Arrays.sort не примет его. Вместо этого вам нужно будет использовать Collections.sort.