实验一 数组、字符串、向量与哈希表 (Java)

免费无广纯净版微信小程序测mbti很有趣,不需要任何授权,也不需要登录,直接就是测,几分钟了解自己的人格mbti,快来试试吧。

可以微信直接搜索小程序名“一秒MBTI”

一、实验目的

1. 掌握 Java 编程基本语法。
2. 掌握数组、字符串和哈希表的使用。
3. 熟练使用 IDEA、Eclipse 等集成开发环境工具。

二、实验内容

上机实现下列程序并观察程序的运行情况:
1. 编写 Java 程序统计一篇英文文档中各单词出现的次数,并按单词出现的
频率由高到低进行输出。
例如:文档“Hello word Hello”的统计结果为:
Hello:2 次
word:1 次
2. 声明一个二维数组,为数组的每个元素赋值,并输出数组的值。
3. 编写一程序,查找某一字符串中是否包含有“abc”。

三、实验要求(必做实验,2 学时)

1. 在“四、实验结果”小节,附上每道习题的程序代码和运行结果截图,
具体格式要求见“实验报告撰写要求”。
2. 在“五、问题总结”小节,总结在编程过程中遇到的难题、错误、解决
方法及收获。
3. 在“六、心得体会”小节,总结对本次实验涵盖的知识点掌握程度、对
编程工具的使用心得体会、以及对实验内容的建议等。

四、实验结果

1. 编写 Java 程序统计一篇英文文档中各单词出现的次数,并按单词出现的频率由高到低进行输出。

java代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = null;
        HashMap<String, Integer> map = new HashMap<>();

        // 读取输入和统计频率
        while (scanner.hasNextLine()) {
            str = scanner.nextLine();
            if (str.equals("")) {
                break;
            }
            String[] words = str.split(" ");
            for (String word : words) {
                if (map.containsKey(word)) {
                    map.put(word, map.get(word) + 1);
                } else {
                    map.put(word, 1);
                }
            }
        }

        // 创建一个ArrayList来存储结果
        ArrayList<String> words = new ArrayList<>();
        Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            words.add(iterator.next());
        }

        // 简单的冒泡排序,按频率从高到低
        for (int i = 0; i < words.size() - 1; i++) {
            for (int j = 0; j < words.size() - 1 - i; j++) {
                String word1 = words.get(j);
                String word2 = words.get(j + 1);
                if (map.get(word1) < map.get(word2)) {
                    // 交换位置
                    words.set(j, word2);
                    words.set(j + 1, word1);
                }
            }
        }

        // 输出结果
        for (String word : words) {
            System.out.println(word + ": " + map.get(word) + "次。");
        }
    }
}

运行结果

2. 声明一个二维数组,为数组的每个元素赋值,并输出数组的值。

java代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 声明并直接初始化二维数组
        int[][] array = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        // 输出数组的值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
}

运行结果

3.编写一程序,查找某一字符串中是否包含有“abc”。

java代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 定义一个测试字符串
        String str = "helloabcdworld";

        // 使用contains()方法检查是否包含"abc"
        if (str.contains("abc")) {
            System.out.println("字符串中包含'abc'");
        } else {
            System.out.println("字符串中不包含'abc'");
        }
    }
}

运行结果

五、问题总结

在本次实验的编程过程中,我遇到了一些难题和错误,以下是对这些问题的总结、解决方法以及收获:

难题:单词统计程序中输入处理问题

  • 问题描述:在实现第一个程序(单词频率统计)时,最初不清楚如何正确读取多行输入并在适当的时候停止输入,导致程序要么只能处理单行,要么无限等待输入。
  • 解决方法:通过查阅 Scanner 类的文档,了解到可以使用 hasNextLine() 方法判断是否有下一行输入,并在输入空行时用 break 跳出循环。这种方法既简单又能满足实验需求。
  • 收获:掌握了 Scanner 类在处理多行输入时的使用技巧,理解了如何设计程序的输入终止条件。

错误:字符串查找逻辑过于复杂

  • 问题描述:在第三个程序中,起初尝试手动遍历字符串查找 "abc",代码复杂且容易出错。
  • 解决方法:后来发现 Java 的 String 类提供了 contains() 方法,直接调用即可实现需求,大大简化了代码。
  • 收获:认识到使用内置方法可以提高编程效率,避免重复造轮子。

总结:通过本次实验,我学会了如何调试代码、chat with AI解决问题,同时对 Java 的基本语法和工具类(如 HashMap、Scanner)有了更深的认识。

六、心得体会

通过本次实验,我对所涵盖的知识点、编程工具的使用以及实验内容有了以下心得和体会:

  • 知识点掌握程度
    • 本次实验让我较好地掌握了 Java 的基本语法,包括变量声明、循环、条件语句等。同时,通过实现单词统计、二维数组操作和字符串查找,我熟悉了数组、字符串和哈希表的基本用法。
    • 尤其是在使用 HashMap 统计单词频率时,我深刻体会到哈希表的键值对结构在处理统计问题上的高效性。不过,对更复杂的排序算法(如 TreeMap 或 Comparator)的使用还需进一步学习。
  • 编程工具使用心得
    • 在实验中,我使用了 IDEA 作为开发工具,其代码自动补全、调试功能和错误提示极大提高了编程效率。例如,在调试单词统计程序时,IDEA 的断点功能帮助我快速定位输入处理问题。
    • 通过本次实验,我对集成开发环境(IDE)的优势有了更直观的感受,学会了如何利用工具提高开发效率,同时也意识到熟练掌握 IDE 的快捷键和功能是未来需要努力的方向。

对实验内容的建议

  • 如果能在实验指导中提供一些常见错误的示例和解决思路,会更有助于我们快速上手和理解。

总体体会:本次实验让我从理论走向实践,增强了对 Java 编程的信心,同时也让我意识到编程不仅需要逻辑思维,还需要耐心和细心。我期待在后续学习中接触更多实际应用场景,进一步提升自己的编程能力。

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoveYa!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值