- 当遇到的问题有关逆序输出,可以转换一下思想,就是使用for循环的时候,i的初始化是从数组或者是字符串的最后一个,然后注意设置循环结束的条件,最重要的是不要忘记i--;而不是I++; 注意:当要逆序输出的是字符串类型,可以使用StringBuilder类,因为StringBuilder类有reverse方法,可以直接逆序,如:StringBuilder(s).reverse().toString();
但是string类型没有,因为string类型是不可变的,所以没有提供reverse方法。
StringBuilder类的reverse方法的使用:
String originalString = "hello";
StringBuilder reversedString = new StringBuilder(originalString).reverse();
System.out.println(reversedString.toString());
- ``Math.sqrt()` 是 Java 中的一个静态方法,用于计算一个数的平方根。在数学上,平方根函数表示对一个非负实数求其平方根。在 Java 中,`Math.sqrt()` 方法接受一个 double 类型的参数,返回值也是 double 类型,表示参数的平方根。例如,`Math.sqrt(9)` 将返回 3.0,因为 3 的平方是 9。
- 当涉及到从用户输入中读取文本时,Java中的Scanner类提供了两个主要的方法:next() 和 nextLine()。
next() 方法:
next() 方法用于读取下一个标记(默认是由空白字符分隔的字符串)并返回。
它会忽略任何前导的空白字符,并在遇到下一个空白字符(包括空格、制表符或换行符)时停止读取。
返回的字符串不包含遇到的空白字符。
nextLine() 方法:
nextLine() 方法用于读取输入中的下一行文本并返回。
它会读取包括换行符在内的整行文本,直到遇到换行符为止。
返回的字符串包含了遇到的换行符。
因此,当你想要读取整行文本时,应该使用 nextLine() 方法。而当你只需要读取下一个由空白字符分隔的标记时,可以使用 next() 方法。
4.闰年的判断: 能被 4 整除但不能被 100 整除的年份是闰年;
能被 400 整除的年份也是闰年。
5. System.out.printf("%6.2f\n", num);
System.out.printf("%6.2f %6.2f\n", num, num);
System.out.printf("%6.2f %6.2f %6.2f\n", num, num, num);
效果:
这些代码是使用Java中的`System.out.printf()`方法来格式化输出。让我解释一下:
- `%6.2f`:这是一个格式说明符,它告诉`printf()`方法如何格式化输出。在这里,`%`表示格式说明的开始,`f`表示要格式化的是浮点数。`6`表示总字段宽度为6,`.2`表示保留两位小数。所以`%6.2f`将浮点数格式化为总宽度为6,保留两位小数的形式。
- `\n`:这是换行符,它告诉程序在输出完一行后换行到下一行。
- `%6.2f %6.2f`:这表示在同一行上输出两个格式化的浮点数,中间用空格分隔。
- `%6.2f %6.2f %6.2f`:同理,这表示在同一行上输出三个格式化的浮点数,每个数之间用空格分隔。
所以,这些代码中的`printf()`语句用于按照给定的格式输出浮点数。
- LinkedList 是一个双向链表,非常适合用于模拟环形结构,因为它可以高效地添加和删除元素。比如可以解决约瑟夫环问题。就可以用linkedList()
- 迭代器:
int count = 0; // 初始化报数计数器
Iterator<Integer> iterator = circle.iterator(); // 使用迭代器遍历链表
while (iterator.hasNext()) {
count++; // 报数加1
if (count == 3) { // 如果报数到3,淘汰当前人
iterator.next(); // 移动到当前人的位置(但不返回元素)
iterator.remove(); // 淘汰当前人
count = 0; // 重置报数计数器
} else {
iterator.next(); // 移动到当前人的位置(但不返回元素)
}
}
- 什么时候需要加上nextLine();(总结起来就是,如果你输入字符串前有要输入基本数据类型的,就需要有nextLine),在读取整数后的下一行,使用 sc.nextLine() 来清空输入缓冲区。
- 在读取整数和读取字符串之间,添加 sc.nextLine() 来读取并丢弃多余的空行或换行符。
在Java中使用Scanner类读取输入时,特别是当输入包含多种类型(如整数和字符串)并且这些输入是连续的时候,通常需要格外注意换行符和输入缓冲区的状态。nextLine()方法会读取直到下一个换行符(包括换行符本身)为止的所有字符,并将其作为一个字符串返回。而nextInt(), nextDouble()等方法只会读取相应的整数或浮点数,然后停留在换行符之前,不会读取换行符。
以下是一些需要添加nextLine()的常见情况:
在读取非字符串类型之后读取字符串:当你首先使用nextInt(), nextDouble()等方法读取一个整数或浮点数后,紧接着使用nextLine()读取一个字符串时,如果不先调用nextLine()来消耗掉输入缓冲区中的换行符,nextLine()将会立即返回,因为它已经遇到了换行符。
java
Scanner sc = new Scanner(System.in);
int number = sc.nextInt(); // 用户输入数字后按回车,换行符留在缓冲区中
String text = sc.nextLine(); // 如果没有先调用sc.nextLine(),这里会立即返回空字符串
需要忽略多余的换行符:有时候用户可能在输入之间不小心多按了几次回车,导致输入缓冲区中有多个换行符。在这些情况下,使用nextLine()可以帮助清除这些额外的换行符。
在循环中读取输入:如果你在一个循环中读取输入,特别是当每次迭代都期望用户输入一个全新的值时,你可能需要在每次迭代开始时使用nextLine()来确保输入缓冲区是干净的。
要决定是否需要在特定情况下使用nextLine(),你应该考虑以下几点:
输入的类型:你是否在读取整数或浮点数之后立即读取字符串?
输入的顺序:用户输入的顺序是否符合你的程序预期?
输入缓冲区的状态:你是否确信输入缓冲区中没有残留的换行符或其他字符?
如果你不确定是否需要使用nextLine(),一种简单的测试方法是尝试输入一些数据,并观察程序的行为是否符合预期。如果程序没有按预期工作,那么可能就需要考虑使用nextLine()来清理输入缓冲区。
9.平年和闰年问题:平年和闰年是用来区分公历年份的两种不同情况,主要区别在于二月的天数不同。
平年是指阳历没有闰日或农历没有闰月的年份。在平年中,二月有28天,全年有365天。例如,2023年就是一个平年。
闰年则是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。在公历(阳历)中,有闰日的年份叫闰年,一般年份为365天,闰年为366天。在闰年中,二月有29天,全年有366天。
确定一个年份是否为闰年,有以下几个规则:
- 如果年份能被4整除但不能被100整除,则为闰年。
- 如果年份能被400整除,也是闰年。
例如,2000年是闰年,因为它能被400整除;而1900年则不是闰年,因为它虽然能被4整除,但也能被100整除,并且不能被400整除。
这些规则的应用对于日历、时间计算、历史研究等都具有重要意义。了解平年和闰年的区别和规则有助于我们更准确地进行时间相关的计算和理解。
- 进制转换
. **进制转换方法**:
- Java提供了一些内置方法用于进制转换,例如:
- `Integer.toBinaryString(int)`:将整数转换为二进制字符串。
- `Integer.toOctalString(int)`:将整数转换为八进制字符串。
- `Integer.toHexString(int)`:将整数转换为十六进制字符串。
- `Integer.parseInt(String, radix)`:将指定进制的字符串转换为十进制整数,其中radix为进制数。
. **BigInteger类**:
- 当处理大整数时,可以使用`java.math.BigInteger`类。
- 这个类提供了用于处理任意精度整数的方法,包括转换为不同进制的字符串表示。
**字符串与整数之间的转换**:
- Java中可以使用`Integer.parseInt(String)`方法将字符串解析为整数,还可以指定基数。
- 另外,`Integer.toString(int)`方法可以将整数转换为字符串表示。