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

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

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

4个回答

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]);
    }
}

}

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

把学号和成绩组成一个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;
 }
}

//学号 分数: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]);
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问