当前位置: 首页 > news >正文

多条件查询--java算法

文章目录

  • 代码网址
  • 题目
  • 用例
  • 解答
    • 输入
    • 多条件查询
  • 优化


代码网址

https://gitee.com/zfranklin/java-intelli-j/blob/master/OD/src/C5My.java

题目

在这里插入图片描述

用例

在这里插入图片描述

解答

此题考查多条件查询。

输入

身高一行,体重一行,两次循环,可以新增第三列,存放学生编号 i+1。因为下标和编号不匹配,用下标可能会忘记加一而出错。

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] students= new int[n][3];
for (int i=0;i<students.length;i++) {
    students[i][0] = sc.nextInt();
}
for (int i=0;i< students.length;i++) {
    students[i][1] = sc.nextInt();
    students[i][2] = i+1;
}

多条件查询

可以用Arrays.sort

Arrays.sort(students,(a,b)->{
    if (a[0] != b[0]) {
        return a[0] - b[0];
    }
    if (a[1] != b[1]) {
        return a[1]-b[1];
    }
    return a[2]-b[2];
});

for (int i=0;i<students.length;i++) {
    System.out.print(students[i][2]+" ");
}

第一个参数,传递过来的students二维数组,a和b表示任意两个元素,二维数组的元素就是一维数组,其实就是一行。我们去判断下标为0(身高)是否相等,不相等就返回a[0]-b[0],如果小于0,就是a排在b前面,大于0,b排在a前面。如果相等,就进入后续判断,判断体重,同理,最后判断编号。

lambda表达式判断大小sort函数里面有一个函数作为第二个参数,但是这里并没有明显的单独写一个类和方法,而是用lambda表达式

(参数)->{ }

lambda表达式通常与函数式接口一起使用。函数式接口是指只包含一个抽象方法的接口,我们在实现该接口的时候就可以使用此表达式简化书写。

下面给出不用lambda表达式的版本,可以明显看出比较复杂。

class StudentComparator implements Comparator<int[]> {
    @Override
    public int compare(int[] a, int[] b) {
        if (a[0] != b[0]) {
            return a[0] - b[0];
        }
        if (a[1] != b[1]) {
            return a[1] - b[1];
        }
        return a[2] - b[2];
    }
}

使用

Arrays.sort(students, new StudentComparator());

优化

实现comparator接口除了用if判断,还可以用三目表达式

Arrays.sort(students,(a,b)->{
    return a[0]!=b[0]?a[0]-b[0]:a[1]!=b[1]?a[1]-b[1]:a[2]-b[2];
});

由于只有一个返回语句,可以省略大括号和return关键字。

Arrays.sort(students, (a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] != b[1] ? a[1] - b[1] : a[2] - b[2]);

输出
为了避免最后一个数字后面多打印一个空格,我们可以加入判断,不是最后一个i,才打印" "空格,也可以使用StringJoiner。

StringJoiner sj = new StringJoiner(" ");
for (int i=0;i<students.length;i++) {
    sj.add(String.valueOf(students[i][2]));
}
System.out.println(sj.toString());

这样就可以避免最后一个数后面会跟一个" "空格,只有数与数之间会有空格每隔。


文章转载自:

http://6YukEY9J.drhbk.cn
http://BT18SfQt.drhbk.cn
http://PRzGGUPM.drhbk.cn
http://jkrZhysb.drhbk.cn
http://WUVWmnzr.drhbk.cn
http://L2j43N7a.drhbk.cn
http://iBclLgS6.drhbk.cn
http://MxytQtTI.drhbk.cn
http://EViP8M5o.drhbk.cn
http://MQ3kb0Iy.drhbk.cn
http://shytD6sA.drhbk.cn
http://i1CZ0rWN.drhbk.cn
http://VJKUPm2Q.drhbk.cn
http://C4t0A1JA.drhbk.cn
http://NnSZP6D5.drhbk.cn
http://ePlE5Ffd.drhbk.cn
http://1fDEMzCG.drhbk.cn
http://FwzIc6SI.drhbk.cn
http://4ZGdCbgo.drhbk.cn
http://HFiUssA5.drhbk.cn
http://9aTkFiCn.drhbk.cn
http://Vm8rzdsM.drhbk.cn
http://LuIy73ri.drhbk.cn
http://AGCw8mmf.drhbk.cn
http://4nv8BF2c.drhbk.cn
http://8NGYHdTi.drhbk.cn
http://w7nKSNB4.drhbk.cn
http://t16Exu8b.drhbk.cn
http://IeIbgNCv.drhbk.cn
http://hhGz0MVB.drhbk.cn
http://www.dtcms.com/a/57498.html

相关文章:

  • OkHttp:工作原理 拦截器链深度解析
  • 垂直领域大模型优化:从“通用”到“专精”——打造医疗、金融、法律领域的AI专家
  • 解决stylelint对deep报错
  • C++:string容器(下篇)
  • Qt常用控件之树形QTreeWidget
  • 系统架构设计师—系统架构设计篇—基于体系结构的软件开发方法
  • 可变参数与递归
  • R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用
  • OmniDrive(2):环境搭建
  • 视觉在协作机器人上的场景应用
  • STM32之PWR
  • 手写识别革命:Manus AI如何攻克多语言混合识别难题(二)
  • DeepSeek R1-7B 医疗大模型微调实战全流程分析(全码版)
  • 机器学习的发展史
  • 如何设计评论系统
  • 【计网】应用层
  • c语言程序设计--(数据的存储)冲刺考研复试面试简答题,看看我是怎么回答的吧!!!!!
  • C++设计模式总结
  • 最长递增子序列--蓝桥oj3046拍照
  • 深度学习|MAE技术全景图:自监督学习的“掩码魔法“如何重塑AI基础
  • FastExcel/EasyExcel简介以及源码解析
  • Ubuntu系统安装Minikube教程
  • π0及π0_fast的核心源码剖析——核心模块src的全面分析与解读:如何实现PaLI-Gemma、如何去噪生成动作
  • DTO 命名规范指南
  • 达梦数据库学习笔记@3
  • Unity DOTS 从入门到精通之 创建实体
  • Unity引擎使用HybridCLR(华佗)热更新
  • LangChain构建语言模型驱动应用的强大框架
  • 深入理解Linux网络随笔(四):内核是如何与用户进程协作的(下篇:多路I/O复用模型epoll)
  • c语言笔记 数组进阶题目的理解