clarkzsd
clarkzsd
采纳率71.4%
2015-11-15 02:40 阅读 1.7k
已采纳

java语言如何用数组解这道题? 只需大神指点一下关键要点……

5

java 修改标签
【问题描述】
用一维数组存储学号和成绩,然后,按成绩排序输出。
【输入形式】
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
【输出形式】
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
【样例输入】
3
1 90
2 87
3 92
【样例输出】
2 87
1 90
3 92

新手菜鸟表示主要是学号和成绩捆绑输出 不会。还有 如果学生的成绩相同,则按照学号的大小进行从小到大排序 这个也不懂。
求大神指点迷津。
只需大神指点一下关键要点……

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    daidaineteasy 晓呆同学 2015-11-15 03:37

    package com.content;

    import java.util.Arrays;

    public class Test {

    //学生个数
    static int num = 0;
    
    //数组
    static String[] numScore = null;
    
    //当前数组位置从1开始,最大为num
    static int flag = 1;
    
    public static void main(String[] args) {
    
        //1、获取第一行学生个数
        getNum();
        //2、初始化数组
        numScore = new String[num];
        //3、逐行给数组赋值
        for(int i=0; i<num; i++){
            initArgs();
        }
        //4、数组排序
        Arrays.sort(numScore);
    
        //5、按要求输出
        printArgs();
    }
    
    /**
     * 用来获取第一行学生个数
     */
    @SuppressWarnings("resource")
    public static void getNum(){
        java.util.Scanner inputScanner = null;
    
        System.out.println("请输入学生个数!必须为正整数");
    
        String inputStr = "";
        while(true){
            inputScanner = new java.util.Scanner(System.in);
            if(inputScanner.hasNext()){
                inputStr = inputScanner.next();
            }
            if(null == inputStr || "".equals(inputStr.trim())){
                System.out.println("学生个数不能为空,请重新输入!");
                inputScanner = null;
                continue ;
            }else if(!inputStr.matches("[1-9]+")){
                System.out.println("学生个数必须为正整数,请重新输入!");
                inputScanner = null;
                continue ;
            }
    
            num = Integer.valueOf(inputStr);
    
            break;
        }
    }
    
    /**
     * 逐行给数组输入值
     */
    public static void initArgs(){
    
        java.util.Scanner inputScanner = null;
        System.out.println("请输入第"+flag+"行学号和成绩内容!,格式为:学号 成绩");
    
        String stuNum = "";
        String score = "";
        while(true){
            inputScanner = new java.util.Scanner(System.in);
            if(inputScanner.hasNext()){
                stuNum = inputScanner.next();
            }
            if(null == stuNum || "".equals(stuNum.trim())){
                System.out.println("学号不能为空,请重新输入!");
                inputScanner = null;
                continue ;
            }
    
            if(inputScanner.hasNext()){
                score = inputScanner.next();
            }
    
            if(null == score || "".equals(score.trim())){
                System.out.println("成绩不能为空,请重新输入!");
                inputScanner = null;
                continue ;
            }
    
            if(!stuNum.matches("[0-9]+") || !score.matches("[0-9]+")){
                System.out.println("学号和成绩必须为整数,请重新输入!");
                inputScanner = null;
                continue ;
            }
    
            //学号和成绩倒过来放,这样能方便咱们要求的排序
            numScore[flag - 1] = score+" "+stuNum;
            flag ++;
            break;
        }
    }
    
    /**
     * 按要求打印输出内容
     */
    public static void printArgs(){
        String[] strArgs = null;
    
        for(String str : numScore){
    
            strArgs = str.split(" ");
    
            System.out.println(strArgs[1]+" "+strArgs[0]);
        }
    }
    

    }

    点赞 1 评论 复制链接分享
  • a87b01c14 sanxiaochengyu 2015-11-15 03:04

    亲,用二维数组,这么提示够么

    点赞 评论 复制链接分享
  • Evankaka Evankaka 2015-11-15 03:33

    把学号和成绩组成一个class ,然后放进到一维数组,然后自定义排序函数:
    如下面

     /*
    java 中数组的排序 对象数组 的排序
    基本类型的数组可以直接排序但是 引用类型的数组 不能直接排序 
    首先要实现 Comparable 接口并且重载compareTo方法 这个方法在  
    java.until包中的 Arrays 类 的  binarySearch() sort()进行排序和 查找  
    我们自定义的类进行排序  ,对象的搜索通过 binarySearch  但是这种搜索必须是排序号了的数组 
    String类 有 compareTo函数 可以直接进行比较 ,
    */ 
    import java.util.Arrays; //排序函数在Arrays类中
    class   Test
    {
     public static void main(String []args)
     {
      point []arr=new point[]{new point(12,"xiaoming"), new point(1,"xiaowang"),new point(4,"xiaoxiao"),new point(12,"xiaowei")};  
      Arrays.sort(arr);   //排序对象
      for(int n=0;n<arr.length;n++)
      {
       System.out.println(arr[n]);   //对象直接回调用 toString函数 我们在类中重载了就会输出我们想要的信息
      }
    
      int index=Arrays.binarySearch(arr,arr[2]);
      System.out.println(index);
      System.out.println("index element="+arr[index]);
    
    
     }
    }
    class  point  implements Comparable  //实现Comparable接口  我们要实现 compareTo函数 
    {
     int num;
     String name;
     point(int num,String name)
     {
      this.num=num;
      this.name=name;
     }
     public int compareTo(Object o)   //重载compareTo函数 
     {
      point p=(point)o;
      int n= num>p.num?1:(num==p.num?0:-1);
      if(n==0)
      {
       n=name.compareTo(p.name);
      }
      return n;
     }
     public   String toString()
     {
      return name+":"+num;
     }
    }
    
    点赞 评论 复制链接分享
  • N_ou25 N_ou25 2015-11-15 03:34

    //学号 分数:10指定 具体 按照 你自己输入
    int[] student = new int[10];
    int[] score = new int[10];

    public void getIndex(){

        for(int i = 0; i < student.length - 1; i++){
    
            for(int j = 1; j < student.length; j++){
                if(score[i] > score[j]){
                    //不用处理
                }else if(score[i] == score[j]){
                    //判断学号大小
                    if(score[i] < score[j]){
                        int sc1 = score[i];  //交换分数数组
                        score[i] = score[j];
                        score[j] = sc1;
    
                        int st1 = student[i]; //交换学号数组
                        student[i] = student[j];
                        student[j] = st1;
                    }else{
                        //其余情况不处理
                    }
                }else{
                    int sc1 = score[i];  //交换分数数组
                    score[i] = score[j];
                    score[j] = sc1;
    
                    int st1 = student[i]; //交换学号数组
                    student[i] = student[j];
                    student[j] = st1;
                }
            }
        }       
    }
    
    //输出方法
    public void print(int[] student,int[] score){
        for(int i = 0; i < student.length - 1; i++){
            System.out.println(student[i] + "  " + score[i]);
        }
    }
    
    点赞 评论 复制链接分享

相关推荐