如何让下方Java代码的运算结果按两组序列分两行输出?
问题描述
我正在HackerRank平台上完成基础练习题(这是我学习Java的第3天),刚编写完成以下代码:
import java.io.*; import java.util.*; import java.lang.Math; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int seriesInput = scanner.nextInt(); for (int q = 0; q < seriesInput; q++) { int inputA = scanner.nextInt(); int inputB = scanner.nextInt(); int inputN = scanner.nextInt(); double s0 = inputA + Math.pow(2, 0) * inputB; int s2 = (int) s0; System.out.print(s2 + " "); for (int i = 1; i < inputN; i++) { s0 += Math.pow(2, i) * inputB; int s1 = (int) s0; System.out.print(s1 + " "); } System.out.println(); } scanner.close(); } }
请问如何让这段代码的运算结果以两组序列的形式分两行输出?
解决方案
要实现两组序列分两行输出,核心是控制输出的换行时机,同时确保每组序列对应一组独立的输入参数。
修改思路
- 确保外层循环执行2次:把
seriesInput固定设为2,或者让用户输入2,这样循环会生成两组序列,每组结束后通过System.out.println()换行。 - 优化计算逻辑:原代码用
Math.pow()生成浮点数,容易出现精度问题,改用整数运算更可靠——因为2^i的增量是前一次的2倍,可以用变量跟踪当前增量,避免浮点数转换。
修改后的代码
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 指定生成2组序列,也可以改成让用户输入scanner.nextInt(),只要输入值为2即可 int seriesInput = 2; for (int q = 0; q < seriesInput; q++) { int inputA = scanner.nextInt(); int inputB = scanner.nextInt(); int inputN = scanner.nextInt(); int currentVal = inputA + inputB; // 初始项:A + 2^0*B System.out.print(currentVal); int increment = inputB * 2; // 下一项的增量是2^1*B for (int i = 1; i < inputN; i++) { currentVal += increment; System.out.print(" " + currentVal); increment *= 2; // 每次增量翻倍,对应2^i*B } // 每组序列输出完毕后换行 System.out.println(); } scanner.close(); } }
说明
- 外层循环执行2次,每次处理一组A、B、N参数,生成完整序列后换行,自然得到两行输出。
- 用整数运算替代
Math.pow(),避免了浮点数转整数时的精度丢失,代码运行更高效稳定。 - 使用时只需按顺序输入两组参数(比如第一组输入
1 2 5,第二组输入2 3 4),程序就会输出两行对应的序列。
内容的提问来源于stack exchange,提问作者Anh Tu Pham
相关产品推荐
相关产品推荐

