当前位置: 首页 > 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());

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

相关文章:

  • OkHttp:工作原理 拦截器链深度解析
  • 垂直领域大模型优化:从“通用”到“专精”——打造医疗、金融、法律领域的AI专家
  • 解决stylelint对deep报错
  • C++:string容器(下篇)
  • Qt常用控件之树形QTreeWidget
  • 系统架构设计师—系统架构设计篇—基于体系结构的软件开发方法
  • 可变参数与递归
  • R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用
  • OmniDrive(2):环境搭建
  • 视觉在协作机器人上的场景应用
  • STM32之PWR
  • 手写识别革命:Manus AI如何攻克多语言混合识别难题(二)
  • DeepSeek R1-7B 医疗大模型微调实战全流程分析(全码版)
  • 机器学习的发展史
  • 如何设计评论系统
  • 【计网】应用层
  • c语言程序设计--(数据的存储)冲刺考研复试面试简答题,看看我是怎么回答的吧!!!!!
  • C++设计模式总结
  • 最长递增子序列--蓝桥oj3046拍照
  • 深度学习|MAE技术全景图:自监督学习的“掩码魔法“如何重塑AI基础
  • 平面设计需要用到的软件/东莞seo优化排名推广
  • 做php网站用什么软件/百度客户端手机版
  • 做网站大概要多/推广引流app
  • wordpress文章添加meta/游戏优化大师官方下载
  • 可以做c 试题的网站/新闻近期大事件
  • 查收录网站/黄页引流推广链接