profack 2024-05-28 21:41 采纳率: 66.7%
浏览 14
已结题

关于Java的学习问题

今天在学习Java的时候在书上看到这么个程序清单
书上是这么写的

img

img


这是我的代码:

package org.example;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        var words = new HashSet<String>();
        long totalTime = 0;

        try (var in = new Scanner(System.in)) {
            while (in.hasNext()) {
                String word = in.next();
                long callTime = System.currentTimeMillis();
                words.add(word);
                callTime = System.currentTimeMillis() - callTime;
                totalTime += callTime;
            }
        }
        Iterator<String> iter = words.iterator();
        for (int i = 1; i <= 20 && iter.hasNext(); i++) {
            System.out.println(iter.next());
        }
        System.out.println("...");
        System.out.println(words.size() + " distinct words. " + totalTime + " milliseconds");
    }
}

我在IDEA上创建Poject用IDEA的Terminal试图运行
出现了这样的问题

img


选择不执行,只编译成class文件也会出错

img

我不知道是出了什么问题,使用idea右边的maven 执行 clean install以后也不可以解决。在网上查阅无果来问一下大触们,我作为一个Java的初学者,也许是我的代码或者是操作有误,又或者是对IDEA不了解,望各位指正解惑。(┬┬﹏┬┬)

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 21:41
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的信息来看,你在尝试运行Java程序时遇到了两个主要问题:

    1. 错误:找不到或无法加载主类 Main
    2. Main.java:10: 错误:找不到符号 try (var in = new Scanner(System.in)) {

    针对这两个问题,我们可以逐一分析并解决。

    问题1: 找不到或无法加载主类 Main

    这个问题通常意味着Java虚拟机(JVM)无法找到你指定的Main类来执行。确保以下几点:

    • 正确的目录结构:你的Java文件需要放在与包声明相匹配的目录结构中。根据你的代码,Main.java应该位于org/example目录下,看起来这一点你已经做到了。

    • 编译:确认你的Java文件已经被正确编译成.class文件。在IntelliJ IDEA中,通常不需要手动编译,因为IDE会在运行时自动编译。但是,如果你手动编译,请确保使用正确的命令(比如javac org/example/Main.java),并且.class文件被放置在正确的目录下。

    • 运行命令格式:在命令行中运行Java程序时,如果你的类在某个包内,你需要使用-cp-classpath参数指向包含.class文件的目录或jar文件,或者直接从包含该包的目录运行。但在这个情况下,因为你是在项目根目录下运行,通常不需要指定类路径,只要确保目录结构正确。

    问题2: Main.java:10: 错误:找不到符号 try (var in = new Scanner(System.in))

    这里的错误是因为Java版本问题。var关键字是在Java 10及更高版本中引入的,用于局部变量类型推断。从你的错误信息来看,你的系统可能使用的是Java 9或更低版本的编译器,它不认识var关键字。

    解决办法:更改编译器版本或替换var为具体类型。修改后的代码如下:

    package org.example;
    
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            // 替换 var 关键字为具体类型 HashSet<String>
            HashSet<String> words = new HashSet<>();
            long totalTime = 0;
    
            try (Scanner in = new Scanner(System.in)) { // 这里同样将 var 改为 Scanner
                while (in.hasNext()) {
                    String word = in.next();
                    long callTime = System.currentTimeMillis();
                    words.add(word);
                    callTime = System.currentTimeMillis() - callTime;
                    totalTime += callTime;
                }
            }
            Iterator<String> iter = words.iterator();
            for (int i = 1; i <= 20 && iter.hasNext(); i++) {
                System.out.println(iter.next());
            }
            System.out.println("...");
            System.out.println(words.size() + " distinct words. " + totalTime + " milliseconds");
        }
    }
    

    总结步骤

    1. 确保你的IDEA使用的是支持var关键字的Java版本(至少Java 10)。可以在File > Project Structure > Project Settings > Project中检查和修改项目SDK。
    2. 如果不打算升级Java版本,按照上述代码修改后保存。
    3. 在IDEA中直接点击运行按钮(绿色的三角形)来运行程序,而不是通过终端命令。这样IDE会自动处理好类路径和编译问题。

    如果以上步骤仍然不能解决问题,检查IntelliJ IDEA的编译输出路径配置是否正确,以及是否有其他环境配置问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月30日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 odoo17关于owl开发js代码问题
  • ¥15 光纤中多普勒频移公式的推导
  • ¥15 怎么制作一个人脸识别门禁系统
  • ¥20 大华dss监控平台网络关闭登不进去
  • ¥15 请使用蚁群算法解决下列问题,并给出我完整的代码
  • ¥20 关于php录入完成后,批量更新数据库
  • ¥15 请教往复密封润滑问题
  • ¥15 cocos creator发布ios包
  • ¥15 comsol压电材料数据
  • ¥35 用python实现除法算法中goldschmidt算法