Java——输入,循环,BigInteger,拷贝,排序

news2025/4/1 17:44:45

读取输入

打印输出到“ 标准输出流”(即控制台窗口)是一件非常容易的事情,只要 调用System.out.println 即可。然而,读取“ 标准输人流” System.in就没有那么简单了。要想通 过控制台进行输人,首先需要构造一个Scanner对象,并与“ 标准输人流” System.in关联。nextLine() 和 nextInt() 是 Scanner 类的常用方法,用于读取用户输入。

nextInt()

读取下一个整数,但不会读取整数后的换行符

		Scanner in=new Scanner(System.in);
		
		int a =in.nextInt();
		int b=in.nextInt();
		int c =in.nextInt();

nextLine()

读取整行输入(包括空格和换行符),会消耗当前行的所有剩余字符

		String a=in.nextLine();
		String b=in.nextLine();
		String c=in.nextLine();
//		System.out.println(d);
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);

 常见问题:输入被跳过

当连续使用 nextInt() 和 nextLine() 时,可能出现 nextLine() 直接读取空字符串的情况。
原因:nextInt() 读取整数后,换行符 \n 仍留在输入缓冲区中,nextLine() 会直接读取这个换行符作为输入。

		int d=in.nextInt();
		nexLine 前边有其他输入,会多吃一空格,如果前面需要有其他输入,就在中间多吃一次,即in。nextLine
//		in.nextLine();
		String a=in.nextLine();
		String b=in.nextLine();
		String c=in.nextLine();
		System.out.println(d);
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);

解决方案

方案一:在 nextInt() 后手动读取换行符 

		int d=in.nextInt();
		nexLine 前边有其他输入,会多吃一空格,如果前面需要有其他输入,就在中间多吃一次,即in。nextLine
		in.nextLine();
		String a=in.nextLine();
		String b=in.nextLine();
		String c=in.nextLine();
		System.out.println(d);
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);

方案二:统一使用 nextLine() 读取输入

循环

for-each

for-each 循环也被叫做增强型 for 循环,它为遍历数组或集合提供了一种更为简洁的方式

		int[] arr= {1,5,7,10};
		for(int x:arr) {
			System.out.println(x);
		}
		String[] arr2= {"aa","bb","cc"};
		for(String x:arr2) {
			System.out.println(x);
		}
		int[][] arr3= {{1,2},{3,4}};
		for(int[] x:arr3) {
			for(int z:x){
				System.out.println(z);
			}
		}

 switch

 switch 语句是许多编程语言中常用的一种条件控制结构,它允许根据一个表达式的值来选择执行多个代码块中的某一个。在 Java 中,switch 语句可以接受 byteshortcharintenum 类型以及 String 类型的表达式。

		        int day = 3;
		        switch (day) {
		            case 1:
		                System.out.println("星期一");
		                break;
		            case 2:
		                System.out.println("星期二");
		                break;
		            case 3:
		                System.out.println("星期三");
		                break;
		            case 4:
		                System.out.println("星期四");
		                break;
		            case 5:
		                System.out.println("星期五");
		                break;
		            case 6:
		                System.out.println("星期六");
		                break;
		            case 7:
		                System.out.println("星期日");
		                break;
		            default:
		                System.out.println("无效的日期");
		        }

switch击穿

“switch 击穿” 一般指的是在 switch 语句里,没有使用 break 语句来终止 case 块的执行,从而使得程序继续执行下一个 case 块的情况。

在多数编程语言中,switch 语句依据表达式的值来匹配对应的 case 标签。当找到匹配的 case 后,就会开始执行该 case 块中的代码。要是这个 case 块里没有 break 语句,程序不会跳出 switch 语句,而是会接着执行下一个 case 块中的代码,这就是 “击穿” 现象。

public class SwitchFallthroughExample {
    public static void main(String[] args) {
        int num = 2;
        switch (num) {
            case 1:
                System.out.println("数字是 1");
            case 2:
                System.out.println("数字是 2");
            case 3:
                System.out.println("数字是 3");
            default:
                System.out.println("不是 1、2、3");
        }
    }
}

