2013-10-27 3 views
0

Я работаю над простым приложением, которое возвращает метку студента на основе конкретного модуля. Моя основная проблема связана с методом getModuleMark, потому что мне нужно, чтобы он возвращал метку модуля с учетом индекса модуля.Java return array

Для метода setModuleMark Я прошел как индексный модуль, так и параметры меток. Я просто немного запутался в том, что мне нужно добавить в обратную ссылку для меток модулей.

В тот момент, когда я запустить приложение я получаю следующий результат:

Джо Bloggs

Модуль 0: 50,0

Модуль 1: 50,0

Модуль 7: 50,0

См. Код ниже:

public class Student { 

    public static void main(String[] args) { 

    Student student = new Student("Joe", "Bloggs"); 

    // Add some marks to the student. 
    student.setModuleMark(0, 10); 
    student.setModuleMark(1, 80); 
    student.setModuleMark(7, 50); 


    // Display the marks. 
    System.out.println(student.getForename() + " " +  student.getSurname()); 
    System.out.println("Module 0: " + student.getModuleMark(0)); 
    System.out.println("Module 1: " + student.getModuleMark(1)); 
    System.out.println("Module 7: " + student.getModuleMark(7)); 
     } 



    private String forename; 
    private String surname; 
    private double marks; 

    public Student(String forename, String surname) { 
     super(); 
     this.forename = forename; 
     this.surname = surname; 

     double [] ModuleMark = new double [7]; //Creates array of fixed size 7 
    } 

    /** 
    * @return the forename 
    */ 
    public String getForename() { 
     return this.forename; 
    } 

    /** 
     * @return the surname 
     */ 
    public String getSurname() { 
     return this.surname; 
    } 

    /** 
     * @param marks the marks to set 
     * @param i 
     */  
    public double getModuleMark (int in) { 
     return this.marks;   
    } 

    public void setModuleMark(int in, double marks) { 

    this.marks = marks; 
    } 
} 

ответ

2

Есть много вещей, которые кажутся неправильными.

Во-первых, ModuleMark должен быть объявлен в классе, а не внутри конструктора.

private double[] ModuleMark; // Declare here 

public MyMain(String forename, String surname) { 
    this.forename = forename; 
    this.surname = surname; 
    this.ModuleMark = new double[7]; // Creates array of fixed size 7 
} 

Далее, ваши getModuleMarks и setModuleMarks метод должен быть, как этот

public double getModuleMark(int in) { 
    return this.ModuleMark[in]; // return the value present at the given index 
} 

public void setModuleMark(int in, double marks) { 
    this.ModuleMark[in] = marks; // set the marks at the given index in the array. 
} 

Кроме того, поскольку ModuleMark является массивом размером 7, вы не можете использовать индекс 7 , Он будет генерировать ArrayIndexOutOfBoundsException, потому что в массиве максимальный доступный индекс всегда равен array.length - 1.

student.setModuleMark(6, 50); // The max possible index 
... 
System.out.println("Module 7: " + student.getModuleMark(6)); // The max possible index 

Примечание: После этих изменений, private double marks; больше не будет использоваться. Вы можете либо отказаться от него, либо получить его, если собираетесь использовать его для какой-то другой цели в будущем.

0

Насколько я обеспокоен, вы должны в первую очередь добавить

private double [] ModuleMark

как поле Student Class, а затем что-то вроде

public double getModuleMark (int in){ 
    return this.ModuleMark[in]; 
    } 
0

Поскольку ваш студент может иметь множество модулей, каждый из которых его марка, тогда в основном массив подходит для вашего прецедента. Поэтому вам нужно удалить double marks и сохранить только массив double [] ModuleMark.

Вы могли бы реализовать методы получения и установки, как это:

public double getModuleMark (int in) { 
    return ModuleMark[in]; 
} 

public void setModuleMark(int in, double mark) { 
    ModuleMark[in] = mark; 
} 

Просто остерегайтесь ArrayIndexOutOfBoundsException. Лучше еще я бы предложил использовать List Ведьма может расти автоматически, у нее также есть возможность доступа к элементам, используя (нулевой) индекс.

Также рассмотрите соглашения об именах java для членов и классов.

1

класс Student общественности {

public static void main(String[] args) { 

Student student = new Student("Joe", "Bloggs"); 

// Add some marks to the student. 
student.setModuleMark(0, 10); 
student.setModuleMark(1, 80); 
student.setModuleMark(7, 50); 


// Display the marks. 
System.out.println(student.getForename() + " " +  student.getSurname()); 
System.out.println("Module 0: " + student.getModuleMark(0)); 
System.out.println("Module 1: " + student.getModuleMark(1)); 
System.out.println("Module 7: " + student.getModuleMark(7)); 
    } 



private String forename; 
private String surname; 
private double[] marks; 

public Student(String forename, String surname) { 
    super(); 
    this.forename = forename; 
    this.surname = surname; 

    marks = new double [8]; //Creates array of fixed size 7 
} 

/** 
* @return the forename 
*/ 
public String getForename() { 
    return this.forename; 
} 

/** 
    * @return the surname 
    */ 
public String getSurname() { 
    return this.surname; 
} 

/** 
    * @param marks the marks to set 
    * @param i 
    */  
public double getModuleMark (int in) { 
    return this.marks[in];   
} 

public void setModuleMark(int in, double marks) { 

this.marks[in] = marks; 

}}

+0

проверьте этот ............ Прежде всего, вы создали массив из 7 элементов, но вы пытались установить и получить значение 8-го элемента, которое будет показывать индекс из связанной ошибки. Проверьте это, я изменил ваш код. –

0

Первый ModuleMark следует moduleMark по соглашению. :-)

Во-вторых, использование ваших геттеров и сеттеров должно быть таким (по соглашению) для модуляMarks.

public double[] getModuleMark() { 
return moduleMark; 
} 
public void setModuleMark(double[] moduleMark) { 
this.moduleMark = moduleMark; 
} 

Третий - объем модуля меток может быть таким: (определяется не только в рамках студенческого конструктора)

public class Student { 
     private double [] moduleMark = new double [7]; 
    .... 

Тогда, если я думаю, что вы пытаетесь сделать это:

// Add some marks to the student. 
    student.setSpecificModuleMark(0, 10); 
    student.setSpecificModuleMark(1, 80); 
    student.setSpecificModuleMark(6, 50); 

    // Display the marks. 
    System.out.println(student.getForename() + " " + student.getSurname()); 
    System.out.println("Module 0: " + student.getSpecificModuleMark(0)); 
    System.out.println("Module 1: " + student.getSpecificModuleMark(1)); 
    System.out.println("Module 6: " + student.getSpecificModuleMark(6)); 
    } 

private double getSpecificModuleMark(int i) { 
    // TODO Auto-generated method stub 
    return this.moduleMark[i]; 
    } 

private void setSpecificModuleMark(int i, int j) { 
    this.moduleMark[i] = j; 

    } 

В-четвертых: обратите внимание, что вы пытаетесь распечатать 7, который является индексом за пределами границ .. так что используйте 0--6.