2016-07-12 2 views
2

В следующем коде мне нужно было прочитать список из пяти имен учеников и оценок для пяти викторин для каждого ученика, который загружает имена в ArrayList типа String и метки викторины в стиле ArrayList Integer. Я нарушил эту проблему двумя разными ArrayLists, и я стараюсь совместить их, но не уверен.Объединение массивов в Java

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

import java.util.ArrayList; 
public class QuizAveragee 
{ 
    public static void main(String[] args) { 
     final int NAMELIMIT = 5 ; 
     final int QUIZLIMIT = 5 ; 
     ArrayList<String> sNames = new ArrayList<String>(); 
     ArrayList<String> sFamily = new ArrayList<String>(); 
     Scanner in = new Scanner(System.in); 
     // Load the five names of the students in the arraylist 
     for(int i = 1; i<=NAMELIMIT; i++) 
     { 
      String[] input = in.nextLine().split("\\s+"); 

      sNames.add(input[0]); 
      sFamily.add(input[1]); 
     } 
     for(int i=0; i<NAMELIMIT; i++) 
     { 
      System.out.println("Name: " + sNames.get(i) + " " + sFamily.get(i)); 
     } 
     System.out.println(); 
    } 
} 

со следующими входными:

Sally Mae 90 80 45 60 75 
Charlotte Tea 60 75 80 90 70 
Oliver Cats 55 65 76 90 80 
Milo Peet 90 95 85 75 80 
Gavin Brown 45 65 75 55 80 

Он генерирует:

Name: Sally Mae 
Name: Charlotte Tea 
Name: Oliver Cats 
Name: Milo Peet 
Name: Gavin Brown 

Затем мне нужно было сделать часть программы, которая будет читать в пяти викторинах для каждого ученика и загрузки отметки викторины в массиве ArrayList типа integer. Это то, что я создал для этой части.

import java.util.ArrayList; 
import java.util.Scanner; 
public class heya 
{ 
    public static final int QUIZLIMIT = 5; 
    public static Scanner readQuiz; 

    public static void main(String[] args) 
    { 
     readQuiz = new Scanner(System.in); 

     while (readQuiz.hasNextLine()) { 
      ArrayList<Integer> quizMarks = readArrayList(readQuiz.nextLine()); 
      computerAverage(quizMarks); 
     } 
    } 

    // Load quiz marks 
    public static ArrayList<Integer> readArrayList(String input) 
    { 
     ArrayList<Integer> quiz = new ArrayList<Integer>(); 
     Scanner readQuiz = new Scanner(input); 
     int i = 1; 
     while (i <= QUIZLIMIT) 
     { 
      if (readQuiz.hasNextInt()) { 
       quiz.add(readQuiz.nextInt()); 
       i++; 
      } 
      else { 
       readQuiz.next(); // Toss the next read token 
      } 
     } 
     return quiz; 
    } 

    // Compute the average of quiz marks 
    public static void computerAverage(ArrayList<Integer>quiz) 
    { 
     int total = 0 ; 
     for(Integer value : quiz) 
     { 
      total = total + value; 
     } 
     System.out.println("Quiz Avg: "+ (total/QUIZLIMIT)); 
    } 
} 

, который дает выход:

Quiz Avg: 70 
Quiz Avg: 75 
Quiz Avg: 73 
Quiz Avg: 85 
Quiz Avg: 64 

Однако, мне нужно, чтобы объединить эти программы, которые я не совсем уверен, как это сделать. Данный вход:

Sally Mae 90 80 45 60 75 
Charlotte Tea 60 75 80 90 70 
Oliver Cats 55 65 76 90 80 
Milo Peet 90 95 85 75 80 
Gavin Brown 45 65 75 55 80 

должен дать:

Name: Sally Mae Quiz Avg: 70 
Name: Charlotte Tea Quiz Avg: 75 
Name: Oliver Cats Quiz Avg: 73 
Name: Milo Peet Quiz Avg: 85 
Name: Gavin Brown Quiz Avg: 64 

ответ

4

Это может быть достигнуто гораздо проще с одной петлей, если вы знаете, что данные будут находиться в правильной форме (первая и фамилия а затем 5 классов), и вам не нужно сохранять имена или оценки для последующего использования.

public class QuizAveragee { 
    private static final int NAMELIMIT = 5; 

    public static void main(String[] args) { 
    //these lines are not needed but OP asked for the values to be stored in arrays 
    ArrayList<String> names = new ArrayList<>(); 
    ArrayList<Double> averages = new ArrayList<>(); 
    Scanner in = new Scanner(System.in); 

    for (int i = 0; i < NAMELIMIT; i++) { 
     String line = in.nextLine(); 
     String[] words = line.split(" "); 
     String name = words[0] + " " + words[1]; 
     double average = findAverage(words[2], words[3], words[4], words[5], words[6]); 
     System.out.println("Name : " + name + " Quiz Avg: " + average); 

     //these lines are not needed but OP asked for the values to be stored in arrays 
     names.add(name); 
     averages.add(average); 
    } 
    } 

    private static double findAverage(String a, String b, String c, String d, String e) { 
    double sum = Double.parseDouble(a) + Double.parseDouble(b) + Double.parseDouble(c) + Double.parseDouble(d) + Double.parseDouble(e); 
    return (sum/NAMELIMIT); 
    } 
} 

Если вам нужно сохранить эти значения для последующего использования, я предлагаю сделать использование того факта, что Java является объектно-ориентированным языком и объявить Student объект, который может содержать имена и оценку ваших студентов. Вы можете сделать это вот так:

public class Student { 
    private ArrayList<Integer> grades; 
    private String fName; 
    private String lName; 

    public Student(String inputLine) { 
    grades = new ArrayList<>(); 
    String[] lineSplit = inputLine.split(" "); 
    fName = lineSplit[0]; 
    lName = lineSplit[1]; 
    for (int i = 2; i < lineSplit.length; i++) { 
     grades.add(Integer.parseInt(lineSplit[i])); 
    } 
    } 

    private double computeAvg() { 
    double sum = 0; 
    for (Integer grade : grades) { 
     sum = sum + grade; 
    } 
    return sum/grades.count(); 
    } 

    @Override 
    public String toString() { 
    return "Name: " + fName + " " + lName + " Quiz Avg: " + computeAvg(); 
    } 
} 

private static final int NAMELIMIT = 5; 

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 

    for (int i = 0; i < NAMELIMIT; i++) { 
     String line = in.nextLine(); 
     Student s = new Student(line); 
     System.out.println(s); 
    } 
} 
+0

где я могу добавить это в свой код? мы havent использовали private либо, к сожалению, –

+0

'int average' должно быть' double average'. Вам также не хватает закрывающей скобки для main. –

+0

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

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