复习java基础

复习一天有点忘了的知识:

结构化编程

结构化程式设计(英语:Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。

指导思想

自顶向下、逐步求精、模块化

编程过程

流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。

常见的绘制工具有Visio、PowerDesigner等。

1、圆角矩形表示“开始”与“结束”。

2、矩形表示行动方案、普通工作环节用

3、菱形表示问题判断或判定(审核/审批/评审)环节

4、用平行四边形表示输入输出

5、箭头代表工作流方向

在这里插入图片描述

推荐工具:ProcessOn 支持流程图、思维导图、原型图、UML、网络拓扑图、组织结构图等

结构化编程的推论

任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也包含三种基本结构

条件分支语句

  • if(条件判断语句){代码A;} 当条件成立时执行代码A,如果条件不成立则不执行代码A,而是直接执行if的下一句

  • if(条件){代码块1;}else{代码块2;} 当条件成立时执行代码块1,如果条件不成立则执行代码块2。没有一种情况是同时执行代码块1和2

  • if(条件1){代码块1;}else if(条件2){代码块2;}…else{代码块n;} 当条件1成立时执行代码块1,如果条件1不成立继续判断条件2,如果条件2成立则执行代码块2,依次类推。没有一种情况是同时执行代码块1和2

  • 说明:允许多个if之间进行相互嵌套

需求:要求输入学生性别,如果false则显示女

Scanner sc = new Scanner(System.in);
boolean bb = sc.nextBoolean();
if (bb == false) { //判真一般用法为if(bb){} 判假 if(!bb){}System.out.println("性别为女");
}

要求输入学生成绩(假设成绩都是整数),如果>60显示及格,否则显示不及格

Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score >= 60) {System.out.println("成绩及格");
} else {System.out.println("成绩不及格");
}

要求输入学生成绩(假设成绩都是整数),如果>=85显示优秀,如果>=70显示良好,如果>=60显示及格,否则显示不及格

Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score >= 85){ 
//这里的顺序不能调整,因为条件成立后则立即执行代码块,执行结束则自动跳出if,不会继续判断System.out.println("成绩优秀");
} else if(score>=70) {System.out.println("成绩良好");
} else if(score>=60){System.out.println("成绩及格");
} else {System.out.println("成绩不及格");
}

修改代码

if (score > 70) {System.out.println("良好");
} else if (score > 85) { 
//这里的代码永远不会有执行机会。因为这里的if条件实际上是一个复合条件,if(score<=70 && score>85){}System.out.println("优秀");
} else if (score > 60) { //score<=70 && score<=85 && score>60System.out.println("及格");
} else {System.out.println("不及格");
}

开关分支语言switch

语法:

switch(表达式){

case 值1: 判断表达式的值是否在值1,如果相等则执行代码块1代码块1; break; 执行完成后,如果没有break,则自动执行后续语句,但是不进行判定。如果有break则立即中断switch的执行,跳到switch块的下一局继续执行多个case语句:... ...default:如果所有的case都不能成立,则执行代码块n代码块n; break;

}

语法点:

  • 表达式的计算结果可以是整型【不允许long类型】,可以是char,同时允许是字串类型[String]

  • 也可以是枚举类型

  • case值类型必须和switch条件类型相同或者能隐式转换为switch表达式类型

  • case值必须唯一,不能与其它的重复

  • default的位置没有特殊要求,但是一定是所有的case值不相等时才会执行。但是为了增强可读性,所以一般建议写在所有的case之后

需求:输入月份,显示对应的本月的天数

System.out.println("请输入月份:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
switch (m) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:System.out.println("本月31天");break;case 2:System.out.println("请输入年份:");int year = sc.nextInt();if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {System.out.println("本月29天");} elseSystem.out.println("本月28天");break;case 4:case 6:case 9:case 11:System.out.println("本月30天");break;default: //default写在switch内部的任何位置上实际都不会影响执行逻辑,但是不建
议,因为会影响可读性System.out.println("月份错误!");break;}
}

