2014-01-05 3 views
0

Я создал этот код для средних результатов тестов, однако я помещал каждого ученика test1, test2, test3 и т. Д. В массив. Теперь, как я могу получить общее среднее значение тестового балла для одного теста (.. Ех q1 в индекс массива 0, но они 8 различных q1, Как я могу получить их среднее значение?)Среднее число Чтение в среднем

import java.io.File; 
import java.io.IOException; 
import java.util.*; 

public class Project3 { 

    public static void main(String[] args) throws IOException { 



     ReadFile r = new ReadFile(); 
     r.openFile(); 
     r.readFile(); 
     r.closeFile(); 

-

import java.io.*; 
import java.lang.*; 
import java.util.*; 

public class Grades { 

    private Formatter x; 
    //Formatter variable- output string to file 


    public void openFile(){ 
     //method to open file 
     try{ 
      x = new Formatter("grades.txt"); 


     } 
     catch(Exception e){ 
      System.out.println("Could not find file."); 
     } 
    } 

     public void addRecords(){ 
     x.format("%d",8); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", " Thui", "Bhu", 100, 90, 80, 100, 89, 99, 88); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n ArianaB", "Smith", 90, 90, 100, 100, 99, 100, 95); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n Emily", "Gonzales", 100, 90, 100, 70, 78, 78, 80); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n Jenifer", "L", 80, 90, 90, 100, 89, 99, 85); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n Maria", "Jones", 65, 72, 77, 68, 62, 70, 65); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n Bill", "Gates", 60, 54, 38, 62, 65, 60, 50); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n Escobar", "Morris", 83, 77, 88, 76, 79, 72, 76 ); 
     x.format(" %s %s, %d, %d, %d, %d, %d, %d, %d", "\n Anne", "Latner", 80, 90, 85, 95, 90, 95, 90 ); 


     } 
     public void closeFile(){ 
      x.close(); 
     } 
     // 



} 

-

import java.io.*; 
import java.util.InputMismatchException; 

import java.util.*; 
public class ReadFile { 

private Scanner x; 

     public void openFile(){ 
    try{ 
     x = new Scanner (new File ("grades.txt")); 
    } 
    catch(Exception e){ 
     System.out.println("could not find file"); 
    }} 



public void createFile()throws IOException { 


    try{ 
     File file = new File("grades.txt"); 
     Scanner s = new Scanner(file); 




    while(s.hasNext()){ 

     { 

     double q1average = 0.0, q2average = 0.0, q3average = 0.0, q4average = 0.0; 
     double proji = 0.0, projii =0.0, projiii = 0.0; 
     double q1sum = 0.0, q2sum = 0.0, q3sum = 0.0, q4sum = 0.0; 
     double proji_sum = 0.0, projii_sum = 0.0, projiii_sum =0.0; 
     while(s.hasNext()) { 
      String[] split = s.nextLine().split(", "); 

      q1sum += Double.parseDouble(split[1]); // add all first grades 
      q1average++; 

      q2sum += Double.parseDouble(split[2]); // add all first grades 
      q2average++; 

      q3sum += Double.parseDouble(split[3]); // add all first grades 
      q3average++; 

      q4sum += Double.parseDouble(split[4]); // add all first grades 
      q4average++; 

      proji_sum += Double.parseDouble(split[5]); // add all first grades 
      proji++; 

      projii_sum += Double.parseDouble(split[6]); // add all first grades 
      projii++; 

      projiii_sum += Double.parseDouble(split[7]); // add all first grades 
      projiii++; 
      int maxq1 =0; 
      if(Double.parseDouble(split[1]) > maxq1) 
       maxq1 = (int) Double.parseDouble(split[1]); 
      System.out.println(maxq1); 
     } 

     double q1_average = (q1sum/q1average); 
     double q2_average = (q2sum/q2average); 
     double q3_average = (q3sum/q3average); 
     double q4_average = (q4sum/q4average); 
     double p1_average = (proji_sum/proji); 
     double p2_average = (projii_sum/projii); 
     double p3_average = (projiii_sum/projiii); 
    } 



    }}catch(Exception e){ 
     e.printStackTrace(); 
    } 



} 
public void closeFile(){ 
    x.close(); 
} 
} 
+1

А где в коде является указанный массив? –

+0

