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

Java彩票程序编译报错:public类与文件名不匹配问题咨询

Java彩票程序编译报错问题解答

问题本质

这不是程序逻辑问题,也不是编译器机制差异,而是你违反了Java的强制语法规范——部分工具的兼容优化让你产生了“编译器有差异”的错觉。

核心规则

Java明确规定:包含public类的源文件,文件名必须和该public类的类名完全一致(大小写敏感)。你的代码里public类是LotteryProgram,但文件名叫Main.java,直接违反了规范,所以标准javac编译器会抛出如下错误:

Main.java:5: error: class LotteryProgram is public, should be declared in a file named LotteryProgram.java
public class LotteryProgram {
       ^
1 error

为什么部分工具能运行?

有些IDE(比如IntelliJ IDEA)或在线编译平台做了非标准的兼容优化:它们会在编译时自动对齐文件名与public类名,或者绕过该检查,但这属于工具的特殊处理,并非Java语言本身允许的行为。

解决方案

把你的源文件重命名为LotteryProgram.java,就能在所有标准Java编译环境下正常运行。


你的程序代码

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class LotteryProgram {
    public static void main(String[] args) {
        int[] lotteryNumbers = generateLotteryNumbers();
        int[] userNumbers = getUserNumbers();
        int matches = countMatches(lotteryNumbers, userNumbers);

        System.out.println("Lottery Numbers: " + Arrays.toString(lotteryNumbers));
        System.out.println("User Numbers: " + Arrays.toString(userNumbers));
        System.out.println("Matches: " + matches);
    }

    public static int[] generateLotteryNumbers() {
        int[] lotteryNumbers = new int[5];
        Random random = new Random();

        for (int i = 0; i < lotteryNumbers.length; i++) {
            lotteryNumbers[i] = random.nextInt(10); // Generate random numbers between 0 and 9
        }

        return lotteryNumbers;
    }

    public static int[] getUserNumbers() {
        int[] userNumbers = new int[5];
        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter your lottery numbers (between 0 and 9):");

        for (int i = 0; i < userNumbers.length; i++) {
            System.out.print("Number " + (i + 1) + ": ");
            userNumbers[i] = scanner.nextInt();
        }

        return userNumbers;
    }

    public static int countMatches(int[] lotteryNumbers, int[] userNumbers) {
        int count = 0;

        for (int i = 0; i < lotteryNumbers.length; i++) {
            if (lotteryNumbers[i] == userNumbers[i]) {
                count++;
            }
        }

        return count;
    }
}

预期输出示例

java -cp /tmp/bViay8YpR4 LotteryProgram
Enter your lottery numbers (between 0 and 9):
Number 1: 2
Number 2: 8
Number 3: 5
Number 4: 6
Number 5: 7
Lottery Numbers: [6, 6, 0, 0, 5]
User Numbers: [2, 8, 5, 6, 7]
Matches: 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:37:54