目录

Java环境配置与基础题解分析

前言

本篇适用于东油秦《面向对象程序设计》课程学习,教材已有知识点将不再过多解释

开发环境

对应教材第一章内容,部分定义已在教材中详细说明,不做详细解释说明。

JDK 与 JRE

对应教材 P30 习题 3✨

  • JRE 是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
  • JDK 是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java 工具 和 Java 标准类库。

官网下载安装 JDK

甲骨文 Oracle 官网

首先我们需要下载 java 开发工具包 JDK,在下载页面中根据自己的系统选择对应的版本,本文以 Windows 11 64位系统 JDK版本8为例,其他版本如 JDK 21/17/11/8 的长期支持版本均可。

甲骨文官网下载会要求注册账号并登入,且部分路由节点对外网访问有限制,推荐移至文章尾部下载链接

选择 JDK 版本并进行如下操作下载 选择 windows 系统 ➡️ 从上到下依次是压缩包.exe.msi格式的安装包 ➡️ 推荐后两者

JDK 8 版本安装包无需考虑此问题

.msi 和.exe 安装包区别

  1. .msi 文件 适用于需要可靠的安装、维护和卸载功能的企业级应用,特别是在需要大规模部署的场景中。它提供了丰富的安装选项和维护功能,使得软件管理更加高效和可靠。
  2. .exe 文件 则适用于自定义需求较多的安装过程,或者当需要捆绑多个安装程序时。它的灵活性和自定义能力使得它在某些特定场景下非常有用。

正式安装 JDK

  • 安装 JDK 过程中无特殊要求,点击下一步即可,可以自定义安装目录等信息,例如我们选择安装目录为 C:\Program Files (x86)\Java\jdk1.8.0_91 该路径需要保存以便后续写入环境变量

变量配置

打开变量管理界面

右键此电脑➡️属性➡️高级系统设置➡️环境变量

新建系统变量

1.新建➡️ 2.变量名➡️3.变量值➡️4.确定

变量名  JAVA_HOME
// 变量名需为JDK安装路径,以下为默认安装路径示例
变量值  C:\Program Files (x86)\Java\jdk1.8.0_91

新建环境变量

1.双击系统变量Path,或选中并点击下方编辑 1.新建➡️ 2.填入以下固定格式 ➡️3.确定

%JAVA_HOME%\bin

返回新建系统变量

1.新建➡️ 2.变量名变量值均填写以下固定格式 ➡️3.确定

变量名  CLASSPATH
变量值  .;%JAVA_HOME%\lib;

配置完成检验

win +R 调出运行 输入cmd➡️确定➡️ 进入命令提示符 ➡️ 输入以下指令回车验证版本

java -version

显示 JDK 安装版本即环境变量配置成功

关于 IDE

IDE 的作用和特性

IDE(Integrated Development Environment)是一个集成开发环境,为开发者提供了包括代码编辑、编译、调试、测试在内的一站式服务。IntelliJ IDEA 作为一款流行的 Java IDE,具备智能代码补全、版本控制工具集成、代码重构等高级功能。 使用 IDE 可以大大提高开发效率,减少手动配置和环境搭建的时间,同时提供更为友好的用户界面和错误提示,帮助开发者更快地定位和解决问题。

JDK 与 IDE 的依赖关系

虽然 IDE 提供了许多便捷的开发工具,但它本身并不包含 JDK。因此,在使用 IDE 如 IntelliJ IDEA 进行 Java 开发前,需要先安装并配置 JDK。在 IDE 中,可以通过设置来指定使用的 JDK 版本,确保项目能够在正确的环境中编译和运行。

配置和使用

安装 JDK 后,通常需要配置环境变量,如 JAVA_HOME,以便系统能够识别 JDK 的安装路径。 在 IDE 中,通过“Settings”或“Preferences”菜单,可以配置项目的 JDK 路径,选择已安装的 JDK 版本作为项目的编译和运行环境

安装常用 IDE

Eclipse 和 IntelliJ IDEA(简称 IDEA)是两种广泛使用的集成开发环境(IDE),它们在界面设计、代码编辑以及重构工具等方面存在区别。

Eclipse

Eclipse 的代码编辑器支持多种语言,如 Java、C++、Python 等,但其代码提示和自动补全功能略显不足,可能需要手动输入更多的代码。Eclipse 提供了一些基本的重构功能,但相对较少,可能无法满足一些高级重构需求。

