CG系统网址:http://211.81.175.89
本节用到:
next()nextLine()以及nextInt()的区别及用法
【问题描述】定义一个数组来保存教师工资,编程找出并显示最高工资,指出第几个工资最高。
若从键盘输入如下数据:
7000 6500 7890 8500 8000 8200
则输出:No 4 salary maxsalary:8500
若输入如下数据:
8500 7000 6500 7890 8000 8200
则输出:No 1 salary maxsalary:8500
【输入形式】
6个整数,之间用空格分开,输入结束后按回车
【输出形式】
No 1 salary maxsalary:8500
【样例输入】
7000 6500 7890 8500 8000 8200
【样例输出】
No 4 salary maxsalary:8500
解法一:
这个题需要找出最大值和最大值的数组下标,所以不需要用到冒泡排序,只需要比较后把最大的及其下标保存下来即可
import java.util.Scanner;
import static java.lang.Integer.*;
public class Wages {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=1;//第几个人的工资最大,从第一个人开始
int [] a = new int[6];//10个数组元素
for(int i = 0;i<6;i++){
a[i] = sc.nextInt();
//使用nextInt()方法时,,它的返回值是int类型的,将空格看作是两个输入的数据的间隔
}
for(int i =0;i<6;i++){
if(a[i]>a[0]){
a[0]=a[i];
num=i+1;//第几个人的工资最大
}
}
System.out.println("No "+num+" salary maxsalary:"+a[0]);
}
}
解法二:卢氏解法
为什么叫卢氏解法呢,因为是一个叫卢逢源的同学想的
将输入的数据存两份,分别放在数组a和数组b中,然后用Arrays.sort(a);将数组a排序,数组b不动,现在a[5]是最大的,然后只需要在数组b中找出与a[5]值相等的那个数组的下标即可
import java.util.Arrays;
import java.util.Scanner;
import static java.lang.Integer.*;
public class Wages {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=1;//第几个人的工资最大,从第一个人开始
int [] a = new int[6];//10个数组元素
int [] b = new int[6];//创建一个数组b用作寻找最大值得下标
for(int i = 0;i<6;i++){
a[i] = sc.nextInt();
//使用nextInt()方法时,,它的返回值是int类型的,将空格看作是两个输入的数据的间隔
}
for(int i = 0;i<6;i++){
b[i] = a[i]; //复制一份数组a给数组b,保护一下
}
Arrays.sort(a); //对数组a进行排序,此时a[5]最大
for(int i =0;i<6;i++){
if(a[5]==b[i]){//找出数组b中与排序后的最大值a[5]相等的b[i]
num=i+1;//i+1赋值给num,得出第几个人的工资最大
}
}
System.out.println("No "+num+" salary maxsalary:"+a[5]);
}
}
以下是非最优解 :
起初,不清楚nextInt();的具体用法,以为只能用“回车”去间隔两次输入,造成了下面的麻烦做法
把输入的6个工资包含空格在内看作一串字符串,然后以空格为分割点,分隔开6个字符串赋值给字符串数组,然后将字符串数组用循环挨个遍历用“Integer.parseInt(x[i])”强制转换成整形
import java.util.Scanner;
import static java.lang.Integer.*;
public class Wages {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=1; //第几个人的工资最大,从第一个人开始
int [] a = new int[6]; //10个数组元素
String s = sc.nextLine(); //输入一个用空格隔开整数的字符串
String[] x = s.split(" "); //根据空格隔开,分成字符串数组
for(int i = 0;i<6;i++){
a[i] = Integer.parseInt(x[i]);//字符串数组强制转换成整型
}
for(int i =0;i<6;i++){
if(a[i]>a[0]){
a[0]=a[i]; //a[0]永远最大
num=i+1; //第几个人的工资最大
}
}
System.out.println("No "+num+" salary maxsalary:"+a[0]);
}
}
错误示范用到:
将输入的字符串分隔开
parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。