循环结构:
for:知道次数,或者有规律
求 1 ~ 100和
求 20!
求 3/5 ..
执行顺序:
a. int i = 1 ->进入循环的条件
b. i < 100 -> i等于这个数的时候满不满足第二个条件
c.满足则执行大括号中的代码
d.最后i++,i执行到下一个数,然后在回到第二个条件中进行判断
while: 不知道次数,或者没有规律
语义环境: 当...就...
do - while:先执行一次,再做循环
语义环境:做..直到..
特殊情况: 第一次不符合需求时,将不进入循环
eg1:
package loop;
/*
-
For循环
/
public class Demo01For {
public static void main(String[] args) {
// 求 1 ~ 100的和
int sum = 0;
/
* sum += 1; sum += 2; sum += 3;
*/
int i = 1;//变量的初始值
//i <= 100 -> 进入循环的条件,可以不给,不给会变成死循环
// i++ -> 步长 变化的规律
for(; i <= 100; i++) {
//for循环体
sum += i;
}
System.out.println(i);
System.out.println(sum);/* * for循环的执行顺序 * 1. int i = 1 -> 初始值只执行一次 * 2. i <= 100 -> 当前数字符合需求则进入循环体 * 3. 运行循环体中代码 * 4. i++ */
}
}
eg2:
package loop;
/*
-
While循环
*/
public class Demo02While {
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 100; i++) {
//for循环体
sum += i;
}int j = 0; while(j <= 100) { sum += j; j++; } /* * 从 1开始叠加,叠加到多少超出500 */ int sum1 = 0; int z = 1;//要叠加的数,会变得 while(sum1 <= 500) { sum1 += z; z++; } System.out.println("z的次数:" + z); System.out.println("sum的值:" + sum1);
}
}
eg3:
package loop;
/*
-
do - while
*/
public class Demo05DoWhile {
public static void main(String[] args) {
int a = 10;
//不满足条件,一次都不执行
while( a > 10) {
a–;
}//循环之前,必须执行一次 do { a--; }while( a > 10);
}
}
eg4:
package loop;
import java.util.Scanner;
/*
-
程序内置一个 1 到 1000 之间的数字作为猜测的结果,
-
由用户猜测此数字。 -> Scanner a
-
用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;
-
if判断 -> num 和 a
-
直到用户猜对结果,则提示游戏结束。
-
while()
-
用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。
*/
public class Demo03Guess {
public static void main(String[] args) {
int num = 333;
Scanner console = new Scanner(System.in);
int a = -1;//给一个不影响程序判断的数
while(num != a) {
System.out.println(“请输入:”);
//1.用户猜数字
a = console.nextInt();
//1.5 提前退出游戏
if(a == 0) {
System.out.println(“退出游戏”);
break;
}
//2.比较
if(num > a) {
System.out.println(“太小了”);
}else if(num < a) {
System.out.println(“太大了”);
}else {
System.out.println(“猜对了”);
}
}/** * 伪代码 * 1.猜数字 * int a = "要猜的数字"; * 2.比较 * if(a > num){ * 得出结果 * }else if(a < num){ * 得出结果 * } */
}
}
eg5:
package loop;
import java.util.Scanner;
/*
-
程序执行前,先猜一次
-
程序内置一个 1 到 1000 之间的数字作为猜测的结果,
-
由用户猜测此数字。 -> Scanner a
-
用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;
-
if判断 -> num 和 a
-
直到用户猜对结果,则提示游戏结束。
-
while()
-
用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。
*/
public class Demo04Guess2 {
public static void main(String[] args) {
int num = 333;
Scanner console = new Scanner(System.in);
int a;
do{
System.out.println(“请输入:”);
//1.用户猜数字
a = console.nextInt();
//1.5 提前退出游戏
if(a == 0) {
System.out.println(“退出游戏”);
break;
}
//2.比较
if(num > a) {
System.out.println(“太小了”);
}else if(num < a) {
System.out.println(“太大了”);
}else {
System.out.println(“猜对了”);
}
}while(a != num);/** * 伪代码 * 1.猜数字 * int a = "要猜的数字"; * 2.比较 * if(a > num){ * 得出结果 * }else if(a < num){ * 得出结果 * } */
}
}
eg6:
package loop;
/*
-
循环中的关键词:break
/
public class Demo06Loop {
public static void main(String[] args) {
int a = 0;
//循环可以嵌套
x:for(int i = 0; i < 5; i++) {
y:for(int j = 0; j < 3; j++) {
System.out.println(a++ + “–”);
/
if( j == 1) {
//结束本层循环
//外层 i -> 0 ~ 4
//内层j -> 0 和 1
break;
}
*/
if( j == 2) {
break x;
}} }
}
}
eg7:
package loop;
/*
- 循环中的关键词:continue
*/
public class Demo07Lopp {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 3; j++) {
if( j == 1) {
continue;//结束本次循环,继续下一次
}
System.out.println(“循环的 i = " + i +”,循环的j = " + j);
}
}
}
}
eg8:
package loop;
/*
-
九九乘法表
/
public class Demo08Work {
public static void main(String[] args) {
for(int i = 1; i < 10; i++) {
//行有几行 列就有几列
for(int j = 1; j <= i ; j++) {
System.out.print(j + "" + i + “=” + (j*i) + “\t”);
}
System.out.println();
}/* * 转义字符 */ System.out.print("/t");//制表符 System.out.print("/n");//ln -> 换行 System.out.print("/r");//换行 System.out.print("//");//表示/本身
}
}
定义:10个随机整数,并且打印出来
int a1,a2,a3…a10;
a1 = (int)(Math.random() *10)
a2 = (int)(Math.random() *10)
a3 = (int)(Math.random() *10)
a4 = (int)(Math.random() *10)
System.out.println(a1)
System.out.println(a2)
System.out.println(a3)
数组:
概念:
1) 数组就是批量定义变量的方式
2) 数组相当于是个容器,装的是相同类型的若干数据
3) 数组属于引用数类型
定义数组:
数组长度一旦确定,就不可修改
声明数组:
数据类型[] + 引用名
int[] array;
double[] d;
char[] c;
boolean[] b;
初始化:
方式一:静态赋值
ps:int[] arr1 = {1,2,3,4,5};
特点:
只能在声明的同时初始化
方式二:静态赋值
ps:int[] arr2 = new int[] {1,2,3,4};
特点:
再次赋值时也可以使用
静态赋值的特点:
数组一旦初始化,就已经确定了数组的长度(元素个数)和元素的值
动态赋值:
ps:int[] arr3 = new int[5];
特点:
1)定义数组时只是确定了数组的长度(元素的个数),但是没有初始化元素
2)元素有默认初始值,都是0,但是0的表现形式不一样
int类型 -> 0
double类型 -> 0.0
boollean类型 -> false
char类型 -> '\u0000'
获取数组元素:
通过下标获取数组元素,下标都是从0开始
数组下标范围:
0 ~ 数组名.length - 1
数组的属性: length
数组长度 = 数组个数
数组的迭代/遍历
依次获取数组中的元素
可能出现的异常:
ArrayIndexOutOfBoundsException:数组下标越界异常
eg1:
package array;
import java.util.Arrays;
/*
-
数组的定义
*/
public class Demo01Array {
public static void main(String[] args) {
//初始化方式
//方式一:静态赋值(静态初始化)
int[] arr1 = {1,2,3,4,5};//下标 0 ~ 4 -> 5 - 1 -> length - 1
//arr1 = {1,2,3,4,5};//编译报错
//方式二:静态赋值(静态初始化)
int[] arr2 = new int[] {1,2,3,4};
arr2 = new int[] {2,3,4};
//方式三:动态赋值(动态初始化)
int[] arr3 = new int[5];//{0,0,0,0,0}System.out.println(arr1);//[I@532760d8 -> 哈希值 -> 地址值 //获取数组中的元素 System.out.println(arr1[1]); //修改数组中的元素 arr1[4] = 10; arr1[4] += 10; //数组的属性 -> length //获取数组的长度(length) = 个数 System.out.println(arr1.length);//5 //数组下标范围 - > arr1 //需求: 给 arr3赋随机值 -> (int)(Math.random() * 1000) -> [0,1) //数组的遍历/迭代 for(int i = 0; i < arr3.length; i++) { arr3[i] = (int)(Math.random() * 100); System.out.println(arr3[i]); } //arr3 = null; //NullPointerException -> 空指针异常 //System.out.println(arr3[0]); System.out.println(arr1);//[I@532760d8 System.out.println(Arrays.toString(arr1));
}
}
eg2:
package array;
import java.util.Arrays;
/*
-
给一个长度为10的数组,求数组的最大值,最小值,平均值
*/
public class Demo02Work {
public static void main(String[] args) {
int[] arr = new int[10];
//数组的遍历/迭代
for(int i = 0; i< arr.length; i++) {
arr[i] = (int)(Math.random() * 100);
}
System.out.println(Arrays.toString(arr));//求最大值 int max = -1; for(int i = 0; i < arr.length; i++) { if(arr[i] > max) { //赋值 -> 从右往左 max = arr[i]; } } System.out.println(max); //求最小值 int min = 101; for(int i = 0; i < arr.length; i++) { if(arr[i] < min) { min = arr[i]; } } System.out.println(min); //求平均值 int sum = 0; for(int i = 0; i < arr.length; i++) { sum = sum + arr[i]; } //总数除以数组的长度 int avg = sum / arr.length; System.out.println(avg);
}
}
class hi{
}
eg3:
package array;
import java.util.Arrays;
/*
-
数组的扩容 - 求数组元素的最大值放在最后一位
*/
public class Demo03Copy {
public static void main(String[] args) {
int a = 10;int[] arr = new int[10]; //数组的遍历/迭代 for(int i = 0; i< arr.length; i++) { arr[i] = (int)(Math.random() * 100); } System.out.println(Arrays.toString(arr)); //求最大值 int max = -1; for(int i = 0; i < arr.length; i++) { if(arr[i] > max) { //赋值 -> 从右往左 max = arr[i]; } } System.out.println(max); //把数组最大值放入数组的最后一位 int[] arr2 = new int[11]; //把arr的值赋值给arr2 - 数组的遍历 for(int i = 0; i < arr.length; i++) { arr2[i] = arr[i]; } System.out.println(Arrays.toString(arr2)); //把最大值添加到arr2数组的末尾 arr2[arr2.length -1] = max; System.out.println(Arrays.toString(arr2)); //把arr2 赋值给 arr arr = arr2; System.out.println(Arrays.toString(arr));
}
}
eg4:
package array;
import java.util.Arrays;
/*
-
扩容方法一
*/
public class Demo04Copy {
public static void main(String[] args) {
int[] arr = new int[10];
//数组的遍历/迭代
for(int i = 0; i< arr.length; i++) {
arr[i] = (int)(Math.random() * 100);
}
System.out.println(Arrays.toString(arr));//求最大值 int max = -1; for(int i = 0; i < arr.length; i++) { if(arr[i] > max) { //赋值 -> 从右往左 max = arr[i]; } } System.out.println(max); // 把最大值赋值到数组的最后位置 //可做缩容 和 扩容 arr = Arrays.copyOf(arr, arr.length - 3); System.out.println(Arrays.toString(arr)); //把max 加入到 数组最后一位 arr[arr.length - 1] = max; System.out.println(Arrays.toString(arr));
}
}
eg5:
package array;
import java.util.Arrays;
/*
-
扩容方法二
*/
public class Demo05Copy2 {
public static void main(String[] args) {
int[] arr = new int[10];
//数组的遍历/迭代
for(int i = 0; i< arr.length; i++) {
arr[i] = (int)(Math.random() * 100);
}
System.out.println(Arrays.toString(arr));//求最大值 int max = -1; for(int i = 0; i < arr.length; i++) { if(arr[i] > max) { //赋值 -> 从右往左 max = arr[i]; } } System.out.println(max); // 把最大值赋值到数组的最后位置 int[] arr2 = new int[11]; /** * 参数: * 1. 原数组,要复制的数组 * 2. 从原数组中下标为几的位置开始复制 * 3. 复制到的目标数组 * 4. 存到目标数组中的下标为几的位置 * 5. 数组元素的个数 */ System.arraycopy(arr, 0, arr2, 0, arr.length); System.out.println(Arrays.toString(arr2)); //把最大值放到arr2数组的最后一位 arr2[arr2.length - 1] = max; //将arr2数组赋值给arr arr = arr2; System.out.println(Arrays.toString(arr));
}
}
JVM内存空间:
方法区: 类相关的信息
栈:局部变量/临时变量
堆:引用类型的真正数据
类加载:
将字节码文件(.class文件)中的类相关的信息读到JVM中
工具: 类加载器