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

Java程序遇Could not find or load main class NewClass错误求解

Java栈练习程序:主类找不到错误及代码问题修复

一、主类找不到错误的根源及解决

  1. 类体直接写执行代码导致编译失败
    你的StackFunction类中直接把do-while循环写在类成员位置,这违反Java语法规范——类的主体只能定义成员变量、方法、构造器、初始化块等,不能直接放置可执行循环语句。编译时会报错,无法生成有效的.class文件,自然运行时找不到主类。

  2. 文件名与public类名必须一致
    你的public类是NewClass,源代码文件必须命名为NewClass.java,否则编译环节会出现异常。

  3. 正确的编译运行步骤

    • 确认文件名正确后,执行编译命令:javac NewClass.java
    • 编译成功后执行程序:java NewClass(注意不要加.class后缀)

二、代码逻辑问题及修复方案

除了编译问题,代码还有功能逻辑缺陷,修复后的完整代码如下:

// 练习Java内置栈的所有操作
import java.util.*;

class StackFunction {
    Scanner s = new Scanner(System.in);
    Stack<String> name = new Stack<String>();
    char opt, d;

    // 将执行逻辑移入构造器
    public StackFunction() {
        do {
            System.out.println("请选择操作:");
            System.out.println("(A)入栈 (B)出栈 (C)查看栈顶 (D)判断空栈 (E)查找元素 (F)显示栈");
            opt = s.next().charAt(0);
            // 清空next()遗留的换行符,避免干扰后续nextLine()
            s.nextLine();
            
            switch(opt) {
                case 'A':
                case 'a':
                    System.out.println("=== 入栈操作 ===");
                    System.out.println("请输入要入栈的名称:");
                    String inputName = s.nextLine();
                    name.push(inputName);
                    System.out.println("当前栈内容: " + name);
                    break;
                case 'B':
                case 'b':
                    System.out.println("=== 出栈操作 ===");
                    if(name.empty()) {
                        System.out.println("栈为空,无法出栈");
                    } else {
                        String store = name.pop();
                        System.out.println("出栈的元素: " + store);
                        System.out.println("当前栈内容: " + name);
                    }
                    break;
                case 'C':
                case 'c':
                    System.out.println("=== 查看栈顶 ===");
                    if(name.empty()) {
                        System.out.println("栈为空");
                    } else {
                        String top = name.peek();
                        System.out.println("栈顶元素: " + top);
                        System.out.println("当前栈内容: " + name);
                    }
                    break;
                case 'D':
                case 'd':
                    System.out.println("=== 判断空栈 ===");
                    System.out.println(name.empty() ? "栈为空" : "栈不为空");
                    break;
                case 'E':
                case 'e':
                    System.out.println("=== 查找元素 ===");
                    if(name.empty()) {
                        System.out.println("栈为空,无法查找");
                    } else {
                        System.out.println("请输入要查找的字符串:");
                        String searchStr = s.nextLine();
                        int position = name.search(searchStr);
                        System.out.println(position == -1 ? "该元素不在栈中" : "元素在栈中的位置(从栈顶数第" + position + "位)");
                        System.out.println("当前栈内容: " + name);
                    }
                    break;
                case 'F':
                case 'f':
                    System.out.println("=== 显示栈内容 ===");
                    if(name.empty()) {
                        System.out.println("栈为空");
                    } else {
                        System.out.println("当前栈内容: " + name);
                    }
                    break;
                default:
                    System.out.println("输入的选项无效,请重新选择");
            }
            
            System.out.println("是否继续操作? (y/n)");
            d = s.next().charAt(0);
            // 清空换行符
            s.nextLine();
        } while(d == 'y' || d == 'Y');
        
        // 关闭Scanner资源
        s.close();
    }
}

public class NewClass {
    public static void main(String[] args) {
        new StackFunction();
    }
}

修复细节说明:

  • 规范代码结构:把原类体中的循环移到StackFunction构造器中,符合Java语法要求。
  • 解决Scanner输入冲突:每次用s.next()读取字符后,调用s.nextLine()清空缓冲区换行符,避免后续nextLine()读取空字符串。
  • 补充显示栈功能:在switch中添加case 'F'/'f'分支,实现原菜单中的(F)display选项。
  • 完善peek操作:获取栈顶元素后打印输出,而非仅调用方法无结果。
  • 优化用户体验:支持大小写选项输入,提升操作便捷性。
  • 释放资源:程序结束前关闭Scanner,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:45:26