5.29_Java程序流程控制

CSDN     同C语言的流程同

1、补充:

1、switch使用时的注意事项

1、表达式只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long

switch里面是做分支匹配,也就是可以出现很多分支,如果弄得范围很大,不可能出现这么多分支,int的范围都很大了,所以没有必要long搞这么多分支 。

double类型的数据它运算的时候可能是不精确的

默认double运算是不精确的,正是由于double运算不精确,自己计算的时候肯定会以为b是等于0.3,里面自己就会写个case 0.3;,但是这个b最后算出来的结果不是0.3,走不了这个分支,所以Java知道有这个问题,索性不支持double类型。 

2、case给出的值不允许重复,且只能是字面量,不能是变量

会不知道走哪个分支,会冲突

以为这个变量的值是可以改的,万一这个d改成了20呢,又跟下面的重复报错吗,不会的,所以就要一个确定值,定死了。

2、while循环和for循环

知道循环几次用for,不知道循环几次建议用while

案例:纸张折叠成珠穆朗玛峰的高度

需求:世界上最高山峰珠穆朗玛峰高度是:8848.86米=8848860毫米,假如我有一张足够大的纸,它的厚度时0.1毫米。请问:该纸折叠多少次,可以折成珠穆朗玛峰的高度,

一开始不知道要循环多少次使用while

分析:

1、定义变量存储珠穆朗玛峰的高度,纸张的高度

2、使用while循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就代表纸张折叠一次,并把纸张厚度变为原来的两倍。

3、循环外定义计数变量count,循环每折叠一次纸张,让count变量+1;

package com.branch;public class WhileTest2 {public static void main(String[] args) {double peakHeight=8848860;double paperThickness=0.1;int count=0;while(paperThickness<peakHeight){paperThickness=paperThickness*2;count++;}System.out.println("需要折叠" + count + "次");System.out.println("最终纸张的厚度" + paperThickness);}
}

2.Random的使用

作用:生成随机数