Вы не помещаете КАЖДОГО ученика в массив, вы помещаете все данные в массив, разделенный символом (точка). – solvator

+0

Кажется, это домашнее задание! –

ответ

2

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

+0

Как я могу это сделать, используя только переменные q1, q2 и т. Д.? – user3163493

+0

Точно так же, как я сказал: определите дополнительную переменную для каждой суммы или среднего значения, которое вы хотите иметь. Таким образом, у вас может быть двойной avgQ1 = 0; а затем у вас есть: avgQ1 + = q1; внутри цикла. После цикла сделайте avgQ1/= numStudents. Вы должны будете определить и подсчитать количество студентов, которые вы прочитали для этого, а затем. –

+0

Хотя в вашем случае вам понадобится еще один цикл или какой-либо другой способ чтения и подсчета количества студентов, прежде чем выполнять часть вычисления во втором (текущем) цикле. –

0

Это будет не очень хороший способ сделать это, но он должен работать. Итак, ваш массив равен split[], и он хранит все данные, разделенные , (запятая). Так что, если вы заметили, если добавить +8 index в свой первый студент q «с (q1, например хранится в split[1], поэтому +8, а второй Studentq1 будут храниться в split[9]) вы получите ваш второй студент д х. Так может сделать что-то вроде этого:

int std=0 
int q1=0,a=1; 
while(a<split.length){ 
q1+=Integer.parseInt(split[a]); 
a+=8; 
std++; 
} 
int result = q1/std; 

// This will count all students q1 and take average 

То же самое можно сделать с другими q. Но, как я уже сказал, это шаблонный код.

+0

Я попробовал это, и я только что получил числа в диапазоне 100-200 – user3163493

+0

Я отредактировал для() loop, это не будет ++ – solvator

+0

тот же диапазон чисел, и они дают 8 разных значений – user3163493

0

В принципе, у вас есть многомерный массив. У вас есть несколько тестов («строк») на нескольких строках («столбцы»). Вам нужно поместить каждую строку где-нибудь, чтобы вы могли вспомнить их позже.

Вы можете сделать что-то простое, как это:

double grades = 0.0; 
double sum = 0.0; 
while(s.hasNext()) { 
    String[] split = s.nextLine().split(", "); 

    sum += Double.parseDouble(split[1]); // add all first grades 
    grades++; 
} 
System.out.println(sum/grades); 

Или что-то более сложное:

List<ArrayList<String>> allGrades = new ArrayList<ArrayList<String>>(); 
while(s.hasNext()) { 
    allGrades.add(Arrays.asList(s.nextLine().split(", "))); 
} 

StringBuilder results = new StringBuilder(); 
int cols = allGrades.get(0).size(); 
for(int c = 1; ;) { // outer for every test 

    double sum = 0.0; 
    double count = 0.0; 
    double max = 0.0; 
    for(int r = 0; r < allGrades.size(); r++) { // inner for every person 
     count++; 
     double grade = Double.parseDouble(allGrades.get(r).get(c)); 
     sum += grade; 
     if(grade > max) { 
      max = grade; 
     } 
    } 

    results.append("[test "); 
    results.append(c); 
    results.append(": avg = "); 
    results.append(sum/count); 
    results.append(", max = "); 
    results.append(max); 
    results.append(']'); 

    if(++c < cols) { // fence post logic... 
     results.append(", "); 
    } else { 
     break; 
    } 
} 

System.out.println(results); 

Или, может быть, как это:

double[] avgs = new double[7]; 
double count = 0.0; 
while(s.hasNext()) { 
    String[] split = s.nextLine().split(", "); 

    for(int i = 0, k = 1; k < split.length; i++, k++) { 
     avgs[i] += Double.parseDouble(split[k]); 
    } 

    count++; 
} 

for(int i = 0; i < avgs.length; i++) { 
    System.out.println("test avg " + (i + 1) + ": " + (avgs[i]/count)); 
} 
+0

для более простого ... должен ли я сделать новый цикл while для каждого теста? – user3163493

+0

Не обязательно, вы можете сохранить результаты в массиве. См. Другой фрагмент, который я добавил. Но в целом из-за 2D-аспекта вы будете иметь вложенный цикл. Либо это, либо жесткий код, что-то вроде того, что вы предлагаете. – Radiodef

+0

Как бы предлагалось найти максимальное количество каждого теста – user3163493

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