JAVA第四次作业《数组-找出最高工资》

CG系统网址:http://211.81.175.89

本节用到:

next()nextLine()以及nextInt()的区别及用法

next()nextLine()以及nextInt()的区别及用法_唐志强的博客-CSDN博客_nextline

【问题描述】定义一个数组来保存教师工资,编程找出并显示最高工资,指出第几个工资最高。

若从键盘输入如下数据:

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

错误示范用到:

 将输入的字符串分隔开

Java输入按空格分开(单个或多个)_markconca的博客-CSDN博客

parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。

Java parseInt() 方法 | 菜鸟教程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏佳怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值