You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java编程求助:生成指定数量不含数字1的整数序列

解决Java生成不含数字1的n个整数序列问题

先明确核心需求:生成恰好n个不包含数字1的整数,这些数可以大于n,只要总数够n个就行(比如输入22时,最后一个数是35,远大于22)。下面一步步拆解逻辑,附上可运行代码和细节解释。

核心思路分两步走

1. 判断单个数字是否合法(不含数字1)

有两种简单的实现方式:

  • 字符串判断法:把数字转成字符串,直接检查是否包含字符"1",新手最容易理解。
  • 数学运算判断法:通过取模和除法逐位提取数字,判断是否出现1,适合不想用字符串处理的场景。

2. 收集足够数量的合法数字

从数字2开始(因为1本身包含数字1,直接跳过),逐个检查每个整数:

  • 遇到合法数字就记录/输出
  • 直到记录的数字数量达到输入的n,停止循环

可运行代码示例(字符串判断法)

import java.util.Scanner;

public class ValidNumberGenerator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入整数n: ");
        int targetCount = scanner.nextInt();
        scanner.close();

        int foundCount = 0;
        int currentNum = 2;

        while (foundCount < targetCount) {
            if (!hasDigitOne(currentNum)) {
                System.out.print(currentNum + " ");
                foundCount++;
            }
            currentNum++;
        }
    }

    // 检查数字是否包含1的辅助方法
    private static boolean hasDigitOne(int number) {
        return String.valueOf(number).contains("1");
    }
}

代码细节解释

  • 输入处理:用Scanner获取用户输入的目标数量targetCount。
  • 变量初始化:foundCount统计已找到的合法数字数,初始为0;currentNum从2开始遍历,跳过本身不合法的1。
  • 循环逻辑:用while循环持续检查数字,直到找到足够的合法数:
    • 调用hasDigitOne判断当前数字是否合法(返回false代表不含1)
    • 合法则打印数字,同时foundCount加1
    • 无论合法与否,currentNum自增,继续检查下一个数
  • 辅助方法:把数字转成字符串后,用contains("1")快速判断是否包含数字1,代码简洁易读。

备选:数学运算判断法

如果不想用字符串处理,可以用逐位检查的方式实现hasDigitOne:

private static boolean hasDigitOne(int number) {
    if (number == 0) return false;
    while (number > 0) {
        int lastDigit = number % 10; // 提取最后一位数字
        if (lastDigit == 1) {
            return true;
        }
        number = number / 10; // 去掉最后一位,继续检查前面的数字
    }
    return false;
}

你之前可能踩的坑

很多人一开始会误解为“输出1到n中不含1的数”,但需求是“生成总数为n个的不含1的数”——这意味着你不能只遍历到n,必须一直往上找,直到凑够n个合法数。比如输入22时,1到22里只有10个合法数,远不够22个,所以必须继续检查23、24...直到找到第22个合法数(也就是35)。

内容的提问来源于stack exchange,提问作者rieCodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:30:54