并排打印1D和2D阵列

时间:2016-03-02 05:37:27

标签: java arrays

我是Java新手(一般编码),所以我很抱歉提前出错。我确定这可能是一种更简单的方法,但我无法弄明白。 我觉得我也犯了一个非常明显的错误。

这就是我被要求做的事情:

  

编写一个程序,以随机顺序输入10个学生姓名   他/她相应的3个项目分数。将读取这些数据   分成两个独立的数组:一个用于保存名称的字符串数组,以及一个   用于保存分数的二维数组。你可以输入   来自键盘或文本文件的数据。

     

以表格形式输出输入数据。

     

使用选择排序,重新排列随机学生姓名   按字母顺序排列。显然需要相应的分数   按照排序顺序。 输出已排序的名称和分数   表格。

     

使用二进制搜索,您的程序将允许用户输入名称。   您的程序将输出名称及其相应的3项目   分数。

     

对于3个项目中的每个项目,输出学生的姓名   得分最高。

粗体部分是我被困的地方。我编译并正常运行,但是当打印表格时,只会输出最后输入的3个数字组合(是的,格式化需要处理,以便它是一个表格,这只是一个临时格式,直到我解决了这个问题)     This is what I get.其他名字被切掉了,但无论如何他们都打印了相同的分数。

import java.util.Scanner;

/**Write a program that will input 10 students names
* in random order and their corresponding 3 project scores.
* Data will be read into 2 separate arrays: an array of strings
* for the names and a 2D array for the scores.
* Output input data in table form
*For each of the 3 projects, output the name of the student(s) who scored
the highest mark.
**/

public class NameAndGrades
{
 public static void main (String[] args)
 {
   //Scanner object to allow user input
     Scanner scnr = new Scanner(System.in);

   //This array will store the names of the students
     String[] names = new String[10];

   //This 2D array will store the 3 project scores
     int[][] scores = new int [10][3];


      //Ask user to input the student names
       System.out.println("Enter the 10 student names: ");

       for (int index = 0; index < 10; index++)
       {
         System.out.print("Student " + (index +1) + ": ");
         names[index] = scnr.nextLine();
       }


       selectionSort(names);


      //Will print the names alphabetically
      //THIS WILL BE DELETED LATER, IT WAS JUST TO CHECK IF IT DID ITS JOB

      System.out.println("The students' names in alphabetical order: ");

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


     //Ask user to enter the corresponding project scores

       System.out.println("Enter the 3 project "
                          + "scores for each student: ");

        for (int row = 0; row < scores.length; row++)
        {
         for (int i = 0; i < names.length; i++)
           {
            for (int col = 0; col < scores[row].length; col++)
             {
              System.out.print(names[i] + " Test "
                               + (col +1) + ": ");
              scores[row][col] = scnr.nextInt();
             }
            }
            break;
          }


     //PRINT NAMES AND SCORES SIDE BY SIDE
     //MAKE TABLE HEADING HERE
       for (int row = 0; row < scores.length; row++)
        {  
         for (int i = 0; i < names.length; i++)
         {
          System.out.println(names[i] + " grades: ");
           for (int col = 0; col < scores[row].length; col++)
            {
             System.out.print(scores[row][col] + " ");
            }
           System.out.println();
         }break;
        }
   }



/**Selection sort method made to sort the student names in
* alphabetical order.
@param names names of students
@return the names organized alphabetically
**/

public static String[] selectionSort(String[] names)
 {
  for (int index = 0; index < names.length - 1; ++index)
   {
     int minIndex = index;
      for (int j = index + 1; j < names.length; ++j)
       {
        if (names[j].compareTo(names[minIndex]) < 0)
         {
          minIndex = j;
         }
       }
  String temp = names[index];
  names[index] = names[minIndex];
  names[minIndex] = temp;
     }
   return (names);
  }
}

我如何编辑这个,以便每个学生都有正确的分数? 提前感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

请注意,得分数组和名称数组是相关的。因此,正如您所做的那样,输入名称,对其进行排序,然后要求用户输入分数。这意味着您在排序名称时不必处理分数。这意味着

names[i] has the scores in scores[i][0...2]

for(int i = 0; i < names.length; ++i)
    print names[i] + " : " + scores[i][0] + ", " + scores[i][1] + ", " + scores[i][2] ;

See here

此外,您可能希望使用固定宽度。查找输出格式化程序以正确格式化表。

理想情况下,您需要创建一个包含名称和三个标记作为数据的类,并实现自定义Comparator(比较字典顺序的名称),然后将列表存储在{{1并排序它。

修改 根据您的问题(以及评论中提到的),您可能希望首先获取输入然后排序,这意味着您需要以与对名称相同的方式处理分数,即{{1} }和ArrayList已交换,因此应names[i]names[j]