if语句三种格式
if(条件表达式){
执行表达式;
}
if(条件表达式){
执行表达式1;
}
else{
执行表达式2;
}
if(条件表达式){
执行表达式1;
}
else if{
执行表达式2;
}
... ...
else{
执行表达式n;
}
具体举例
class IfTest{
public static void main(String[] args){
//格式1
int hearBeats = 78;
if(hearBeats < 60 || hearBeats > 100){
System.out.println("需要进一步检查!");
}
System.out.println("检查结束");
//格式2
int age = 23;
if(age < 18){
System.out.println("你不能结婚");
}else{
System.out.println("你可以结婚");
}
//格式3
if(age < 0){
System.out.println("您输入数据非法!");
}else if(age < 18){
System.out.println("青年时期");
}else if(age < 35){
System.out.println("青壮年时期");
}else if(]age < 60){
System.out.println("中年时期");
}else{
System.out.println("老年时期");
}
}
}
switch(表达式){
case 常量1:
语句1;
//break;
case 常量2:
语句2;
//break;
... ...
case 常量N:
语句N ;
//break;
default;
语句;
//break;
}
例子
String season = "summer";
switch(season){
case"spring":
System.out.println("春天");
break;
case"summer":
System.out.println("夏天");
break;
case"autumn":
System.out.println("秋天");
break;
case"winter":
System.out.println("冬天");
break;
default:
System.out.println("季节输入有误!");
break;
}
关于break例题
//从键盘输入2019年的“month”和“day”,要求通过程序输入的日期为2019年的第几天
import java.util.Scanner;
class SwitchCaseTest2{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入2019年month:");
int month = scanner.nextInt();
System.out.println("请输入2019年day:");
int day = scanner.nextInt();
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
sumDays += 28;
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(sumDays);
}
}
说明break在switch-case中是可选的
注:JDK1.5提供了for-each循环,方便地遍历集合、数组元素。
循环结构的4个要素
① 初始化条件
② 循环条件 (条件是boolean类型)
③ 循环体
④ 迭代条件
for循环的结构
for(①;②;④){
③
}
执行过程:① -> ② -> ③ -> ④ -> ② -> ③ -> ④ … -> ②
for循环圆括号内两个分号是必须的,初始化语句、循环条件、迭代语句都是可以省略的,如果省略了循环条件,则这个循环条件默认为true,将会产生一个死循环。
public class Text09 {
public static void main(String[] args) {
//省略了for循环的三个部分,循环条件一直是true
for (;;) {
System.out.println(123);
}
}
输出
123
123
…
使用for循环时,还可以把初始化条件定义在循环体外,把循环迭代语句放在循环体内,这种方式类似下面的while循环。
public class Text10 {
public static void main(String[] args) {
int i = 0;
for (;i<3;) {
System.out.println(i);
i++;
}
System.out.println("循环结束");
}
输出:
0
1
2
循环结束
for循环例题
/*
题目 :输入两个正整数m和n,求其最大公约数和最小公倍数
比如:12和20的最大公约数是4,最小公倍数是60
*/
import java.util.Scanner;
class ForTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int m = scan.nextInt();
int m = scan.nextInt();
System.out.println("请输入第一个整数:");
int m = scan.nextInt();
//获取两个数的最大公约数
int min = (m <= n)? m : n;
for(int i = min;i >= 1;i--){
if(m % i == 0&& n %i == 0){
System.out.prinyln("最大公约数为:" + i);
break;//一旦在循环中执行到break,就跳出循环
}
}
//获取两个数的最小公倍数
int max = (m >=n)? m : n;
for(int i = max;i <= n*m;i++){
if(m % i == 0&& n %i == 0){
System.out.println("最小公倍数为:");
break;
}
}
}
/*
输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身
例如:153=1*1*1+3*3*3+5*5*5
*/
import java.util.Scanner;
class ForTest2{
public static void main(String[] args){
int a,b,c,s;
for(i = 0;i <= 100;i++){
c=i%10;
b=(i/10)%10;
a=i/100;
if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==i)
}
System.out.println(""+i);
}
}
① 初始化条件
② 循环条件 (条件是boolean类型)
③ 循环体
④ 迭代条件
while循环结构
①
while(②){
③;
④;
}
执行过程:① -> ② -> ③ -> ④ -> ② -> ③ -> ④ … -> ②
说明
class WhileTest{
public static void main(String[] args){
//遍历100以内的所有偶数
int i = 1;
while(i <= 100){
if(i % 2 ==0){
System.out.println(i);
}
i++;
}
//出了while循环后,仍可以调用i(for循环和while循环的区别)
System.out.println(i);// i=101
}
}
① 初始化条件
② 循环条件 (条件是boolean类型)
③ 循环体
④ 迭代条件
do-while循环结构
①
do{
③;
④;
}while(②);
执行过程:① -> ③ -> ④ -> ② -> ③ -> ④ … -> ②
说明:
class DoWhileTest{
public static void main(String[] args){
//遍历100以内的偶数,并计算所有偶数的和以及偶数的个数
int num = 1;
int sum = 0;//记录总和
int count = 0;//记录个数
do{
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++;
}while(num <= 100);
}
System.out.println("总和为:"+sum);
System.out.println("个数为:"+count);
}
题目:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序
import java.util.Scanner;
class ForWhileTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int positiveNumber = 0; //记录正数的个数
int negativeNumber = 0; //记录负数的个数
while(true){
//for(;;)
int number = scan.nextInt();
//判断number的正负情况
if(number >0 ){
positiveNumber++;
}else if(number < 0){
negativeNumber++;
}else{
break;
}
}
System.out.println("输入正数有:"+positiveNumber);
System.out.println("输入负数有:"+negativeNumber);
}
}
说明:
注意
for循环和while、do-while有区别:while、do-while的循环迭代语句紧跟着循环体,如果循环体不能完全执行(如用continue结束本次循环),循环迭代语句是不会被执行的。但for循环的迭代语句并没有与循环体放在一起,因此不管是否使用continue语句来结束本次循环,迭代语句一样会获得执行。
嵌套循环的使用
嵌套循环联系
九九乘法表
1 × 1 = 1
2 × 1 = 2 2 × 2 = 4
…
9 × 1 = 9 … 9 × 9 = 81
class NineTable{
public static void main(String[] args) {
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(i+"×"+j+"="+(i*j));
}
System.out.println();
}
}
}
100以内所有质数
质数:素数,只能被1和他本身整除的自然数
class PrimeNumberTest{
//质数
p public static void main(String[] args) {
for(int i = 2;i <= 100;i++){
//遍历100以内的自然数
boolean isFlag = true;
for(int j = 2;j < i;j++) {
//和i做除法
if(i % j == 0) {
isFlag = false;
}
}
if(isFlag == true) {
System.out.println(i);
}
}
}
}
优化算法
public class PrimeNumberTest1 {
public static void main(String[] args) {
//获取当前时间距离1970-01-01 00:00:00的距离
long start = System.currentTimeMillis();
int count = 0;
for(int i = 2;i <= 10000;i++){
//遍历100以内的自然数
boolean isFlag = true;
for(int j = 2;j <= Math.sqrt(i);j++) {
//和i做除法
if(i % j == 0) {
isFlag = false;
break;//优化1:只对本身非质数的自然数有效
}
}
if(isFlag == true) {
//System.out.println(i);
count++;
}
}
//获取当前时间距离1970-01-01 00:00:00的距离
long end = System.currentTimeMillis();
System.out.println(count);
System.out.println(end-start);
}
}
具体实现步骤:
注意
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常,导致程序终止。
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入任意整数:");
int num = scan.nextInt();
System.out.println(num);
}
}
如何获取一个随机数
公式:[a,b] (int)(Math.random() * (b - a + 1) + a);
//获取10-90的随机数
int value = (int)(Math.random() * 90 + 10);
获取字符串对应位置的字符
String gender = scan.next();//输入字符串
char genderChar = gender.charAt(0);//获取所以为0位置上的字符,实际为输入字符串第一个字符
System.out.println(genderChar);//输出获取的字符
数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
数组是一种数据结构,用来储存多个数据,每个数组元素存放一个数据,通常可以通过数组元素的索引arr[i]
来访问数组元素。所有的数组元素需具有相同的数据类型,一个数组只能存储一种数据类型的数据。
数组的初始化
Java数组必须先初始化,然后才可以使用。初始化就是为数组的数组元素分配内存空间,并为每个数组元素分配初始值。
静态初始化
数组的初始化和数组元素的赋值同时进行,初始化时由程序员指定每个数组元素的初始值,由系统决定数组长度。
静态初始化的语法格式如下:
arrayName = new type[]{element1,element2,element3 ... }
其中type
就是数组元素的数据类型,此处的type
必须与定义数组变量时所使用的type
相同,也可以定义数组时所指定的type
的子类
动态初始化
数组的初始化和数组元素的赋值同时进行,初始化时程序员只指定数组长度,由系统为每个数组元素指定初始值。
动态初始化的语法格式如下:
arrayName = new type[length]
其中需要指定一个int的类型的length参数,这个参数指定了数组的长度,也就是可以容纳数组元素的个数。type
与静态初始化类似。
public static void main(String[] args) {
int[] a = {
1,2,3,4,5};//数组数据不能用投个变量名直接获取,需要用a[下标]
//数组定义
//第一种
// int[] b = {1,2,3,4,5};
//第二种
int b[] = {
1,2,3,4,5};//[]写在变量右侧是可以的,但一般不这么写
//第三种
int[] c = new int[5];//数组长度是固定的,需要声明
c[1] = 3;//数组第二个元素存入3
//第四种
int[] e = new int[]{
1,2,3,4,5};//可以先声明后初始化
int[] e1;//声明
e1 = new int[]{
1,2,3,4,5};//初始化
System.out.println(e1[3]);//访问数值元素
e1[3] = 8;//修改数组中元素内容
//访问数组如果超过数组中元素的内容,就会报数组下标越界的错误
// System.out.println(e1[10]);//数组e1中只有5个元素,下标为0-4,e[10]会导致越界
//数组e1的长度
System.out.println("e1数组长度:"+e1.length);
//数组最大访问下标
System.out.println(e1[e1.length-1]);
}
数组一旦初始化完成,数组的长度就确定了
public static void main (String[] args){
int num;//声明
num = 10;//初始化
int id = 1001;//声明+初始化
//一维数组的声明和初始化
int[] ids;//数组声明
//静态初始化
ids = new int[]{
1001,1002,1003,1004};//数组初始化
//动态初始化
String[] names = new String[5];
}
通过角标(索引)的方式调用:arr[i]
,数组的角标(索引)从0开始,到数组的长度-1结束
public static void main (String[] args){
String[] names = new String[5];
names[0] = "长城";
names[1] = "故宫";
names[2] = "天坛";
names[3] = "鸟巢";
names[4] = "圆明园";
// names[5] = "颐和园";//索引越界异常
char b = names[4].charAt(0);//提取字符串某一字符
System.out.println(b);
}
如果访问数组元素时指定值小于0,或大于等于数组长度,运行时会出现异常报错: java.lang.ArrayIndexOutOfBoundsException:N(数组索引越界异常),其中N就是我们试图访问的数组索引。
public static void main(String[] args) {
int[] a = {
1,2,3,4,5};
//获取数组长度,属性:length
System.out.println(a.length);//5
//如何遍历数组
for(int i = 0;i < a.length;i++){
System.out.println(a[i]);
}
}
使用foreach 循环(增强for循环)遍历数组和集合元素时,无需获得数组和集合的长度,无需根据索引来访问数组元素和集合元素,foreach 循环(增强for循环)自动遍历数组和集合的每个元素。
for(type variableName : array | collection){
//把冒号右边的数组遍历,遍历出来的元素放到定义的变量中
//自动迭代访问每个数组
}
foreach 循环(增强for循环)和普通循环的不同是 ,它无须循环条件,无需迭代语句,这些由系统完成,当每个数组元素都被迭代一次后,foreach 循环(增强for循环)自动结束。
使用foreach 循环(增强for循环)迭代数组元素时,并不能改变数组元素的值,因此不需要对foreach 循环(增强for循环)的循环变量进行赋值。
为数组的数组元素分配内存空间时,一旦分配完空间后,每个内存空间里存储的内容就是该数组元素的值,即使内存空间内存储的内容是空,也是有默认的值(null)
数组的元素是基本数据类型:
**数组的元素是引用类型(String):**null
注意:
不要同时使用静态初始化和动态初始化,也就是说,不要在进行数组初始化时,既指定数组长度也为每个数组元素分配初始值,错误代码如下
int[] arr = new int[5]{1,2,3,4,5}
public static void main(String[] args) {
//数组元素是整型
int[] arr = new int[4];
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
//数组元素是短整型
short[] arr1 = new short[4];//byte、long效果相同
for(int i = 0;i < arr1.length;i++){
System.out.print(arr1[i]+" ");
}
System.out.println();
//数组元素是浮点型
float[] arr2 = new float[4]; //double效果相同
for(int i = 0;i < arr2.length;i++){
System.out.print(arr2[i]+" ");
System.out.println();
//数组元素是浮点型
char[] arr3 = new char[4];
for(int i = 0;i < arr3.length;i++){
System.out.print(arr3[i]+" ");
}
System.out.println();
//数组元素是布尔型
boolean[] arr4 = new boolean[4];
for(int i = 0;i < arr4.length;i++){
System.out.print(arr4[i]+" ");
}
System.out.println();
//数组元素是引用数据类型
String[] arr5 = new String[4];
for(int i = 0;i < arr5.length;i++){
System.out.print(arr5[i]+" ");
}
}
输出:
0 0 0 0
0 0 0 0
0.0 0.0 0.0 0.0
false false false false
null null null null
**内存简化结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJSti7NG-1632707814354)(https://i.loli.net/2021/09/22/hdOAkjbwUgWVX58.png)]
一维数组的内存解析:
程序员进行程序开发时,不仅仅要停留在代码表面,而要深入底层的运行机制,才可以对程序的运行机制有更准确的把握。
看待一个数组时,要把数组看作两个部分:一部分是数组引用,也就是在代码中定义的数组变量;还有一部分是实际的数组对象,这部分是在堆内存里运行的,通常无法直接访问,只能通过数组引用变量来访问。
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf