2016-07-11 1 views
0

Мне нужна помощь для распечатки массивов по строкам, но это 2 разных массива ...Как распечатать массив на основе результата, который я хочу? Row by Row

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

Текущая ситуация: Current

Ожидаемый выход ..: Expected

public static void main(String[] args) { 

     // 1D Array for Student Names 
     String[] names = new String[10]; 

     //2D Array for test score 
     double[][] scores = new double[10][5]; 

     //1D Array for grades 
     char[] grades = new char[5]; 

     getNames(names); 
     getScores(scores); 

     print1Array(names); 
     print2Array(scores); 

     calculateAvg(scores); 

     classAvg(scores, names); 

    } // PSVMain 

    // Using FOR loop to read and store each name 
    public static void getNames(String[] data) { 
     Scanner kb = new Scanner(System.in); 

     for (int r = 0; r < data.length; r++) { 
      System.out.println("Enter Student names : "); 

      data[r] = kb.next(); 
     } // For R 
    } // getInput 

    // Using FOR loop to read and store each scores 
    public static void getScores(double[][] data) { 
     Scanner kb = new Scanner(System.in); 

     for (int r = 0; r < data.length; r++) { 
      System.out.println("Enter number for row " + (r + 1)); 

      for (int c = 0; c < data[r].length; c++) { 
       System.out.println("Enter number for column " + (c + 1)); 
       data[r][c] = kb.nextInt(); 

      } // For C 
     } // For R 
    } // getInput 

    public static void classAvg(double[][] data, String[] name) { 

     double[] allAverage = new double[data.length]; 

     double totalAvg = 0; 
     double classAvg = 0; 
     double average = 0; 

     for (int r = 0; r < data.length; r++) { 
      double total = 0; 

      for (int c = 0; c < data[r].length; c++) { 
       total = total + data[r][c]; 
      } // For C 

      average = total/data[r].length; 

      // This is the Average for each ROW 
      allAverage[r] = average; 

      totalAvg = totalAvg + allAverage[r]; 

     } // For R 

     classAvg = (totalAvg/name.length); 

     System.out.println("The class Average score is : " + classAvg); 

    } // classAvg 

    // This method will calculate the Average and assigning Grades 
    public static void calculateAvg(double[][] data) { 
     double[] allAverage = new double[data.length]; 
     char[] allGrades = new char[data.length]; 

     double average = 0; 

     for (int r = 0; r < data.length; r++) { 
      double total = 0; 

      for (int c = 0; c < data[r].length; c++) { 
       total = total + data[r][c]; 
      } // For C 

      average = total/data[r].length; 

      // This is the Average for each ROW 
      allAverage[r] = average; 

      if (average >= 85 && average <= 100) { 
       allGrades[r] = 'A'; 
      } else if (average >= 75 && average <= 84) { 
       allGrades[r] = 'B'; 
      } else if (average >= 65 && average <= 74) { 
       allGrades[r] = 'C'; 
      } else if (average >= 50 && average <= 64) { 
       allGrades[r] = 'D'; 
      } else if (average < 50) { 
       allGrades[r] = 'F'; 
      } // If 

      // Print each ROWS average 
      System.out.println("The average for this row is : " + average); 

      // Print each ROWS grades 
      System.out.println("The Grades for this row is : " + allGrades[r]); 

      System.out.println(); 

     } // For R 

    } // Grades 

    // This method allows it to print 1D Array 
    public static void print1Array(String[] data) { 

     for (int r = 0; r < data.length; r++) { 

      System.out.print("The student names are " + data[r] + " "); 

      System.out.println(); 

     } // For R 

    } //print 1D Array 

    // This method allows it to print 2D Array 
    public static void print2Array(double[][] data) { 

     System.out.println(); 
     System.out.println("This are the respective student's score"); 

     for (int r = 0; r < data.length; r++) { 

      for (int c = 0; c < data[r].length; c++) { 

       System.out.print(data[r][c] + " "); 
      } // For C 

      System.out.println(); 
     } // For R 

    } // Print 2D Array 
+3

Так же, как и в виде sidenode, вы можете создать класс 'Student' для хранения каждого из данных Student, так что у вас не было бы нескольких массивов, которые просто связаны с индексом theyr, чтобы представлять« Student ». Там вы можете легко реализовать методы, чтобы отдельно распечатать данные о студентах, которые на самом деле вы могли бы использовать здесь. – SomeJavaGuy

+0

используйте один цикл для печати обоих массивов –

+0

В вашем дизайне используется так называемое «параллельные массивы». Это сильный анти-шаблон, т. Е. Дизайн, которого следует избегать любой ценой, особенно на объектно-ориентированном языке, таком как Java. Он оставлен с 1960-х годов, когда в Фортране не было данных, кроме массивов. Возьмите предложение @ KevinEsche и определите класс для хранения всей информации для ученика. –

ответ

-1

Этот псевдо-код может помочь вам в достижении желаемого результата

For i=0 till names.length 
    print names[i] 
    total=0 
    For j=0 till scores[i].length 
     print scores[i][j] 
     total=total+scores[i][j] 
    End For 
    Print Average = total/scores[i].length; 
    decide Grade on basis of average and print 
End For 
+0

Извините, вам приходится делать так, что параллельные массивы - шаблон. Ни один ответ не должен поддерживать их использование. –

+0

Thats ok @JimGarrison. Я полностью согласен с вами и имеет объект-ученик со всеми связанными значениями - это правильное решение. Я не хотел давать ответ на чужую идею, поэтому я дал это альтернативное решение. Кстати, вопросы с анти-шаблонами также не допускаются. правильно? – Sanjeev

+0

Должен ли я создать новый метод в соответствии с этим псевдокодом? Где я должен поместить эту логику в какой метод? Извините .. Я очень новичок в массиве и java .. –