三目运算符

三目条件运算符(?:)规则是完全一致的,使用的形式是: x ? y:z;

需求:要求输入两个整数,输出最大的整数

使用if判断的实现方式:

public class Test1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入第一个整数:");int num1 = sc.nextInt();System.out.println("请输入第二个整数:");int num2 = sc.nextInt();int max = num1;if (max < num2)max = num2;System.out.println("两个整数("+num1+","+num2+")中最大的值为:"+max);sc.close();}
}

使用三目运算符实现

Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();/** if(num1>num2) max=num1;* else max=num2;*/
int max = num1 > num2 ? num1 : num2;
System.out.println("两个整数("+num1+","+num2+")中最大的值为:"+max);
sc.close();
  • 要求表达式1必须返回值为boolean类型

  • 要求表达式2和表达式3的返回值类型一致, System.out.println(m>n?123:“abc”); 正确

    • Object max = num1 > num2 ? num1 : "num2";

题目:

int k=100;
int m=99;
int res=k>100?m++:++m;
System.out.println(res);  
//100 k>100不成立,则直接执行++m,而和表达式2:m++无关,不会执行
System.out.println(m); //100

循环结构

循环就是重复做某一件事情。在Java程序中,循环控制即在某一情况下,控制程序重复执行某一条或多

条语句,直到遇到终止条件为止

循环语句也称迭代语句,在Java语言中存在的while、for和do-while循环语句

while循环

while是Java中最基本的循环语句,满足条件才执行循环体,如果不满足条件则不执行。所以有可能循环体一次都不执行。

语法:

while(条件){循环体;} 当条件成立时反复执行循环体,每执行一次判断一次条件。

int res=0;//累加器,用于存放每次循环体的执行结果
int k=1;//控制循环次数
while(k<101){res=res+k;k++;
}
System.out.println("1+2+3+...+100="+res);
int res = 0;// 累加器,用于存放每次循环体的执行结果
int k = 0;// 控制循环次数
while (k++ < 100)res += k;
System.out.println("1+2+3+...+100=" + res);
int res = 0;// 累加器,用于存放每次循环体的执行结果
int k = 1;// 控制循环次数
while(true){//这个写法一般用于没有很明确的次数控制时res+=k;if(++k>100)break; //当满足条件则跳出while循环体
}
System.out.println("1+2+3+...+100="+res);

没有很明确的次数控制

需求:要求输入一个合法的年龄值【和业务需求相关】

int age=0;
while(true){    System.out.println("请输入学生年龄:");age=sc.nextInt();if(age>=18 && age<=24)break;elseSystem.out.println("您输入的是"+age+",这是一个不合法的年龄");
}

需求:计算所有100以内奇数的和

int res=0; //累加器
int k=0; //循环控制变量
while(++k<101){if(k%2==1)res+=k;
}
System.out.println("1+3+5+...+99="+res);

break和continue的用法