package com.random;import java.util.Random;public class RandomDemo1 {public static void main(String[] args) {//1、导包//2、创建一个Random对象,用于生成随机数Random r=new Random();//3、调用Random提供的功能:nextInt得到随机数for (int i=0;i<=20;i++) //控制下面这串代码重复执行20次{int data=r.nextInt(10);//0~9System.out.println(data);}}
}

 结果:

注意:

  • nextInt(n)功能只能生成:0~n-1之间的随机数,不包含n  ((10):0,1,2,3,4,5,6,7,8,9)

Random生成指定区间随机数

例如:要生成1~10之间的随机数。

 

结果:

补充:

可以直接写区间

int data3=r.nextInt(10,31);//10-30

3、案例:猜数字游戏

需求

  • 随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。

分析:

1、先随机生成一个1-100之间的数据

2、定义一个死循环让用户可以一直猜测

3、在死循环中,每次提示用户输入一个猜测的数字,猜大提示过大,猜小提示过小,猜中则结束游戏。

package com.random;import java.util.Random;
import java.util.Scanner;public class RandomTset2 {public static void main(String[] args) {//1、随机产生1-100Random r=new Random();int luckNumber=r.nextInt(100)+1;//2、定义一个死循环让用户可以一直猜测Scanner sc=new Scanner(System.in);while(true){System.out.println("请输入你猜测的数据");//接收用户输入的数据,用扫描器int guessNumber=sc.nextInt();//3、判断用户猜测的数字与luckNumber的大小情况if(guessNumber>luckNumber){System.out.println("猜测的过大");}else if(guessNumber<luckNumber){System.out.println("猜测的过小");}else{System.out.println("猜对了");break;//结束死循环}}}
}

4、数组

4.1数组的定义和访问

4.1.1 静态初始化数组

静态初始化数组:定义数组的时候直接给数组赋值

静态初始化数组的格式:

注意:

  • “数据类型[ ] 数组名”也可以写成“数据类型 数组名[ ]”
  • 什么类型的数组只能存放什么类型的数据
package com.define;public class ArrayDemo1 {public static void main(String[] args) {//静态初始化数组//1、数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3......}int[] age= new int[]{10,28,15,18};double[] scorces = new double[]{89.5,99.5,68.5,99};//2、简化版//数据类型[] 数组名 = {元素1,元素2,元素3......}int[] age1= {10,28,15,18};double[] scorces1 ={89.5,99.5,68.5,99};//“数据类型[ ] 数组名”也可以写成“数据类型 数组名[ ]”int age2[] = {10,28,15,18};double scorces2[] ={89.5,99.5,68.5,99};}
}

 数组在计算机中的基本原理

 

注意:数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型 

4.1.1.1数组的访问

 数组名[索引]  (索引也就是C语言中数组的下标)

数组的长度属性:length

//获取数组的长度(也就是数组元素的个数)

System.out.println(age.length);//3
package com.define;public class ArrayDemo2 {public static void main(String[] args) {int[] arr={12,34,24};//1、访问数组的全部数据System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);//System.out.println(arr[3]);//会越界System.out.println("---------------------------------------");//2、修改数组中的数据arr[0]=66;arr[2]=100;System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println("---------------------------------------");//3、访问数组的元素个数:数组名.lengthSystem.out.println(arr.length);System.out.println("---------------------------------------");//技巧:获取数组的最大索引 数组名.length-1  前提是数组中存在数据System.out.println(arr.length - 1);}
}

结果:

4.1.1.2数组的遍历

遍历:就是一个一个数据的访问

求和、元素搜索、找最大值、找最小值等情况下会用到数组的遍历

package com.define;public class ArrayDemo3 {public static void main(String[] args) {int[] ages={15,36,23};//           0  1  2/*System.out.println(ages[0]);System.out.println(ages[1]);System.out.println(ages[2]);*//*for(int i=0;i<3;i++){//i=0,1,2System.out.println(ages[i]);}*/for(int i=0;i< ages.length;i++){//i=0,1,2System.out.println(ages[i]);}//技巧for (int i = 0; i < ages.length; i++) {}}
}

4.1.1.3案例训练 

数组遍历--求和

需求:

  • 某部门5名员工的销售额分别是16、26、36、6、100,请计算出他们部门的总销售额

分析:

1、把这5个数据拿到程序中去  -->使用数组

2、遍历数组中的每个数据,然后在外面定义求和变量把他们累加起来

 

package com.define;public class ArrayDemo4 {public static void main(String[] args) {//1、定义一个数组存储5名员工的销售额int[] money={16,26,36,6,100};//            0  1  2 3  4//3、定义一个变量用于累加求和int sum=0;//2、遍历数组中的每个数据for (int i = 0; i < money.length; i++) {sum+=money[i];}System.out.println("员工的销售总额:" + sum);}
}

结果:

4.1.2动态初始化数组

数组的动态初始化:定义数组的时候先不加入具体的元素值,只确定数组存储的数据类型和长度

数组的动态初始化的格式:

数据类型[ ]  数组名 = new 数据类型[长度];

int[ ] arr = new int[3]; 

先往里面存默认值,int类型默认值是0

 

后赋值

arr[0]=10;

System.out.println(arr[0]);//10

 提示:

静态初始化和动态初始化数组的写法是独立的,不可以混用。

 动态初始化数组元素默认规则:

 把这个字符(chars[0])取出来之后,把他转成真正的数据,int类型

 适合场景:
  • 动态初始化:适合开始不知道具体元素值,只知道元素个数的场景
  • 静态初始化:适合一开始就知道要存入哪些元素值得场景 
 案例训练

需求:

  • 某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手得分。

分析: 

1、 6名评委的打分是后期录入的,一开始不知道具体分数-->动态初始化的数组存分数

2、遍历数组中的每个位置,每次提示用户录入一个评委的分数,并存入到数组对应的位置

3、遍历数组元素求和,最终得到的值算平均分打印出来

package com.define;import java.util.Scanner;public class ArrayTest6 {public static void main(String[] args) {//1、double[] scores=new double[6];//2、Scanner sc=new Scanner(System.in);for (int i = 0; i < scores.length; i++) {//i= 0 1 2 3 4 5System.out.println("请您输入当前第" + (i + 1) + "名评委的分数");double score=sc.nextDouble();scores[i]=score;}//3、double sum=0;for (int i = 0; i < scores.length; i++) {sum+=scores[i];}System.out.println("选手最终得分是:" + sum / scores.length);}
}

结果:

4.2数组的内存执行原理

1、数组的执行原理,Java程序的执行原理

Java内存分配介绍:

  • 方法区
  • 本地方法栈
  • 程序计数器

运行一个Java程序,主要看JVM中包含的方法区、栈内存、堆内存这三个内存区域 

 

 

 

2、多个变量指向同一个数组的问题

执行原理:

 

当两个变量指向同一个对象时,前一个过来修改,后一个再过来时可以看到修改后的对象

如果某个数组变量存储的地址是null,那么该变量将不会再指向任何数组对象。 

 

5、数组案例 

5.1数组求最值

案例:数组元素求最大值

实现步骤:

  • 把颜值数据拿到程序中去,用数组装起来
  • 定义一个变量用于记录最终的的最大值  max  建议存储数组的第一个元素作为参照
  • 从第二个位置开始:遍历数组的数据,如果遍历的当前数据大于max变量存储的数据,则替换变量存储的数据为当前数据。
  • 循环结束后输出max变量即可
package com.demo;public class Test1 {public static void main(String[] args) {//1、int[] faceScores={15,9000,10000,20000,9500,-5};//2、int max=faceScores[0];//3、for (int i = 1; i < faceScores.length; i++) {//i=1 2 3 4 5if(faceScores[i]>max){max=faceScores[i];}}System.out.println("最高颜值是:" + max);}
}

结果:

5.2数组反转

需求:

  • 某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转

[ 10  20  30  40  50 ] 反转后 [ 50  40  30  20  10 ]

分析:

  • 数组的反转操作实际上就是:依次前后交换数据即可实现

 具体操作类似 http://t.csdnimg.cn/UYm7l

里面的字符串逆序

package com.demo;public class Test2 {public static void main(String[] args) {//1、准备数组int[] arr ={10,20,30,40,50};//           i           j//2、定义两个变量,一个在前,一个在后for (int i = 0,j=arr.length-1; i < j; i++,j--) {//arr[i]  arr[j]//交换//1、定义一个临时变量记住最后一个位置处的值int temp=arr[j];//2、把前一个位置处的值给后一个位置arr[j]=arr[i];//3、把临时变量中记住的最后一个位置处的值赋值给前一个位置处arr[i]=temp;}//3、遍历数组中的每个数据,看是否反转成功了for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}

结果:

5.3随机排名

需求:

  • 某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请依次录入5名员工的工号,然后展示处一组随机的排名顺序。

分析

1、录入5名员工工号存储---> 使用动态初始化数组

2、依次遍历数组中的每个数据

3、每遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换

4、遍历数组中的工号输出

package com.demo;import java.util.Random;
import java.util.Scanner;public class Test3 {public static void main(String[] args) {//1、int[] codes=new int[5];//[0 0 0 0 0]// 0 1 2 3 4//2、Scanner sc=new Scanner(System.in);for (int i = 0; i < codes.length; i++) {//i= 0 1 2 3 4System.out.println("请输入当前第" + (i + 1) + "个员工的工号");int code=sc.nextInt();codes[i]=code;}//3、打乱数组中元素的顺序//每遍历到一个数据,都随机一个数组索引范围内的值,然后让当前遍历的数据与该索引位置处的值交换Random r=new Random();for (int i = 0; i < codes.length; i++) {int index=r.nextInt(5);//0-4int temp=codes[index];codes[index]=codes[i];codes[i]=temp;}//4、for (int i = 0; i < codes.length; i++) {System.out.print(codes[i] + " ");}}
}

 结果:

补充知识:Debug工具的使用

Debug工具

  • IDEA自带的断点调试工具,可以控制代码从断点开始一行一行的执行,然后详细看程序执行情况

Debug工具基本使用步骤: 

 

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

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

相关文章

oracle12.1 rac 静默dbca教程(百分之百创建成功)

修改原响应文件 [oracleprimary1 database]$ cd response/ [oracleprimary1 response]$ ls dbca.rsp db_install.rsp netca.rsp [oracleprimary1 response]$ vi dbca.rsp 默认即可 数据库类型内存占比按需选择 运行静默创建实例脚本 [oracleprimary1 response]$ dbca -silen…

【传知代码】知识图谱推理-论文复现

文章目录 概述方法介绍核心逻辑实验条件数据集实验步骤实验结果 核心代码小结 本文涉及的源码可从知识图谱推理该文章下方附件获取 概述 本研究深入探讨了基于图神经网络&#xff08;GNN&#xff09;的知识图谱推理&#xff0c;特别聚焦于传播路径的优化与应用。在智能问答、推…

⌈ 传知代码 ⌋ YOLOv9最新最全代码复现

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

数据结构——二叉树的实现

文章目录 一、二叉树概念的回顾二、二叉树结构的定义三、二叉树的创建方法一、写个创建结点的函数然后手动链接起来创建结点的函数手动链接 方法二、通过前序遍历的数组的方式构建二叉树创建的函数声明创建函数的定义 四、 二叉树的遍历前序遍历中序遍历后序遍历层序遍历 五、二…

从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1

黑金的教程做的实在太拉闸了&#xff0c;于是自己摸索信号采集模块的使用方法。 ADC模块&#xff1a;AN9238 FPGA开发板&#xff1a;AX7020&#xff1b;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I&#xff0c;400引脚 FBGA 封装。 往期回顾&#xff1a; 从零开始利…

测试驱动编程(4)模拟消除依赖

文章目录 测试驱动编程(4)模拟消除依赖模拟框架Mockito什么要模拟名词解释Mockito常用注解Mockito常用静态方法Mockito测试流程三部曲基础用法可变返回结果验证verfily对象监视spy 示例实战升级版井字游戏需求一需求二需求三 总结 测试驱动编程(4)模拟消除依赖 模拟框架Mockit…

YOLOv8架构详解

&#x1f4cc;YOLOv8架构详解 YOLOv8 架构图YOLOv8 Backbone部分YOLOv8 Head部分Neck和Head结构 在视觉深度学习中&#xff0c;通常将模型分为 2~3 个组成部分&#xff1a;backbone、neck&#xff08;可选&#xff09; 和 head。 Backbone&#xff08;主干网络&#xff09;负责…

NTLite深度Windows系统镜像文件修改定制

计算机爱好者和技术宅的圈子里,NTLite是一个广受欢迎的名字,一款强大的Windows系统定制工具,允许用户对Windows安装镜像进行深度修改,从而打造出一个更加个性化、高效且精简的操作系统。无论是为了优化系统性能、移除不必要的组件,还是集成最新的更新和驱动,NTLite都能成…

java后端框架-MyBatis

一、概述 1、起源 MyBatis本是Apache下的开源项目&#xff0c;名为iBatis,2010年转投谷歌,从iBatis3.x开始更名为MyBatis 2、优点 (1)优秀的数据持久层框架&#xff08;对jdbc做了轻量级封装&#xff09; 3、特点 (1)对jdbc中接口进行封装的同时还提供了一些自己的类实现…

samba_ubuntu_share_vmbox_vmware

_____ Ubuntu 利用 samba 与 win 直接共享文件夹 _____ samba Samba - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) 用于 win 和 unix 直接访问资源 samba 为选定的 unix 目录建立网络共享&#xff0c; 使得 win 用户可以像访问普通 win 下的文件夹那样来通过网络来…

npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本

安装npm时出现如下提示&#xff1a; 出现这个错误信息&#xff0c;是系统禁止执行PowerShell的脚本。 出现的原因是&#xff0c;系统默认的执行策略是Restricted&#xff08;默认设置&#xff09;&#xff0c;限制执行&#xff0c;所以会出现如上提示。 解决方法&#xff1a;…

Linux服务器配置ssh证书登录

1、ssh证书登录介绍 Linux服务器ssh登录有密码登录和证书登录两种。如果使用密码登录&#xff0c;容易遭受密码泄露或者暴力破解&#xff0c;我们可以使用ssh证书登录并禁止使用密码登录&#xff0c;ssh证书登录通过公钥和私钥来完成整个连接过程&#xff0c;公钥保存在服务器…

高维数组到向量的转换:两种方法的深度解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;高维数组的挑战与需求 二、方法一&#xff1a;使用NumPy库进行展平 示…

如何将md文件精确的转换成docx文件

如何将md文件转换成docx&#xff1f; 文章目录 如何将md文件转换成docx&#xff1f;一、如何将MD文件比较完美的转换成word呢&#xff1f;二、方法3 步骤1、下载一个可用的MarkDown编辑器2、下载Pandoc安装 三、来进行转化了 一、如何将MD文件比较完美的转换成word呢&#xff1…

从零开始学Vue3--根据目录结构自动生成路由

我们在测试或者小项目中经常遇到一个问题&#xff0c;就是加一个页面&#xff0c;就要在router.js中加一个路由&#xff0c;相当的麻烦&#xff0c;有没有办法可以根据目录结构自动生成路由呢&#xff1f; 想要自动生成路由&#xff0c;最重要的是能够获取指定目录下vue的路径…

开源代码分享(31)-计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

参考文献&#xff1a; [1]孙惠娟,刘昀,彭春华,等.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度[J].电网技术,2021,45(09):3534-3545.DOI:10.13335/j.1000-3673.pst.2020.1720. 1.摘要 为了促进多能源互补及能源低碳化&#xff0c;提出了计及电转气协同的含碳捕集与垃…

canfd与can2.0关系

canfd是can2.0的升级版&#xff0c; 支持canfd的设备就支持can2.0&#xff0c;但can2.0的设备不支持canfd 参考 是选CAN接口卡还是CANFD接口卡_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hh411K7Zn/?spm_id_from333.999.0.0 哪些STM32有CANFD外设 STM32G0, STM…

使用OrangePi KunPeng Pro部署AI模型

目录 一、OrangePi Kunpeng Pro简介二、环境搭建三、模型运行环境搭建(1)下载Ollama用于启动并运行大型语言模型(2)配置ollama系统服务(3)启动ollama服务(4)启动ollama(5)查看ollama运行状态四、模型部署(1)部署1.8b的qwen(2)部署2b的gemma(3)部署3.8的phi3(4)部署4b的qwen(5)部…

工作中有哪些超级好用的C/C++程序库?

视频和讲义发布在这里&#xff1a; B站链接

Android Ktor 网络请求框架

Ktor 是一个由 JetBrains 开发的用于 Kotlin 编程语言的应用框架&#xff0c;旨在创建高性能的异步服务器和客户端应用程序。由于完全基于 Kotlin 语言&#xff0c;Ktor 能够让开发者编写出简洁、可读性强且功能强大的代码&#xff0c;特别适合那些已经熟悉 Kotlin 的开发人员。…