BigInteger 

java.math.BigInteger 类能够处理任意大小的整数。它提供了丰富的方法来进行大整数的算术、逻辑和比较运算。


		        // 创建 BigInteger 对象
		        BigInteger num1 = new BigInteger("12345678901234567890");
		        BigInteger num2 = new BigInteger("98765432109876543210");

		        // 加法运算
		        BigInteger sum = num1.add(num2);
		        System.out.println("两数之和: " + sum);

		        // 乘法运算
		        BigInteger product = num1.multiply(num2);
		        System.out.println("两数之积: " + product);

		        // 比较大小
		        int compareResult = num1.compareTo(num2);
		        if (compareResult < 0) {
		            System.out.println(num1 + " 小于 " + num2);
		        } else if (compareResult > 0) {
		            System.out.println(num1 + " 大于 " + num2);
		        } else {
		            System.out.println(num1 + " 等于 " + num2);
		        }
		 

拷贝 

依据复制方式的不同,可分为浅拷贝和深拷贝。

浅拷贝

浅拷贝仅复制对象的一层属性。要是对象的属性是引用类型,那么浅拷贝只会复制引用,而不会复制对象本身,这就导致原对象和拷贝对象可能会共享一部分数据。

//		浅
		int[] arr2= {4,7,8,9};
		int[] arr4=arr2;
		System.out.println(Arrays.toString(arr2));
		System.out.println(Arrays.toString(arr4));

 

深拷贝

深拷贝会递归地复制对象的所有属性,包含引用类型的属性。这样原对象和拷贝对象就不会共享任何数据,对一方的修改不会影响到另一方

		int[] arr2= {4,7,8,9};
		int[] arr5 =new int[arr2.length];
		for(int i=0;i<arr5.length;i++) {
			arr5[i]=arr2[i];
		}
		arr5[0]=100;
		System.out.println(Arrays.toString(arr2));
		System.out.println(Arrays.toString(arr5));

 排序

public class ArraySorting {
    public static void main(String[] args) {
        // 整数排序
        Integer[] arr7 = {10, 1, 7, 2, 4};
        // 使用 Lambda 表达式实现降序排序
        Arrays.sort(arr7, (a, b) -> b - a);
        // 或者使用 Collections.reverseOrder() 实现降序排序
        // Arrays.sort(arr7, Collections.reverseOrder());
        System.out.println(Arrays.toString(arr7));

        // 字符串排序
        String[] arr8 = {"aaa", "vvv", "ccc", "azz", "azc"};
        Arrays.sort(arr8);
        System.out.println(Arrays.toString(arr8));

        Person x1 = new Person(20, 168, "李华");
        Person x2 = new Person(19, 185, "赵雨");
        Person x3 = new Person(24, 178, "周H");
        Person[] arr10 = {x1, x2, x3};
        // 按年龄升序排序
        Arrays.sort(arr10, (a, b) -> a.age - b.age);
        System.out.println(Arrays.toString(arr10));
    }
}
package com.qcby.基础类型;

public class Person {
	int age;
	int height;
	String name;
	public Person(int age, int height, String name) {
		super();
		this.age = age;
		this.height = height;
		this.name = name;
	}
	@Override
	public String toString() {
		return "Node [age=" +age + ", height=" + height + ", name=" + name + "]";
	}
	
	

}

整数数组排序:

创建了一个 Integer 类型的数组 arr7。
使用 Arrays.sort 方法进行排序。Arrays.sort 方法有多个重载版本,这里使用的是接收一个数组和一个 Comparator 比较器的版本。(a, b) -> b - a 是一个 Lambda 表达式,它定义了一个比较器,实现了降序排序。如果 b - a 大于 0,则 b 应该排在 a 前面。也可以使用 Collections.reverseOrder() 来实现降序排序。
最后使用 Arrays.toString 方法将排序后的数组转换为字符串并打印。

字符串数组排序:

