首页 > 编程语言 >5.29_Java程序流程控制

5.29_Java程序流程控制

时间:2024-05-29 21:31:14浏览次数:35  
标签:arr Java int System 程序流程 数组 println 5.29 out

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~9
            System.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-100
        Random 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、访问数组的元素个数:数组名.length
        System.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,2
            System.out.println(ages[i]);
        }*/

        for(int i=0;i< ages.length;i++)
        {
            //i=0,1,2
            System.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 5
            System.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 5
            if(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 4
            System.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-4
            int 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工具基本使用步骤: 

 

标签:arr,Java,int,System,程序流程,数组,println,5.29,out
From: https://blog.csdn.net/m0_71643618/article/details/139282739

相关文章

  • Java数据结构与算法(红黑树)
    前言红黑树是一种自平衡二叉搜索树,确保在插入和删除操作后,树的高度保持平衡,从而保证基本操作(插入、删除、查找)的时间复杂度为O(logn)。实现原理红黑树具有以下性质:每个节点要么是红色,要么是黑色。根节点是黑色的。每个叶子节点(NIL节点,通常是空节点)是黑色的。如果一个节点......
  • Java数据结构与算法(散列表)
    前言散列表是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。而key的冲突主要通过链表的方式来处理,后期链表过长情况下可以通过红黑树来优化查询效率。实现原理散列函数(HashFunction):散列函数......
  • Java数据结构与算法(B+树)
    前言B+树(B+Tree)是一种平衡树数据结构,广泛用于数据库和文件系统中。它是一种自平衡的树结构,每个节点包含多个键,并且所有键都是排序的。B+树的叶子节点包含指向相邻叶子节点的指针,这使得范围查询非常高效。B+树的优点1.由于B+树在非叶子结点上不包含真正的数据,只当做索引使用......
  • Erroe:JSON parse error: Cannot deserialize value of type `java.lang.Integer` from
    报错:JSONparseerror:Cannotdeserializevalueoftype`java.lang.Integer`fromObjectvalue(token`JsonToken.START_OBJECT`);nestedexceptioniscom.fasterxml.jackson.databind.exc.MismatchedInputException:Cannotdeserializevalueoftype`java.lang.I......
  • Java项目:205Springboot + vue实现的养老院管理系统(含论文)
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍基于Springboot+vue实现的养老院管理系统系统包含老人、家属、管理员三个角色系统包含登录、注册、主页、老人管理、家属管理、家属意见管理、寝室管理、老人事故信......
  • 《用ChatGPT轻松搞定Java编程难题:从基础到复杂案例的全面解析》
    ChatGPT国内使用体验点击(文件中并非网站跳转而是详细教程):Docshttps://uajqbcov4oa.feishu.cn/docx/GmeGdznJkoc3nzxHECQcojZ9nXg?from=from_copylink随着人工智能技术的快速发展,越来越多的开发者开始使用ChatGPT来辅助解决编程中的问题。ChatGPT不仅可以快速生成代码,还能进行......
  • java基础
    1.类的概念包:一些接口和类集合在一起,方便使用,类似c语言的头文件使用import关键词,将所用的包导入类:【修饰符】class类名{类体}类中包含构造函数 ,对象(变量),方法等在一个程序中,只有一个pubic类,有一个主类中有main接口,是主程序的接口进入类,用来写一整块的功能【修饰符】包......
  • 升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框
    升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(三) 主要功能要点:     权限管理(组织机构、用户管理、角色管理、岗位管理)     系统设置(菜单管理、参数管理、数据字典、定时任务、文件管......
  • javascript引入了不同版本的多个jquery,如何不同版本之间不互相影响
    1️⃣ 原因  由于是一个比较老的项目,所以在做功能时,用到了老项目的一个控件,这一个控件是以前封装好的,依赖的是jquery-1.6.min.js。但是在做下拉框多选功能时,在网上找了一个下拉框多选的框架,但是这个框架依赖是jquery.js(3.7.1),所以才出现了这个问题。  简单来说就是新老控件......
  • 添砖Java(十二)——异常,异常捕获,常见异常方法
    异常:定义:异常通俗来讲,其实就是你写出bug来了,编译器给你报错了。publicstaticvoidmain(String[]args)throwsException{intz=10/0;} 这个代码虽然说是可以运行,但是编译器会报错。因为10不能去除以0。异常分为两种,一种是运行时异常,另一种时编译时......