2017-01-25 2 views
-1

Эй, я пытаюсь вычислить викторину, сравнивая два массива. Установленные два массива - это правильные ответы и ответы учеников на викторину. Я пытаюсь заставить его выглядеть следующим образом:Массивы: Сравнение одного массива с другим, чтобы найти средние значения

Student Marks Средняя

Арни Оценка: 4 Процент: 0,8

Это потому, что Арни получил 4 вопроса исправления из 5 вопросов. Ответы ученика и правильные ответы содержатся в текстовом документе, который я уже загрузил в массив в моем коде. Текстовый документ содержит 2D-массив с ответами Арни в виде символов и 1D-массив, содержащий правильные ответы (также символы). Есть больше учеников, но мне хотелось бы получить некоторые рекомендации о том, как получить среднее значение для Арни, чтобы я мог сделать это для остальных имен самостоятельно.

Вот мой код до сих пор с установленными двумя массивами.

public class workingCode 

{ 
    private static String newline = System.getProperty("line.separator"); 

    public static void stuAnsOut(String arg []) throws IOException 
    { 
     File studentAns = new File("Ans_Stu.txt"); 
     Scanner stuAns = new Scanner(studentAns); 

     String stuAnsString[] = new String[6]; 
     char stuAnsArray[][] = new char[3][5]; 
     String[] stuNameArray = new String[3]; 

     for (int i = 0; i<stuAnsString.length;i++) 
     { 
      stuAnsString[i]=stuAns.nextLine(); 
     } 

     for (int i=0,j=0; i<stuAnsArray.length && j<stuAnsString.length;i++, j=j+2) 
     { 
      stuNameArray[i] = stuAnsString[j];  
     } 

     for (int i=0,j=1; i<stuAnsArray.length && j<stuAnsString.length;i++, j=j+2) 
     { 
      stuAnsArray[i] = stuAnsString[j].toUpperCase().toCharArray();  
     } 

     System.out.println("Student Answers: "); 
     System.out.printf("%5s","Name"); 

     for (int i =0; i<1;i++) 
     { 
      for (int j =1; j<(stuAnsArray[i].length+1);j++) 
      { 
       System.out.printf("%5s",j); 
      } 
     } 
     System.out.printf("%n"); 

     for (int i =0; i<stuAnsArray.length;i++) 
     { 
      System.out.printf("%5s",stuNameArray[i]); 
      for (int j=0;j<stuAnsArray[i].length;j++) 
      { 
       System.out.printf("%5s",stuAnsArray[i][j]); 
      } 
      System.out.printf("%n"); 
     } 
    } 

    public static void corAnsOut(String arg []) throws IOException 
    { 
     File correctAns = new File("Ans_Cor.txt"); 
     Scanner corAns = new Scanner(correctAns); 
     String corAnsString = corAns.next(); 

     char corAnsArray[] = new char[5]; 

     for (int i=0; i<corAnsArray.length;i++) 
     { 
      corAnsArray[i] = corAnsString.toUpperCase().charAt(i); 
     } 
     System.out.println("Correct Answers: "); 
     System.out.println(newline); 

     for (int i =1; i<(corAnsArray.length+1);i++) 
     { 
      System.out.printf("%5s",i); 
     } 
     System.out.printf("%n"); 

     for (int i =0; i<corAnsArray.length;i++) 
     { 
      System.out.printf("%5s",corAnsArray[i]); 
     } 
     System.out.printf("%n"); 
    } 
} 

Мне не разрешено использовать ArrayLists, только массивы. И, пожалуйста, используйте имена массивов, которые у меня уже есть в моем коде. Благодаря!

Редактировать: Это то, что я получил до сих пор. Но это дает мне ошибку:

public static void compareInteger(int corAnsArray [], int stuAnsArray[]) 
{double score =0; 

for (int i = 0; i < stuAnsArray.length; i++) 
{if(stuAnsArray[i] == corAnsArray[i]) 
score += 1.0; 
} 
System.out.println(score/corAnsArray.length); 

} 
+7

В какую часть вы застряли? – shmosel

+0

Итак, первая часть получает среднее значение для каждого ученика. Поэтому я должен вывести оценку Арни и процент, который они получили. Для этого я знаю, что мне нужно сравнить правильный массив ответов с массивом ответов учеников. Как это может быть сделано? Предположим, что я делаю другой метод, как я могу назвать оба массива и найти оценку Арни и вычислить среднее значение? Благодарю. – Nb179

ответ

1

Что я хотел бы сделать, это создать класс под названием Student

public class Student { 
    private string studentName; 
    private float marks; 
    private float average; 

    // Getters & all parameter constructor 
} 

Затем изменить свой рабочий класс

public class workingCode 
{ 
    private static String newline = System.getProperty("line.separator"); 
    public static void stuAnsOut(String arg []) throws IOException 
    { 
     File studentAns = new File("Ans_Stu.txt"); 
     Scanner stuAns = new Scanner(studentAns); 
     List<Student> students = new ArrayList<Student>(); 
     while(stuAns.hasNext()) { 
      string parts = stuAns.nextLine().split(" "); 
      students.add(new Student(parts[0],parts[1],parts[2])) 
     } 
     // At this point you have all the students in the List 
    } 
} 

Теперь для расчета СРЕДНЕГО:

float total = 0; 
for(Student s : students) { 
    total += s.getMarks(); 
} 
System.out.println("avg = " + total/students.size()); 

или

float total = 0; 
for(Student s : students) { 
    total += s.getAverage(); 
} 
System.out.println("avg = " + total); 
+0

Хорошо, но мне не разрешено использовать arraylists, только массивы. – Nb179

+0

@ Nb179 должно быть довольно простым в изменении 'List ' to 'Student []' – StackFlowed

0

Код для сравнения массивов (как для INT и Струнные массивов):

public class Compare{ 
    public static void main(String[] args){ 
     double averageInt; 
     double averageString; 
     int[] correctInt = {9,8,12,6,3,12,90}; //Correct answers 
     int[] answerInt = {9,8,4,6,3,12,90}; //Student's answers 
     String[] correctString = {"A","A","B","C"}; //Correct answers 
     String[] answerString = {"A","C","B","C"}; //Student's answers 
     Compare compare = new Compare(); 
     averageInt = compare.compareInteger(correctInt, answerInt); 
     averageString = compare.compareString(correctString, answerString); 
     System.out.println(averageInt); 
     System.out.println(averageString); 
    } 

    public double compareInteger(int[] correct, int[] answer){ //Compares the int arrays 
     double score = 0; 
     for(int i = 0; i < correct.length; i++){ 
      if(correct[i] == answer[i]) 
       score += 1.0; 
     } 
     return score/correct.length; //Returns average 
    } 

    public double compareString(String[] correct, String[] answer){ //Compares the String arrays 
     double score = 0; 
     for(int i = 0; i < correct.length; i++){ 
      if(correct[i].equals(answer[i])) 
       score += 1.0; 
     } 
     return score/correct.length; //Returns average 
    } 
} 

Я не понимаю систему маркировки, хотя. Если вы объясните это более подробно, я был бы более чем счастлив предоставить вам код.

+0

Итак, первое число - это оценка, а следующая - процент. Таким образом, у Арни есть 4 балла, а процент равен 0,8 (4/5). – Nb179

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