clarkzsd 2015-11-15 02:40 采纳率: 71.4%
浏览 1683
已采纳

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

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

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

  • 写回答

4条回答 默认 最新

  • 晓呆同学 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]);
        }
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题