int res=0;
int k=0;
while(true){if(++k>100){break; //跳出循环体,执行循环体后的语句}if(k%2==0){ 
//如果是偶数不进行累加操作,而是从新开始后续的循环,continue之后的语句不执行,从头开始下次循环continue; //终止本次循环,立即进入下次循环} else{res+=k; //res=res+k}System.out.print(k+"+");
}
System.out.println("="+res);

break和continue的区别:

  • break是立即终止循环,进入循环结构的后续代码继续执行,循环体执行结束

  • continue是终止本次循环,进入下次循环,循环并没有执行结束

do/while循环

语法:

do{循环体;}while(条件); 先执行循环体,然后进行条件判断,如果条件为true,则执行下次循环;如果条件为false则终止循环。

  • 不同于while循环的点:do/while循环至少执行循环体一次,而while循环有可能一次都不执行。
int res=0;
int k=1;
do {res+=k++; //res=res+k;k++;
} while (k < 101);
System.out.println(res);

for循环

语法:for(表达式1;表达式2;表达式3){循环体;}

  • 执行表达式1

  • 执行表达式2,一般表达式2是一个条件,如果条件为true则执行循环体;如果条件为false则终止循环

  • 执行循环体

  • 执行表达式3

  • 执行第2步骤

for循环一般用于可以明确循环次数的场景中;while循环一般用于不能预先确定循环执行次数的场景中;do/while循环一般用于不能预先确定循环执行次数,同时要求循环体至少执行一次的场景中

int res=0;
for(int i=1;i<=100;i++){    res+=i;
}
System.out.println(res);

自定义步长值

int res=0;
for(int i=1;i<101;i=i+2) { //2就是步长值    res+=i;
}
System.out.println("1+3+5+7+...+99="+res);

省略表达式的写法

int k=1;
for(;k<101;k++) res+=k;
int k=1;
for(;k<101;) res+=k++;
int k=1;
for(;;) {res+=k++;if(k>100) break;
}

练习题

1、计算输入数据的阶乘值

System.out.println("请输入整数:");
Scanner sc=new Scanner(System.in);
int kk=sc.nextInt();
int res=1;
for(int k=1;k<=kk;k++){res*=k;//res=res*k
}
System.out.println(kk+"!="+res);

2、互换两个数的值(不允许使用中间变量)

  • 建立临时变量

  • 加减运算交换

  • 位运算方法

//第一个数num1=10 第二个数为num2=6
num1=num1+num2; //num1=16 num2=6
num2=num1-num2; //num2=10 mum1=16
num1=num1-num2; //num1=6 num2=10

String的操作

基础操作,后续在面向对象章节细讲

String 类的构造方法很多。可以通过初始化一个字符串,或者字符数组,或者字节数组等等来创建一个String 对象

常见方法

  • length() 获取字符个数 强调:是方法不是属性

  • substring(int)/(int,int) 求指定范围的字符串子串

  • charAt(int index):char

  • indexOf(int ch) 和 indexOf(int ch, int fromIndex) 方法

  • equals(String):boolean比较两个字符串的内容是否相等

  • trim()

考试常见方法:intern() 方法

String s1="ab"+"c";
String s2="abc";
System.out.println(s1==s2); //true

字符串常量拼接,在方法区的常量池中完成

String s0="ab";
String s1=s0+"c";
String s2="abc";
System.out.println(s1==s2); //false

String类型的拼接是通过StringBuilder类中的append方法实现的,然后返回toString的结果。是在堆中的新对象

字符串转数字

使用Scanner读取键盘录入数据

  • next():String 当光标扫描到第一个分隔符(默认是空格)停止扫描,会创建一个String类的对象,里面存储的就是扫描的内容(不包含空格分隔符)返回创建的String对象的引用给n
Scanner cin=new Scanner(System.in);
while (true) {String n = cin.next();if("exit".equals(n))break;System.out.println(n + 'A');
}
cin.close();
  • nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行。所以它和next()的区别就是它没有分隔符,直接扫描全部的键盘输入内容,并创建对象进行将其引用返回

  • 目标类型名.parse类型(String)

    • Integer.parsetInt(String):int

    • Double.parsetDouble(String):double

数字转字符串

“”+任意类型数据

字符串新方法

  • String.repeat(int) 根据 int 参数的值重复 String

  • String.lines() 拆分由其行终止符在其上调用的 String ,并返回由这些行终止符划分的

  • Strings Stream 具体使用以后再说

  • String.strip()String.stripLeading() String.stripTrailing() 去除字符串的空格

  • String.isBlank() 判断String是否为空或仅包含空格字符

具体实现原理

在JDK1.8以前采用char[]实现,现在采用byte[]的方式实现。可以减少字符串占用的内存,同时减少垃圾回收次数。

实际开发中单字节的字符使用频率远高于双字节的。在JDK8+版本中Java会根据字符串内容自动设置为相应的编码,要么 Latin-1要么UTF16,中文是两个字节,纯英文是一个字节。

不使用UTF-8编码字符集是因为UTF-8是变长编码的,有1、2、3、4字节的不同情况,所以对于String随机访问操作很不方便

UTF-16也是变长编码,是使用2或者4个字节存储字符。对于Unicode编码在0-FFFF之间的字符使用两个字节存储,而10000-10FFFF之间的字符使用4个字节。但是Java中一个char就是2个字节,同时String的各种操作都是以Java字符为单位的,所以UTF-16在Java中可以看作一个定长的编码

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

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

相关文章

Appium 安卓环境的配置

目录 前言&#xff1a; 环境准备 写个脚本玩玩 前言&#xff1a; 在使用Appium进行安卓自动化测试之前&#xff0c;需要配置相应的安卓环境。 环境准备 为了避免走弯路&#xff0c;我们先要确保三点&#xff1a; Android SDK API > 17 (Additional features require …

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅&#xff0c;我们会大量讨论Kafka中的术语&#xff0c;那么就让我们先来了解一下这些核心概念 消息(Message)&#xff1a; kafka的数据单元称为消息&#xff0c;相当于DB里的一行数据或一条记录 消息由字节数组组成 批次&#xff1a; 生产者组一批数据再向kafka推送…

C++编程(四) —— OOP

文章目录 前言一、this指针二、构造和析构三、深拷贝浅拷贝浅拷贝深拷贝 编程实践 前言 什么是OOP思想&#xff1f; OOP语言的四大特征&#xff1a; 抽象&#xff0c;封装/隐藏&#xff0c;继承&#xff0c;多态 一、this指针 this指针》类》很多对象 一套成员方法是如何处…

深入学习 Redis - 深挖经典数据类型之 string

目录 前言 一、string 类型 1.1、操作命令 set / get &#xff08;设置 / 获取&#xff09; mset / mget&#xff08;批量 > 设置 / 获取&#xff09; setnx / setex / psetex &#xff08;设置时指定不同方式&#xff09; incr / incrby / decr / decrby/ incrbyfloat…

船舶中压配电板应用弧光保护,可解决母排故障短路问题,对于提高船舶电站的安全性、稳定性,降低经济损失具有重要意义。-安科瑞黄安南

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 车间布局优化2. 基于GA的布局优化模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 车间布局优化 车间设施布置的规划一直是工业工程领域不断研究和探索的内容&am…

JavaWeb(5)——HTML、CSS、JS 快速入门

一、JavaScript 对象 二、JavaScript BOM对象 和 DOM对象 关于BOM主要对 Window 和 location 进行说明&#xff1a; 三、JavaScript 事件监听 事件绑定 常见事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

谷歌Bard:ChatGPT之外的第三选择

2023年年初&#xff0c;为了对应ChatGPT方面的压力&#xff0c;谷歌Bard仓促上线&#xff0c;此后便进入了低调前行。目前为止已经迭代了9个版本&#xff0c;也就是在近期的版本更新中支持了中文&#xff08;简体/繁体&#xff09;语言&#xff0c;对国内用户可以说又友好了一步…

物理层——数据通信基础知识

1.典型的数据通信模型 2.数据通信的相关术语 2.1 三种通讯方式 2.2 数据传输方式 2.3 常用编码方式&#xff08;数字信号&#xff09; 曼彻斯特编码 将一个码元分成两个相等的间隔&#xff1b; 前一个间隔为 低电平 &#xff0c;后一个间隔为 高电平 表示码元1&#xff1b; 码…

el-dialog 添加loading;avue-form 表单插槽

效果: 第一步&#xff1a;custom-class"publishDialog" 新起一个类名 <el-dialog title"发布配置" custom-class"publishDialog" :visible.sync"publishDialogVisible" width"800px" :append-to-body"true":b…

babel兼容低版本游览器

文章目录 1. webpack项目的搭建2. babel 命令行使用3. babel的预设与编译器流程4. babel项目中配置4.1 babel-loader与插件的使用4.2 babel-preset使用 5. 游览器兼容性使用5.1 browserslist工具与编写规则5.2 browserslist配置5.3 优化babel的配置文件 6. polyfill6.1 useBuil…

Flutter——最详细(NavigationRail)使用教程

NavigationRail 简介 一个 Material Design 小部件&#xff0c;旨在显示在应用程序的左侧或右侧&#xff0c;以便在少量视图&#xff08;通常在三到五个视图之间&#xff09;之间导航。 使用场景&#xff1a; 通过Row属性&#xff0c;左侧或右侧菜单栏按钮 属性作用onDestinati…

Halcon机器视觉-15种常用缺陷检测实例

一、Halcon 15种常用缺陷检测实例分享 缺陷检测是一种通过计算机视觉技术来检测产品制造过程中的缺陷的方法。该技术可以检测出产品表面的缺陷&#xff0c;如裂纹、凹陷、划痕、气泡等&#xff0c;并且可以实时监测和诊断制造过程中的问题。在制造业中&#xff0c;机器视觉缺陷…

GRE实验

题目参考&#xff1a; 实验步骤&#xff1a; 第一步&#xff1a;地址规划拓扑设计&#xff0c;配置IP地址 R1配置&#xff1a; <Huawei>system-view [Huawei]sy R1 [R1]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip address 192.168.1.1 24 [R1-GigabitEthernet0/0/1]in…

智能电表数据采集器

智能电表数据采集器是一种用于采集智能电表数据的设备&#xff0c;它可以将智能电表的数据传输到远程服务器上&#xff0c;以便进行数据分析和监控。智能电表数据采集器的主要功能是采集智能电表的实时数据&#xff0c;并将其发送到远程服务器上&#xff0c;从而实现对智能电表…

【windows测试通过】关于Godot导入外部音频文件的问题

file.open(filepath, file.READ) var buffer file.get_buffer(file.get_len()) #put data into audiostreamsample var stream AudioStreamSample.new() stream.data buffer 代码给出&#xff0c;还没有测试过。(godot3.2测试未通过&#xff09; 在运行时轻松加载外部音频…

业务安全分析第19期 | 今年暑假,博物馆的门票为什么抢不到?

目录 “黄牛”&#xff1a;加价代预约、加价售票、兜售野导游套餐 “黄牛”倒票带来的危害 “黄牛”为什么能够抢到票 博物馆与“黄牛”的门票攻防 “黄牛”使用的作弊软件有什么特征 技术上防范“黄牛”的作弊软件抢票 遏制“黄牛”倒票给博物馆带来的收益 随着暑期参观…

[nlp] GPT

一、联合训练任务 1.1 NTP(Next Token Prediction) gpt预训练的一个目标函数有两个,第一个是基础的下一个词预测任务,选择一个K窗口,将窗口中的K个词的embedding作为条件去预测下一个词。 1.2 TC(Text Classification) 第二个是一个分类任务,一段话给一个标签,然后去预…

离线数据仓库

一、数据仓库 1.数据仓库的概念 1)数据仓库的特点: 面向主题的:对数据进行整合、分析和归类的抽象集成的:将不同数据源的数据(业务数据、外部系统数据、埋点日志)经过统一编码、规范命名、字段类型转换等操作,整合到仓库相对稳定的:根据业务场景实时更新、一般会被长…

VIM文本如何复制到系统剪切板?

今天从vim上用鼠标复制代码&#xff0c;发现把VIM当中的行号也复制进去了&#xff0c;就很麻烦&#xff0c;于是简单研究了下&#xff0c;如果vim支持clipboard的话就比较好办&#xff0c;具体支持与否&#xff0c;使用命令查看&#xff1a; vim --version | grep "clipb…