蓝桥杯JAVA组基础知识点回顾(数组,集合,Map,输入,格式化输出),小白也能一次上手
(一):如何接收输入的参数,并且如何输出
第一种: 使用 Scanner 类进行输入,System.out.println() 进行输出
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// 创建 Scanner 对象,用于从标准输入流(键盘)读取数据
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个单词(以空白字符分隔):");
// 1.读取一个单词(以空白字符分隔)
String s = scanner.next();
// 消耗掉 next() 之后的换行符
scanner.nextLine();
System.out.print("请输入包含空格的名字:");
// 2.读取一整行字符串
String name = scanner.nextLine();
System.out.print("请输入你的年龄(范围 -2147483648 到 2147483647):");
// 3.读取一个整数,范围是 -2^31 到 2^31 - 1
int age = scanner.nextInt();
System.out.print("请输入你的体重:");
// 4.读取一个双精度浮点数,范围大约是 ±4.9e-324 到 ±1.7976931348623157e+308
double weight = scanner.nextDouble();
System.out.print("你是否已婚(true 或 false):");
// 5.读取一个布尔值
boolean isMarried = scanner.nextBoolean();
System.out.print("请输入你的性别(单个字符):");
// 6.读取一个字符
char gender = scanner.next().charAt(0);
System.out.print("请输入一个字节数(范围 -128 到 127):");
// 7.读取一个字节类型的整数
byte b = scanner.nextByte();
System.out.print("请输入一个长整数(范围 -9223372036854775808 到 9223372036854775807):");
// 8.读取一个长整型整数,范围是 -2^63 到 2^63 - 1
long l = scanner.nextLong();
System.out.print("请输入一个大精度数:");
// 9.读取一个任意精度的大精度数,范围取决于你的内存
BigDecimal bigDecimal = scanner.nextBigDecimal();
System.out.print("请输入一个大整数:");
// 10.读取一个任意精度的大整数,范围取决于你的内存
BigInteger bigInteger = scanner.nextBigInteger();
// 关闭 Scanner 对象,释放资源
scanner.close();
// 输出读取到的数据
System.out.println("\n你输入的信息如下:");
System.out.println("单词: " + s);
System.out.println("包含空格的名字: " + name);
System.out.println("年龄: " + age);
System.out.println("体重: " + weight);
System.out.println("是否已婚: " + isMarried);
System.out.println("性别: " + gender);
System.out.println("字节数: " + b);
System.out.println("长整数: " + l);
System.out.println("大精度数: " + bigDecimal);
System.out.println("大整数: " + bigInteger);
}
}
输入:
请输入一个单词(以空白字符分隔):a vb
请输入包含空格的名字:a vb
请输入你的年龄(范围 -2147483648 到 2147483647):15
请输入你的体重:52
你是否已婚(true 或 false):true
请输入你的性别(单个字符):男
请输入一个字节数(范围 -128 到 127):97
请输入一个长整数(范围 -9223372036854775808 到 9223372036854775807):625215
请输入一个大精度数:1111111111111111111111111111111111111111111111111111111111111111111111111
请输入一个大整数:99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999输出
你输入的信息如下:
单词: a
包含空格的名字: a vb
年龄: 15
体重: 52.0
是否已婚: true
性别: 男
字节数: 97
长整数: 625215
大精度数: 1111111111111111111111111111111111111111111111111111111111111111111111111
大整数: 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
注意:只需要掌握比较重要的几个,比如next,nextLine,nextInt,nextDouble,nextLong,其余的后面再说
优点
- 使用简单:
Scanner类提供了许多方便的方法,如nextInt()、nextDouble()、nextLine()等,可以轻松读取不同类型的数据。 - 适用性强:对于小规模的输入和简单的竞赛题目,
Scanner类可以满足大多数需求。
缺点
- 效率较低:
Scanner类在处理大量输入时,由于其内部的缓冲机制和数据解析方式,会导致性能下降。 - 异常处理复杂:在使用
Scanner类时,如果输入格式不符合要求,可能会抛出InputMismatchException等异常,需要进行额外的异常处理。
第二种:使用 BufferedReader 进行输入,System.out.println() 进行输出
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderWithSystemOut {
public static void main(String[] args) throws IOException {
// 创建 BufferedReader 对象
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一些字符:");
int c;
/**读取字符,该代码会持续读取用户输入的字符,
直到输入结束(比如在控制台按下 Ctrl + D 组合键),并将读取到的字符逐个输出。
适合处理不知道输入的字符数时
*/
while ((c = reader.read()) != -1) {
System.out.print((char) c);
}
}
}
请输入一些字符:
123456789 //这一行是输入,
123456789 //这一行是输出
如果数据量大,不知道多少个,就可以用这个来接收,最后判断是否还有流(也就是输入),当达到流的末尾时,返回-1,这种输入效率高重点重点重点!!! 必须抛出异常或者try catch处理异常
下面我们再来探究一下readLine和nextLine
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class M {
public static void main(String[] args) throws IOException {
// 创建 Scanner 对象来读取输入
Scanner scanner = new Scanner(System.in);
// 创建 BufferedReader 对象来读取输入
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
/**
* 从输入流读取一行文本,直到遇到换行符(\n)、回车符(\r)或者回车换行符(\r\n)为止。
读取到的内容会作为一个字符串返回,并且不包含换行符。
*/
String str = reader.readLine();
String s2 = reader.readLine();
System.out.println("你输入的字符串是: " + str+ " "+s2);
int num = scanner.nextInt(); // 读取整数,但留下换行符(\n)
//scanner.nextLine();// 读取换行符,并丢弃它
String line = scanner.nextLine(); //此时 line 会读取到空字符串(因为换行符已被遗留)
System.out.println("你输入的整数是: " + num+ " "+line);
reader.close();
scanner.close();
}
}
输入与输出
1 2 3
3 2 1
你输入的字符串是: 1 2 3 3 2 1
12
你输入的整数是: 12Process finished with exit code 0
注意:我们发现,最后一行我们还没有输入完,就已经退出了,这就是因为nextInt()不处理换行符,而nextLine遇到了换行符就进行输出,没有等到真正的输入;
但是readLine则不需要进行处理换行符,它本质是已经读入换行符,但是并没有返回换行符,nextLine也不需要进行处理换行符,但是速度没有readLine快,所以我们在面临大数据输入时选择readLine;
优点
- 输入效率高:
BufferedReader使用缓冲机制,减少了与输入流的交互次数,提高了输入效率,适合处理大量的输入数据。 - 输出方便:
System.out.println()是 Java 中最常用的输出方法,使用简单,易于理解。
缺点
- 数据类型处理复杂:
BufferedReader读取的数据都是字符串类型,需要手动进行数据类型转换,增加了代码的复杂度。 - 异常处理繁琐:在使用
BufferedReader时,需要处理IOException异常,而在进行数据类型转换时,还需要处理NumberFormatException异常。
(二):printf格式化输出
基本格式
格式说明符的基本格式如下:
%[标志][宽度][.精度]转换字符
转换字符
转换字符决定了要格式化的数据类型和输出格式,下面是一些常见的转换字符:
1. 整数类型
d:以十进制整数形式输出。
int num = 123;
System.out.printf("十进制整数: %d\n", num);
o:以八进制整数形式输出。
int num = 123;
System.out.printf("八进制整数: %o\n", num);
x或X:以十六进制整数形式输出,x输出小写字母,X输出大写字母。
int num = 123;
System.out.printf("十六进制整数(小写): %x\n", num);
System.out.printf("十六进制整数(大写): %X\n", num);
2. 浮点数类型
f:以十进制浮点数形式输出。
double d = 3.14159;
System.out.printf("十进制浮点数: %f\n", d);
e或E:以科学计数法形式输出,e输出小写字母e,E输出大写字母E。
double d = 3.14159;
System.out.printf("科学计数法(小写): %e\n", d);
System.out.printf("科学计数法(大写): %E\n", d);
g或G:根据数值大小自动选择f或e格式,g输出小写字母,G输出大写字母。
double d = 3.14159;
System.out.printf("自动选择格式(小写): %g\n", d);
System.out.printf("自动选择格式(大写): %G\n", d);
3. 字符串类型
s:以字符串形式输出。
String str = "Hello";
System.out.printf("字符串: %s\n", str);
4. 字符类型
c:以字符形式输出。
char ch = 'A';
System.out.printf("字符: %c\n", ch);
5. 布尔类型
b或B:以布尔值形式输出,b输出小写字母,B输出大写字母。
boolean flag = true;
System.out.printf("布尔值(小写): %b\n", flag);
System.out.printf("布尔值(大写): %B\n", flag);
6. 百分比和换行符
%:输出百分号%。
System.out.printf("百分比: 50%%\n");
n:输出换行符。
System.out.printf("第一行%n第二行\n");
标志
标志用于控制输出的一些特性,下面是一些常见的标志:
1. -:左对齐输出。
int num = 123;
System.out.printf("左对齐: %-10d\n", num);
2. +:对于正数显示正号 +。
int num = 123;
System.out.printf("显示正号: %+d\n", num);
3. 0:用零填充输出。
int num = 123;
System.out.printf("零填充: %010d\n", num);
4. (空格):对于正数在前面添加一个空格。
int num1 = 123;
int num2 = -123;
System.out.printf("正数加空格: % d\n", num1);
System.out.printf("负数不加空格: % d\n", num2);
5. #:对于八进制和十六进制输出,在前面添加 0 或 0x。
int num = 123;
System.out.printf("八进制加前缀: %#o\n", num);
System.out.printf("十六进制加前缀: %#x\n", num);
宽度
宽度指定了输出的最小字符数,如果输出的字符数小于宽度,则会在前面(或后面,取决于是否使用 - 标志)填充空格或零。
int num = 123;
System.out.printf("宽度为 10: %10d\n", num);
精度
精度对于不同的转换字符有不同的含义:
- 对于浮点数类型,精度指定了小数点后的位数。
double d = 3.14159;
System.out.printf("保留两位小数: %.2f\n", d);
- 对于字符串类型,精度指定了输出的最大字符数。
String str = "Hello World";
System.out.printf("最多输出 5 个字符: %.5s\n", str);
下一站:数组
更多推荐



所有评论(0)