如何正确编写Java循环实现指定次数打印用户名?
问题分析与修复方案
核心问题
- 覆盖用户输入的次数变量:你的for循环开头直接给
n赋值为1,把用户之前输入的打印次数完全覆盖了,导致输入的数值根本没起到作用。 - 循环条件写死,忽略用户需求:循环条件固定为
n < 20,不管用户输入多少次,都会循环到19次,完全不符合“按输入次数打印”的要求。
修复后的代码
import java.util.Scanner; public class MoreTesting { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); int n; String name; System.out.println("What is your name?"); name = keyboard.next(); System.out.println("How many times do you want to print " + "your name? Enter the value 1-20"); n = keyboard.nextInt(); // 用独立变量i做循环计数器,避免覆盖用户输入的n // 严格按照需求:从0到n的循环,共打印n+1次 for (int i = 0; i <= n; i++) { System.out.println(name); } // 如果实际需要打印n次(和输入次数一致),替换成下面的循环: // for (int i = 0; i < n; i++) { // System.out.println(name); // } } }
关键修改点说明
- 用独立循环变量:新增
int i作为循环计数器,不再修改用户输入的n,保证输入的次数值能被正确使用。 - 匹配需求的循环范围:
- 要是严格遵循“创建从0到n的for循环”的要求,用
i <= n,这样会打印n+1次(i从0到n,共n+1个循环值)。 - 要是实际需要打印的次数和用户输入的
n完全一致,就把循环条件改成i < n,此时i从0到n-1,刚好循环n次。
- 要是严格遵循“创建从0到n的for循环”的要求,用
- 可选的序号调整:原代码里
name + n会拼接姓名和变量,要是不需要序号直接输出name就行;要是需要打印序号,改成name + " " + i即可。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

