java中scanner里的NextLine()方法读取数据为空并且为让从键盘输入

本文探讨了一段使用Java实现的简单计算器代码,在使用Scanner类的nextLine()方法时遇到的问题及原因。解释了next()与nextLine()的区别,帮助理解如何正确地从控制台接收带有空格的字符串。

今天我写了一个代码,是用switch来实现的计算器,但是在让输入字符的时候,用的是nextLine()方法,可是走到这个方法的时候,并没有让我输入,而是自己输入了一个"",也就是空字符串。

package com.baidu.switch1;

import java.util.Scanner;

public class Test2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入第一个数字");
		int num1 = scanner.nextInt();
		System.out.println("请输入第2个数字");
		int num2 = scanner.nextInt();
		System.out.println("请输入你要进行什么运算");
		String nextLine = scanner.nextLine();
		switch (nextLine) {
		case "+":
			System.out.println(num1+num2);
			break;
		case "-":
			System.out.println(num1-num2);
			break;

		default:
			System.out.println("其他的就不测试了");
			break;
		}
	}
}

上面的内容就是出现情况的代码

怎么解决的 ?

后来我测试了一下,用next也是可以进行输入的。

但是我需要搞明白为什么。

next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。


        简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。


        而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。




### CRC校验算法的Java实现与键盘输入支持 在将C语言中的CRC校验算法转换为Java代码时,需要考虑Java语言的数据类型和位操作特性。C语言中使用`unsigned char`来表示数据字节,并通过指针操作访问内存;而在Java中,所有变量都是有符号的,且没有直接的指针操作,但可以通过数组和索引方式处理数据[^2]。 以下是基于ModBus协议规范的CRC-16校验码计算函数的Java实现: ```java import java.util.Scanner; public class CRC16Calculator { public static int calculateCRC16(byte[] data) { int crc = 0xFFFF; for (byte b : data) { crc ^= (b & 0xFF); for (int j = 8; j > 0; j--) { if ((crc & 0x0001) != 0) { crc >>= 1; crc ^= 0xA001; } else { crc >>= 1; } } } return crc & 0xFFFF; // 确保结果为16位 } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入要校验的数据(以格分隔的十六进制值):"); String input = scanner.nextLine(); String[] hexValues = input.split(" "); byte[] data = new byte[hexValues.length]; for (int i = 0; i < hexValues.length; i++) { data[i] = (byte) Integer.parseInt(hexValues[i], 16); } int crc = calculateCRC16(data); System.out.printf("CRC-16 校验码: %04X%n", crc); } } ``` #### Java实现的关键点: - **数据类型转换**:由于Java中`byte`是有符号的(范围是-128到127),因此在进行异或操作前,将其转换为无符号的整数形式(`b & 0xFF`)。 - **位移操作**:Java的位移操作符与C语言相同,但在处理负数时有所不同。为了避免问题,在运算过程中使用`int`类型保存CRC值,确保高位不会被截断。 - **键盘输入支持**:通过`Scanner`类读取用户输入,输入格式可以是多个以格分隔的十六进制数值。程序会解析这些数值并转换为字节数组进行CRC计算。 该程序首先提示用户输入一串以格分隔的十六进制数据,然后调用`calculateCRC16`方法计算CRC-16校验码,并输出结果[^3]。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值