JAVA基础:多重循环、方法、递归 (习题笔记)

一,编码题

1.打印九九乘法表

import java.util.*;public class PanTi {public static void main(String[] args) {Scanner input = new Scanner(System.in);for (int i = 0; i <= 9; i++) {//i控制行数/* System.out.println("。\t。\t。\t。\t。\t。\t。\t。\t。");*/for (int j = 1; j <= i; j++) {//j控制每行中的个数System.out.print(i + "*" + j + "=" + (i * j) + "\t");//不换行打印数据}System.out.println();//打印完一行换行}}
}

 2.判断1-100之间有多少个素数并输出所有素数。(将判断一个数是否是素数的功能提取成方法,在循环中直接调用即可)

import java.util.*;public class PanTi {public static void main(String[] args) {int count = 0;for (int j = 1; j <= 100; j++) {if (isPrime(j)) {System.out.print(j + " ");count++;if (count % 8 == 0) {System.out.println();}}}}private static boolean isPrime(int n) {boolean flag = true; // flag:返回值默认true,表示是素数if (n == 1)flag = false;else {for (int i = 2; i <= Math.sqrt(n); i++) {//Math.sqrt(n) 是 Java 中的一个静态方法,用于计算给定数值 n 的平方根if (n % i == 0) {flag = false;break;}}}return flag;}}

3.输入三个班,每班10个学生的成绩,求和并求平均分

import java.util.*;public class PanTi {public static void main(String[] args) {Scanner sc = new Scanner(System.in);for(int i = 1;i<=3;i++){//输入每个班成绩并求和System.out.println("请输入第"+i+"个班的成绩");double sum = 0;for(int j=0;j<10;j++){System.out.println("   请输入第"+(j+1)+"个学生成绩:");double score  = sc.nextDouble();System.out.println(score);sum += score;}//求平均分double avg = sum / 10;//输出结果System.out.println("第"+i+"个班学生总分:"+sum+" 平均分:"+avg);		}}}

4.编写递归算法程序:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。

import java.util.*;public class PanTi {public static void main(String[] args) {System.out.println(sum(40));}public static long sum(int n) {if (n <= 0) {return 0;} else if (n == 1 || n == 2) {return 1;} else {return sum(n - 1) + sum(n - 2);}}}

(选) 

1.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

import java.util.*;public class PanTi {public static void main(String[] args) {for(int i=100;i<1000;i++){if(isLotus(i))System.out.print(i+" ");}System.out.println();}//判断水仙花数private static boolean isLotus(int lotus){boolean flag=false;int a = lotus % 10;//个位int b = lotus / 10 % 10;//十位int c = lotus / 100 % 10;//百位if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == lotus) {//Math.pow(a, 3) 是 Java 中的一个静态方法,用于计算给定数值 a 的立方(即 a 的三次方)。//返回值类型为 doubleflag = true;}return flag;}}

 

2.定义方法:打印指定行和列的矩形

import java.util.*;public class PanTi {public static void main(String[] args) {// 调用printStr方法printStr(5, 4, "*");}public static void printStr(int rows, int columns, String str) {for (int i = 0; i < rows; i++) {//行数for (int j = 0; j < columns; j++) {//列数System.out.print(str);//直接打印}System.out.println();//一行打完换行输出}}}

3.编写Java程序,实现接收用户输入的正整数,输出该数的阶乘。要求:限制输入的数据在1-10之间,无效数据进行提示,结束程序。要求使用递归和循环分别实现。输出结果如:4!=1*2*3*4=24

import java.util.*;public class PanTi {public static void main(String[] args) {Scanner input = new Scanner(System.in);//输入一个数System.out.println("请输入你要判断的数据:");int n = input.nextInt();if(n>10 || n<1){System.out.println("限制输入的数据在1-10之间");System.exit(0);}String str = testString(n);long sum = factRec(n);//递归System.out.println(n+"!="+str+"="+sum);long sum2 = factfor(n);//for循环System.out.println(n+"!="+str+"="+sum2);}//实现字符串的输出public static String testString(int n){String result = "";for (int i=1;i<=n;i++){result +=(i+"*");}return result.substring(0, result.length()-1);//substring() 是 Java 中 String 类的一个方法,用于获取字符串的一部分//第一个参数 0 表示子字符串的起始索引。//第二个参数 result.length() - 1 表示子字符串的结束索引(不包括该索引位置的字符)}//递归实现public static long factRec(int n){if(n==1){return 1;}else{return n*factRec(n-1);}}//for循环实现public static long factfor(int n){int sum = 1;for (int i = 1; i < n; i++) {sum += sum * i;}return sum;}}


二,简答题

1.在多重循环中,如何在内层循环中使用break跳出外层循环

在多重循环中,可以使用带有标签的break语句跳出外层循环。‌ 在内层循环中使用break语句时,加上外层循环的标签即可实现跳出外层循环的功能。

具体步骤如下:

  1. 在需要跳出的外层循环之前,给外层循环添加一个标签,例如 outer_loop:。
  2. 在内层循环中使用 break outer_loop; 语句,即可跳出外层循环。

注意事项:

                使用带有标签的break语句虽然可以跳出多层循环,但容易导致代码结构混乱,建议尽量避免嵌套过多的循环。

2.方法重载的定义、作用和判断依据

  • ‌方法重载的定义‌:

方法重载是指在同一个类中可以定义多个方法,这些方法具有相同的名称但参数不同。参数的不同可以体现在类型、个数或顺序上。返回值类型和访问修饰符不影响方法的重载‌。

  • ‌方法重载的作用‌:

通过方法重载,可以用同一个方法名实现多个功能相似的操作,只需传递不同的参数即可执行不同的逻辑。这提高了代码的重用性和可读性,使得代码更加简洁和易于维护‌。

  • 方法重载的判断依据‌:

判断一个类中的多个方法是否构成重载,主要依据是方法名是否相同,参数的类型、个数或顺序是否不同。返回值类型和访问修饰符不作为判断依据‌

3.递归的定义和优缺点

  • 递归的定义:

‌递归是一种函数或过程在其定义中调用自身的方法。‌ 递归通常用于解决可以将问题分解为更小、更简单的子问题的情况。

递归的核心在于将一个大问题分解成多个小问题,而这些小问题又与原问题相似,直到达到一个简单的情况可以直接解决为止‌。

  • 递归的优点:

(1)简洁性‌:

递归可以用较少的代码实现复杂的功能,相对于使用循环来处理嵌套结构,递归代码通常更简洁、易于理解和维护‌。

(2)可读性‌:

递归可以使代码更加可读和自解释,特别是对于涉及嵌套结构的问题,递归代码可以                 更直观地表示问题的解决方案‌3。

(3)灵活性‌:

递归可以应对未知深度的数据结构,因为它不需要提前知道要处理的嵌套层级‌3。

(4)问题分解‌:

递归通过将问题划分为更小的子问题,使得复杂问题的解决变得更加可行‌。

  • 递归的缺点:

(1)性能开销‌:

递归可能会导致性能问题,尤其是当递归层级很深时。每次递归调用都需要在内存中创建一个新的函数上下文,这可能会占用大量的内存和处理时间‌3。

(2)栈溢出‌:

如果递归层级过深,函数调用的堆栈可能会超出系统的限制,导致栈溢出错误。这通常可以通过限制递归层级或使用尾递归优化来避免‌3。

(3)难以调试‌:

由于递归涉及到函数的自我调用,调试递归函数可能会变得复杂和困难。错误的递归调用可能导致死循环或无限递归,从而使得调试变得更加困难‌3。

4.方法的定义中,是否必须要有返回值类型?如果确实不需要返回值,使用哪个关键字声明?

‌在Java中,方法的定义中不是必须要有返回值类型。‌ 如果方法不需要返回任何数据,可以使用void关键字声明。

在Java中,方法可以分为有返回值和无返回值两种类型。如果方法不需要返回任何数据,即执行某些操作但不产生结果,可以使用void关键字声明。这种情况下,方法内部不能使用return返回数据。

5.方法的定义中,return是否必须?它有什么作用?

在方法的定义中,return不是必须的关键字,但在有返回值的方法中是必须的。

  • return语句的主要作用:

(1)返回值‌:

return语句用于将方法的执行结果返回给调用者。如果方法声明了返回类型,return语句必须返回一个与返回类型兼容的值‌。

(2)结束方法执行‌:

return语句可以提前结束方法的执行,即使方法体中还有未执行的代码。这有助于控制程序的流程,提高代码的可读性和可维护性‌。

(3)控制程序流程‌:

在循环或条件判断中,return语句可以用于提前结束循环或从多层嵌套结构中跳出,从而实现更精细的控制流程管理‌。

(4)错误处理

return语句还可以用于错误处理。在函数中遇到错误时,可以通过return语句返回一个特定的错误码或信息,以便调用者进行相应的处理‌

6.java中,参数的传递使用值传递还是引用传递?

      (1)在Java中,参数的传递可以是值传递,也可以是引用传递。

      (2) 基本数据类型作为参数时进行的是值传递,而对象引用类型作为参数时进行的是引用传递。

7.方法定义中,形式参数和实际参数有什么区别?用自己的话描述。

  • 定义:

(1)形式参数‌:

在定义函数或方法时,函数名后面的括号中的参数称为形式参数。形式参数在函数调用时才会被实际参数所取代,它只是一个占位符,用于接收实际参数的值‌。

(2)实际参数‌:

在调用函数或方法时,传递给函数的参数称为实际参数。实际参数是真实传递给函数的值,可以是常量、变量、表达式或函数等‌。

  • 作用范围和生命周期:

(1)形式参数‌:

形式参数只在函数或方法定义的作用域内有效,当函数调用完成后,形式参数会自动销毁。形式参数的作用域仅限于函数内部,函数外部无法访问‌。

(2)实际参数‌:

实际参数在函数调用时传递给函数,其作用范围为调用函数的过程中。实际参数在函数调用时被传递,并在函数内部被形式参数接收和使用‌。

  • 内存分配‌:

‌(1)形式参数‌:

在函数调用时,形式参数会接收实际参数的值,但形式参数本身在函数定义时并不分配内存。形式参数的作用域仅限于函数内部,函数外部不识别形式参数‌。

(2)实际参数‌:

在函数调用时,实际参数需要分配内存地址,以便将值传递给形式参数。实际参数的作用域为调用函数的过程中‌。

  • 传递方式‌:

(1)值传递‌:

当实际参数为不可变对象时,通常进行值传递。在这种情况下,改变形式参数的值不会影响实际参数的值‌。

‌(2)引用传递‌:

当实际参数为可变对象时,通常进行引用传递。在这种情况下,改变形式参数的值会影响实际参数的值‌。

8.方法定义时,使用实参还是形参?

在方法定义时,使用的是形参,而在方法调用时使用的是实参。

  • 形参和实参的定义和作用

(1)形参‌:

在方法定义时使用的参数,用于接收外部传入的值。形参是方法签名的一部分,作为方法内部的局部变量,用于存储传入的实参值。形参只有在方法被调用时才会分配内存单元,并在方法调用结束后释放内存‌。

(2)实参‌:

在方法调用时传递给方法的实际值或对象的引用。实参用于传递数据给方法内部使用,可以是基本数据类型或对象引用‌。

  • 形参和实参的类型和数量

(1)类型‌:

形参和实参都可以是基本数据类型(如int、double等)或对象引用。形参具有特定的数据类型,而实参则是实际的数据值或对象引用‌。

(2)数量‌:

调用方法时提供的实参数量必须与方法定义中的形参数量一致。如果形参数量不匹配,会导致编译错误‌。

  • 形参和实参的传递方式:

(1)值传递‌:

当传递基本数据类型时,是将实际参数的值复制给形式参数。在这个过程中,实际参数的数值不会发生变化,形式参数的变化也不会影响实际参数‌。

‌(2)引用传递‌:

当传递对象引用时,传递的是引用地址,而不是值的复制。在这种情况下,形式参数和实际参数指向同一个对象,因此形式参数的改变会影响实际参数‌。


通过理解形参和实参的定义、类型、数量以及传递方式,可以更好地掌握Java中方法的定义和调用。

9.定义形参时,必须要写变量类型吗?

在编程语言中,定义形参时必须明确指定变量的类型。这是因为类型信息对于编译器来说非常重要,它帮助编译器进行类型检查,确保函数调用的正确性。

  • 形参的定义规则
(1)必须指定类型‌:

每个形参都必须声明其数据类型。例如,int, double, String等。

(2)命名规则‌:

形参的命名应简洁明了,能够反映参数的作用或含义。通常使用小写字母开头,如果由多个单词组成,从第二个单词开始使用大写字母(驼峰命名法)。

(3)作用域‌:

形参的作用域仅限于定义它的方法内部,一旦方法执行完毕,形参的作用域也随之结束。

通过遵循这些规则,可以确保代码的可读性和维护性,同时避免编译错误。

10.实参类型是否必须和形参类型匹配?

在Java中,实参的类型必须和形参的类型兼容,并且在赋值过程中可以进行自动的类型转换(也称为装箱和拆箱)。如果实参类型与形参类型不匹配,编译器会报错。

形参和实参的类型匹配规则:
(1)基本数据类型:

实参的类型必须严格等同于形参的类型。

(2)对象类型:

实参类型可以是形参类型或其子类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务系列二:跨微服务请求优化,注册中心+OpenFeign

目录 前言 一、纯 RestTemplate 方案存在的缺陷 二、注册中心模式介绍 三、注册中心技术&#xff1a;Nacos 3.1 Docker部署Nacos 3.2 服务注册 3.3 服务发现 四、代码优化&#xff1a;OpenFeign工具 4.1 OpenFeign快速入门 4.2 连接池的必要性 4.3 抽取服务、最佳实…

国产数据库之Vastbase海量数据库 G100

海量数据库Vastbase是基于openGauss内核开发的企业级关系型数据库。其语法和Oracle数据库很像&#xff0c;基本是从Oracle数据库迁移到海量数据库&#xff0c;以下简单介绍入门的使用 1、建库操作 地址&#xff1a;x.x.x.x root/Qa2021 安装路径&#xff1a;/home/vastbase 创…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

不要只知道deepl翻译,这里有10个专业好用的翻译工具等着你。

deepl翻译的优点还是有很多的&#xff0c;比如翻译的准确性很高&#xff0c;支持翻译的语言有很多&#xff0c;并且支持翻译文件和文本。但是现在翻译工具那么多&#xff0c;大家需要翻译的场景也有很多&#xff0c;怎么能只拥有一个翻译工具呢。所以在这里我帮助大家寻找了一波…

使用Docker Compose构建多容器应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Compose构建多容器应用 引言 Docker Compose 简介 安装 Docker Compose 创建基本配置 运行多容器应用 查看服务状态 …

WindowsDocker安装到D盘,C盘太占用空间了。

Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…

【小白学机器学习31】 大数定律,中心极限定理,标准正态分布与概率的使用

目录 1 正态分布相关的2个相关定理 1.1 大数定律&#xff1a;(证明了)分布的稳定性 1.2 中心极限定理&#xff1a;(证明了)分布的收敛性 2 使用标准差和概率的2种思路 2.1 标准正态分布的曲线 2.2 两种使用方式 2.3 第1种&#xff1a;按整数倍标准差δ 作为标准使用 2.…

springcloud通过MDC实现分布式链路追踪

在DDD领域驱动设计中&#xff0c;我们使用SpringCloud来去实现&#xff0c;但排查错误的时候&#xff0c;通常会想到Skywalking&#xff0c;但是引入一个新的服务&#xff0c;增加了系统消耗和管理学习成本&#xff0c;对于大型项目比较适合&#xff0c;但是小的项目显得太过臃…

R语言结构方程模型(SEM)

原文链接&#xff1a;R语言结构方程模型&#xff08;SEM&#xff09;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247624956&idx4&sn295580a016a86cfee8ee2277c93e32d5&chksmfa8da91bcdfa200da897f1f267492039865bdfe5d75a1c6e6df92ff5005e0eb5cc33a…

国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案

一、方案背景 在当代建筑施工领域&#xff0c;安全监管和防盗监控是保障工程顺利进行和资产安全的关键措施。随着科技进步&#xff0c;传统的监控系统已不足以应对现代工地的安全挑战。因此&#xff0c;基于国标GB28181视频平台EasyCVR的工地防盗视频监控系统应运而生&#xf…

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

《YOLO 目标检测》—— YOLO v4 详细介绍

文章目录 一、整体网络结构1. YOLO v4 网络结构图2.对之前版本改进创新的概括 二、对改进创新部分的具体介绍1. 输入端创新2. Backbone主干网络创新CSPDarknet53Mish激活函数Dropblock正则化 3. 特征融合创新SPP模块PAN结构 4. Prediction输出层创新CIOU LossDIoU_NMS&#xff…

动态规划 —— dp问题-按摩师

1. 按摩师 题目链接&#xff1a; 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/the-masseuse-lcci/description/ 2. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者以某一个位置为起点 dp[i]表示&#xff1a;选择到i位置…

【react】基础知识点学习

1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件&#xff0c;App.js为根组件。 如何将react应用挂载在页面上&#xff1f; 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…

word及Excel常见功能使用

最近一直在整理需规文档及表格&#xff0c;Word及Excel需要熟练使用。 Word文档 清除复制过来的样式 当复制文字时&#xff0c;一般会带着字体样式&#xff0c;此时可选中该文字 并使用 ctrlshiftN 快捷键进行清除。 批注 插入->批注&#xff0c;选中文本 点击“批注”…

在Microsoft Outlook日历中添加多个时区

在Microsoft Outlook日历中添加多个时区 1.单击Outlook中的文件选项卡&#xff0c;单击选项 2.左侧菜单中选择日历 3.向下滚动到时区部分&#xff0c;并标记当前时区&#xff0c;比如China 4.选中“显示第二个时区”框 5.选择第二个时区并给它一个标签&#xff0c;比如Germa…

vue组件在项目中的常用业务逻辑(3)

获取完后台接口数据后&#xff0c;需将数据在页面中进行动态展示。 一、在getters中简化数据&#xff1a; 二、在search>index.vue中写计算属性&#xff0c;实现将接口的goodsList模块数据展示在vue的search上&#xff1a; 三、1.用v-for循环数据&#xff0c;一共十个&…

从传感器到清洁力提升,灵途科技推动家电智能化发展

双十一第一波预售刚结束&#xff0c;第二波预售活动又火热开启。得益于政府补贴和平台优惠的双重带动&#xff0c;扫地机等高端智能家电需求暴增。 今年&#xff0c;各大电商平台不再单纯追求“全网最低价”&#xff0c;而是在低价基础上注重提升用户的综合体验。家电机器人品…

基于STM32的智能温室环境监测与控制系统设计(代码示例)

一、项目概述 在现代农业中&#xff0c;智能大棚能够通过环境监测、数据分析和自动控制等技术手段&#xff0c;实现对作物生长环境的精细化管理。本项目旨在设计一个基于STM32单片机的智能大棚系统&#xff0c;能够实时监测光照强度、空气温湿度及土壤湿度&#xff0c;并根据设…