2013-11-06 3 views
1

Это оцененная работа, поэтому, пожалуйста, не давайте прямого ответа.Я не могу вернуть значение из своего массива

Моя программа должна рассчитать оценку пользователей: «пройти», «провалить» или «пройти с компенсацией». Однако он не возвращает ответ. Я не могу понять, почему - может ли кто-нибудь помочь?

общественный класс MarkCalculator { статический int [] marks = new int [12];

//public static Scanner keyboard = new Scanner(System.in); 
public static void main(String[] args) { 
    Scanner kb = new Scanner(System.in); 
    int weighting; 
    int coursework; 
    int exammark; 

    System.out.println("Please enter course work weighting"); 
    marks[0]= kb.nextInt(); 

    System.out.println("Please enter course work mark"); 
    marks[1]= kb.nextInt(); 

    System.out.println("Please enter exam mark"); 
    marks[2]= kb.nextInt(); 


    MarkCalculator mc = new MarkCalculator(); 
    mc.computeMarks(marks); 

} 




public String[] computeMarks(int[] marks) { 

    final int[] WEIGHTING = {55,66,55,44,33,44}; 
    String[] results = new String[WEIGHTING.length]; 
    for (int i = 0; i < marks.length/2; i++) { 

     int exam = marks[i]; 
     int cw = marks[i]; 
     int weight = WEIGHTING[i]; 
     int formula = ((cw + weight) + (exam * (100 - weight))/100); 

     if (formula >= 40){ 
      results[i]="PASS"; 
     } else if ((formula < 39) && (formula > 35)){ 
      results[i]="COMPENSATION PASS"; 
     }else{ 
      results[i]="FAIL"; 

     } 

    } 

    return results; 
} 

}

+0

Просто примечание стороны, когда 'формула == 39' результат будет FAIL, я не думаю, что это то, что вы ожидаете –

ответ

3
final int[] WEIGHTING = {}; 
String[] results = new String[WEIGHTING.length]; 

Вот проблема. WEIGHTING не имеет начального размера.

+0

Да, вы можете объявить переменная как окончательная в методе. – Kojotak

+0

Спасибо, я просто попробовал, и я стою исправлено. –

+0

У меня были номера, инициализированные взвешиванием, но они вытащили их, просто играя с ним, чтобы надеяться найти решение. – user2961364

1

Также: вы не инициализируете отметки ничем. Попробуйте это:

System.out.println("Please enter course work weighting"); 
     marks[0]= kb.nextInt(); 

     System.out.println("Please enter course work mark"); 
     marks[1]= kb.nextInt(); 

     System.out.println("Please enter exam mark"); 
     marks[2]= kb.nextInt(); 

     MarkCalculator mc = new MarkCalculator(); 
     mc.computeMarks(marks); 
+0

эй по знаку [0], отметке [1] и отметке [2]. Вы имеете в виду метки [0], метки [1] и метки [2], потому что знак не определен? – user2961364

+0

да, конечно, извините – wxyz

+0

поэтому я изменил ---- final int [] WEIGHTING = {55,66,55,44,33,44}; --- поэтому WEIGHTING теперь имеет некоторые числа в качестве веса cw. – user2961364

1

Проблема заключается в том Взвешивание пусто

final int[] WEIGHTING = {}; // empty 
String[] results = new String[WEIGHTING.length]; 
for (int i = 0; i < marks.length/2; i++) { 

    int exam = marks[i]; 
    int cw = marks[i]; 
    int weight = WEIGHTING[i]; // You cant access elements from an empty array 

Также

MarkCalculator mc = new MarkCalculator(); 
    mc.computeMarks(marks); 

здесь вы передаете знаки, которые пуста.

EDIT

Причина, почему ваша программа не был рабочим, потому что вы не ловя результат computeMarks. Вы должны хранить его в массив внутри магистральный как

String[] result = mc.computeMarks(marks); 

for(int k=0;k<result.length;k++) 
{ 
    System.out.println(result[k]); 
} 
+0

Я установил взвешивание как окончательный int [] WEIGHTING = {55,66,55,44,33,44}; – user2961364

+0

и отмечает [0] = kb.nextInt(); отмечает [1] = kb.nextInt(); отмечает [2] = kb.nextInt(); так что знаки больше не пустые? все еще не получая ответ, сообщив мне, будет ли это пропуск ect – user2961364

+0

См. мое редактирование –

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