java 修改标签
【问题描述】
用一维数组存储学号和成绩,然后,按成绩排序输出。
【输入形式】
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
【输出形式】
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
【样例输入】
3
1 90
2 87
3 92
【样例输出】
2 87
1 90
3 92
新手菜鸟表示主要是学号和成绩捆绑输出 不会。还有 如果学生的成绩相同,则按照学号的大小进行从小到大排序 这个也不懂。
求大神指点迷津。
只需大神指点一下关键要点……
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]);
}
}