创建了一个 String 类型的数组 arr8。
直接调用 Arrays.sort 方法对数组进行排序。由于 String 类实现了 Comparable 接口,所以 Arrays.sort 方法会按照 String 的自然顺序(字典序)进行排序。
同样使用 Arrays.toString 方法打印排序后的数组。

自定义类对象数组排序:

创建了三个 Person 对象 x1、x2、x3,并将它们存储在数组 arr10 中。
使用 Arrays.sort 方法和 Lambda 表达式 (a, b) -> a.age - b.age 对数组进行排序。这个 Lambda 表达式定义了一个比较器,按照 Person 对象的 age 属性进行升序排序。如果 a.age - b.age 小于 0,则 a 应该排在 b 前面。
最后打印排序后的数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2325324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch客户端工具初探--kibana

1 Kibana简介 Kibana是Elastic Stack&#xff08;ELK&#xff09;中的可视化工具&#xff0c;用于对Elasticsearch中存储的数据进行搜索、分析和可视化展示。它提供了直观的Web界面&#xff0c;支持日志分析、业务监控、数据探索等功能&#xff0c;广泛应用于运维监控、安全分析…

ollama在win10安装、使用、卸载

目录 前置&#xff1a; 1 下载ollama 2 安装 3 配置环境变量&#xff0c;设置模型存储位置 4 使用 5 卸载 前置&#xff1a; 1 在打算安装ollama之前&#xff0c;需要先检查电脑当前状态是否能使用ollama。确认条件满足再进行安装操作。 2 https://github.com/ollama/…

查看iphone手机的使用记录-克魔实战

如何查看 iOS 设备近期的详细使用数据 在日常使用手机时&#xff0c;了解设备的运行状态和各项硬件的使用情况可以帮助分析耗电情况、优化应用使用方式。iOS 设备提供了一些数据记录&#xff0c;能够显示应用的启动和关闭时间、后台运行情况&#xff0c;以及应用在使用过程中调…

[Lc5_dfs+floodfill] 简介 | 图像渲染 | 岛屿数量

目录 0.floodfill算法简介 1.图像渲染 题解 2.岛屿数量 题解 之前我们在 bfs 中有介绍过[Lc15_bfsfloodfill] 图像渲染 | 岛屿数量 | 岛屿的最大面积 | 被围绕的区域&#xff0c;现在我们来看看 dfs 又是如何解决的呢 0.floodfill算法简介 floodfill算法又叫洪水灌溉或者…

AI-Sphere-Butler之如何使用腾讯云ASR语音识别服务

环境&#xff1a; AI-Sphere-Butler WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 腾讯云ASR 问题描述&#xff1a; AI-Sphere-Butler之如何使用腾讯云ASR语音识别服务&#xff0c;本地硬件配置不高的情况&#xff0c;建议使用云服务商的ASR 解决方案&#xff1a; 1.登…

Qwen最新多模态大模型:Qwen2.5-Omni介绍与快速入门

一、模型技术突破&#xff1a;重新定义多模态交互 近日&#xff0c;Qwen2.5-Omni正式发布了&#xff01; 这是Qwen系列中全新的旗舰级端到端多模态大模型&#xff0c;专为全面的多模式感知设计&#xff0c;无缝处理包括文本、图像、音频和视频在内的各种输入&#xff0c;同时…

【Golang】第十一弹------反射

&#x1f381;个人主页&#xff1a;星云爱编程 &#x1f50d;所属专栏&#xff1a;【Go】 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 长风破浪会有时&#xff0c;直挂云帆济沧海 目录 1.反射基本介绍 2.反射重要的函数和概念 3.反射应用场景 4.反…

C#里使用libxl的对齐/边框/颜色

