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 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决