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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用