IDEA

IDEA 具有现代化和直观的用户界面设计,提供清晰的组织结构和菜单选项,使用户能够快速找到所需的功能。这种设计对于追求高效率的开发者来说是一个加分项。同时提供了丰富的重构工具,使代码重构变得更加方便和安全。这些工具包括重命名、提取方法、改变方法签名等常见操作,大大提高了开发效率。 IDEA 旗舰版为收费制软件,联系站长可获取破解工具(仅对 2023 版本及之前有效,推荐 2023.2),或前往官网获取社区版免费使用。

注意:破解仅用于学习交流,严禁商业用途
Eclipse 和 IDEA 官网及其版本安装包下载链接如上,访问受限可移至文末进群下载。🎈🎈🎈

项目创建与编译运行

对应教材 P30 习题 4 和 5✨ 需完成前置条件,即 JDK 安装与环境变量配置

方式一:通过控制台命令程序

1.新建.txt 文本文件 📄➡️ 2.打开输入以下代码 ➡️3.保存并关闭 ➡️4.修改后缀为.java

public class Project {  //注意!文件名应与此处类名一致
public static void main(String[] args) {
    System.out.println("Hello World");
}
}

1.右键所在文件夹 📄➡️ 2.在终端中打开➡️3.输入以下代码

javac Project.java  // 回车
// 该命令用于将 java 源文件编译为 class 字节码文件
java Project   // 回车
// java 后面跟着的是java文件中的类名,例如 Project 就是类名
输出“ Hello World ”表示编译运行成功

方式二:通过 Eclipse

见教材详解,不多做解释

若未找到创建Java project选项,在project选项中选择Java即可。

方式三:通过 IDEA

1.选择新建项目📄➡️ 2.选择空项目➡️3.点击创建 1.右键项目文件夹📄➡️ 2.选择新建➡️3.点击Java类➡️4.输入类名确定,或连包带类创建 1.输入上文代码📄➡️ 2.点击顶部运行➡️3.查看控制台输出

输出“ Hello World ”表示编译运行成功

程序获取

因多数官网服务器位于海外,下载受限可移步站长资源 QQ 群,不定时上传其他实用工具,欢迎学习交流。点击前往

课后习题题解分析

代码推荐学习参考,本文已开放复制权限,但请弄懂每一行代码

第二章 1. 求圆球体积

题目

已知圆球体积公式为 V=4/3πr3,编写程序,设计一个求圆球体积的方法,并在主程序中调用它,求出当 r=3 时圆球的体积值。

思路

题目中涉及π4/3,所以我们选择double浮点型处理带有小数的运算,并在Math类中调用相关数学方法,Math.PI表示πMath.pow(a, b)用于处理幂函数a的b次方,再将计算返回值输出即可。

代码

public class Project {
    public static void main(String[] args) {
        double r = 3;
        double v = fun_v(r);
        System.out.println("当r=" + r + "时,圆球的体积为:" + v);
    }
    public static double fun_v(double r) {//形参变量名可与实参变量名重复
        return (4.0 / 3.0) * Math.PI * Math.pow(r, 3);//调用Math中的方法
    }
}

注意

函数fun_v的返回值类型为浮点型,三分之四必须书写为4.0/3.0

第二章 2. 棋盘麦粒问题

题目

曾有一位印度国王要奖赏他聪明能干的宰相达依尔。达依尔只要求在国际象棋的 64 个棋盘格上放置小麦粒,第一格放 1 粒,第二格放 2 粒,第三格放 4 粒,第四格放 8 粒……问最后一格需要放多少粒小麦粒呢?

思路

简洁的指数递增问题,可借助Math.pow(a, b)快速实现,不再多说,以下则利用for循环不断对当前格数的麦粒数目作自乘运算即可做出解答。

代码

public class Project {
    public static void main(String[] args) {
        double last = 1; //其他数据类型可能会产生溢出问题
        for (int i = 1; i <= 63; i++) {//第一格为1粒,相当于2的0次方
            last *= 2;
        }
        System.out.println("最后一格需要麦粒数量为:" + last);
    }
}

注意

虽然结果为整数,但不可选用长整型long,其范围为-2^63~2^63-1会产生溢出问题。