一份好的EXCEL文件,通道会有不同的颜色和边框来表示。 以便表示一些重要的信息,这样才能让人们一眼就看到需要关注的信息。 如下面所示: 要显示上面的内容,需要使用下面的例子: private void button12_Click(object sender, EventArgs e){var book = new ExcelBook();if…

软考中级-软件设计师信息安全模块考点解析

一、防火墙技术 内部网络是 安全的可信赖的外部网络是不安全的不可信赖的外部网络和内部网络之间有一个DMZ隔离区&#xff0c; 可以在DMZ隔离区中搭建服务&#xff1a;例如&#xff1a;WEB服务器 安全排序&#xff1a;内网>DMZ>外网 三个发展阶段&#xff1a; 包过滤防…

【蓝桥杯】每日练习 Day 16,17

前言 接下来是这两天的题目&#xff08;昨天主播打完模拟赛感觉身体被掏空所以没有写题目的总结&#xff09;&#xff0c;只有三道题。 一道并查集&#xff0c;一道单调栈和一道单调队列。 奶酪 分析 这是一道模板题&#xff08;连通块&#xff09;&#xff0c;只讲思路。 …

Linux驱动开发--IIC子系统

1.1 简介 I2C 是很常见的一种总线协议&#xff0c; I2C 是 NXP 公司设计的&#xff0c; I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线)&#xff0c;另外一条是 SDA(串行数据线)&#xff0c;这两条数据线需要接上拉电阻&#xff0c;总线空闲的时候 …

如何应对硬件测试覆盖率不足导致量产故障

硬件测试覆盖率不足导致的量产故障是硬件制造领域的一大痛点。要有效应对&#xff0c;必须从提高测试覆盖率、优化测试方案、引入风险管理机制三个方面入手。其中&#xff0c;优化测试方案尤为关键&#xff0c;应从产品设计阶段开始&#xff0c;通过精确的测试用例规划、详细的…

Centos7 安装 TDengine

Centos7 安装 TDengine 1、简介 官网&#xff1a; https://www.taosdata.com TDengine 是一款开源、高性能、云原生的时序数据库&#xff08;Time Series Database, TSDB&#xff09;, 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓…

Kafka 多线程开发消费者实例

目前&#xff0c;计算机的硬件条件已经大大改善&#xff0c;即使是在普通的笔记本电脑上&#xff0c;多核都已经是标配了&#xff0c;更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单线程架构&#xff0c;那实在是有点暴殄天物了。不过&#xff0c;Kafka …

Linux线程池实现

1.线程池实现 全部代码&#xff1a;whb-helloworld/113 1.唤醒线程 一个是唤醒全部线程&#xff0c;一个是唤醒一个线程。 void WakeUpAllThread(){LockGuard lockguard(_mutex);if (_sleepernum)_cond.Broadcast();LOG(LogLevel::INFO) << "唤醒所有的休眠线程&q…

Linux《进程概念(上)》

在之前的Linux学习当中我们已经了解了基本的Linux指令以及基础的开发工具的使用&#xff0c;那么接下来我们就要开始Linux当中一个非常重要的部分的学习——进程&#xff0c;在此进程是我们之后Linux学习的基础&#xff0c;并且通过进程的学习会让我们了解更多的操作系统的相关…

【算法】并查集基础讲解

一、定义 一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题。思想是用一个数组表示了整片森林&#xff08;parent&#xff09;&#xff0c;树的根节点唯一标识了一个集合&#xff0c;只要找到了某个元素的的树根&#xff0c;就能确定它在哪个集合里。 …

C++ STL常用算法之常用集合算法

常用集合算法 学习目标: 掌握常用的集合算法 算法简介: set_intersection // 求两个容器的交集 set_union // 求两个容器的并集 set_difference // 求两个容器的差集 set_intersection 功能描述: 求两个容器的交集 函数原型: set_intersection(iterator beg1, iterat…

日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习(3号通知)

日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习&#xff08;3号通知&#xff09; 日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习&#xff08;3号通知&#xff09;

Linux C语言调用第三方库,第三方库如何编译安装

在 Linux 环境下使用 C 语言调用第三方库时&#xff0c;通常需要先对第三方库进行编译和安装。以下为你详细介绍一般的编译安装步骤&#xff0c;并给出不同类型第三方库&#xff08;如使用 Makefile、CMake 构建系统&#xff09;的具体示例。 一般步骤 1. 获取第三方库源码 …