第二章 3. 水仙花数

题目

打印出所有的"水仙花数"。“水仙花数"是指一个 3 位数,其各位数字的立方和等干该数本身。例如,153 是一个"水仙花数”,因为 153=1^3+5^3+3^3。

思路

该题可先遍历100-1000 内的数,并将三位数分别提取,作 if 判断枚举输出匹配答案。

代码

public class Project {
    public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            int a = i / 100;        //提取百分位
            int b = (i % 100) / 10; //提取十分位
            int c = i % 10;         //提取个位数
            if (i == (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3))) {
                System.out.println(i);
            }
        }
    }
}

注意

弄清%取余符号的用法,不可与/作除符号弄混。

第二章 4. 分数序列之和

题目

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…,求出这个数列的前 20 项之和。

思路

分析数学问题,找到规律是关键,序列以 2/1 开始,下一分子为前一分子与分母和,下一分母为前一分子,最后转换成编程语言即可。

代码

public class Project {
    public static void main(String[] args) {
        double sum = 0; //总和
        double s = 2;   //分子
        double x = 1;   //分母
        for (int i = 0; i < 20; i++) {
            sum += s / x;
            s += x;
            x = s - x;
        }
        System.out.println("数列前20项和为:" + sum);
    }
}

注意

循环中变量x引用的变量s已经完成累加,原数据已被覆盖,所以作s-x运算。

第二章 5. 打印菱形图案。

题目

   *
  ***
 *****
*******
 *****
  ***
   *

思路

不考虑用 7 个print的方法输出,将菱形拆分为两个三角形状嵌套循环输出,外循环控制行数,内循环处理内容。

代码

public class Project {
    public static void main(String[] args) {
        int n = 4; // 上半三角形行数
        // 上半三角形输出
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n - i; j++) {//中轴线无空格
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();//单行输出完成换行
        }
        // 下半三角形输出
        for (int i = n - 1; i >= 1; i--) {//反向循环,加变减
            for (int j = 1; j <= n - i; j++) {
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

注意

该题需分析清楚如何使用嵌套 for 循环。

第二章 6. 素数之和

题目

求出 100~200 之间的所有素数。

思路

素数————在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。且范围 100~200,所以特殊情况1不考虑,站长在这道题采用的是循环枚举,调用布尔类型方法进行判断,输出符合条件结果。

代码

public class Project {
    public static void main(String[] args) {
        for (int i = 100; i <= 200; i++) {
            if (fun_if(i)) {//调用方法作判断条件
                System.out.println(i);
            }
        }
    }
    public static boolean fun_if(int i) {
        for (int j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {//找到能被其他数整除
                return false;
            }
        }
        return true;
    }
}

注意

判断方法中Math.sqrt(i)为计算平方根,因为当被除数大于其平方根后,不肯能出现被整除情况,节省运算时间。

实验课题解

本篇只包含上节课 02 题目,复制需粘贴在类中,上机课 03 代码用记事本打开即可

判断闰年

//判断是否闰年方法
public static boolean isLeapYear(int year){
    if((year%4==0)&&(year%100!=0) || (year%400==0)){
        return true;
    }else {
        return false;
    }
}
//main 方法
public static void main(String []args){
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入年份:");
    int year=sc.nextInt();
    if(isLeapYear(year)){
        System.out.println(year+"年是闰年");
    }else {
        System.out.println(year+"年不是闰年");
    }
}

判断某年某月多少天

    public static boolean isLeapYear(int year){
        if((year%4==0)&&(year%100!=0) || (year%400==0)){
            return true;
        }else {
            return false;
        }
    }
    public static int daysInMonth(int year, int month){
        int days = 0;
        switch(month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                days = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days = 30;
                break;
            case 2://特殊月份需调用方法判断是否为闰年
                if(isLeapYear(year)){
                    days= 29;
                }else {
                    days=28;
                }
        }
        return days;
    }
    //main方法
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year =sc.nextInt();
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        int days = daysInMonth(year,month);
        System.out.println(year+"年"+month+"月"+"有"+days+"天");
    }

程序获取

因多数官网服务器位于海外,下载受限可移步站长资源 QQ 群,不定时上传其他实用工具,欢迎学习交流。点击前往

特别鸣谢