Java(五)

知识点1:while(true)、for(;😉

/*
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。

最简单“无限” 循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,
需要根据循环体内部某些条件,来控制循环的结束。

*/
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(;;){
			System.out.println("请输入一个整数:(输入0时,结束)");
			int num = scan.nextInt();

			if(num == 0){
				break;
			}else if(num > 0){
				positiveNumber++;
			}else{
				negativeNumber++;
			}
		}
		
		System.out.println("正数的个数为:" + positiveNumber);
		System.out.println("负数的个数为:" + negativeNumber);
	}
}
  • 退出循环结构的两种方式:
    • 循环条件返回为false
    • 在循环体中执行break

知识点2:嵌套循环

  • 理解
/*

测试嵌套循环

1. 将一个循环结构A声明在另一个循环结构B的循环体中,则构成了嵌套循环。
   A:内层循环
   B:外层循环

2. 技巧:外层循环控制行数,内层循环控制列数

3. 如果外层循环循环次数为m次,内层循环循环次数为n次。则可以理解为内层循环的循环体要执行m * n次
*/
  • 基本使用
class ForForTest {
	public static void main(String[] args) {
		//******
		for(int i = 1;i <= 6;i++){
			System.out.print("*");
		}

		System.out.println();
		System.out.println();


		/*

		******
		******
		******
		******
		******

		*/
		for(int j = 1;j <= 5;j++){
			for(int i = 1;i <= 6;i++){
				System.out.print("*");
			}

			System.out.println();

		}

		/*
				i		j
		*		1		1
		**		2		2	
		***		3		3
		****	4		4
		*****	5		5

		*/
		for(int i = 1;i <= 5;i++){
			for(int j = 1;j <= i;j++){
				System.out.print("*");
			}
			System.out.println();
		}

		/*
					i		j(*的个数)			j = 5 - i;
		****		1		4
		***			2		3
		**			3		2
		*			4		1

		*/
		for(int i = 1;i <= 4;i++){
			for(int j = 1;j <= 5 - i;j++){
				System.out.print("*");
			}
			System.out.println();
		}

		/*

*
**
***
****
*****

****
***
**
*
		
		*/
		//如上的做法

/*

上半部分		i		j(-)		k(*)
----*			1		4			1
---* *			2		3			2
--* * *			3		2			3
-* * * *		4		1			4
* * * * *		5		0			5

下半部分
 * * * * 
  * * * 
   * * 
    * 

*/		//上半部分
		for(int i = 1;i <= 5;i++){
			for(int j = 1;j <= 5 - i;j++){
				System.out.print(" ");
			}
			for(int k = 1;k <= i;k++){
				System.out.print("* ");
			}
			System.out.println();
		}

	}
}
  • 九九乘法表
/*
九九乘法表的实现:
1 * 1 = 1
1 * 2 = 2  2 * 2 = 4
...

1 * 9 = 9     ...   9 * 9 = 81


*/
class NineNineTable {
	public static void main(String[] args) {
		for(int i = 1;i <= 9;i++){
			
			for(int j = 1;j <= i;j++){
				
				System.out.print(j + " * " + i + " = " + (j * i) +"  ");
			}
			
			System.out.println();
		}
	}
}

  • 质数输出

/*
遍历100000以内所有的质数。

体会一下不同的算法,执行效率的差别。

*/
class PrimeNumberTest1 {
	public static void main(String[] args) {
		
		//获取系统当前的毫秒数
		long start = System.currentTimeMillis();

		boolean isFlag = true;
		int count = 0;//记录质数的个数
		for(int i = 2;i <= 100000;i++){
			
			//优化2:修改判断的临界值
			for(int j = 2;j <= Math.sqrt(i);j++){//for(int j = 2;j < i;j++){//让j被i除
				
				if(i % j == 0){
					isFlag = false;
					break;//优化1:主要针对的是非质数
				}

			}

			//判断isFlag是否曾经被赋值为false
			if(isFlag){//if(isFlag == true){
				//System.out.println(i);
				count++;
			}

			//重置isFlag
			isFlag = true;
		}
		System.out.println("质数的个数为:" + count);
		//获取系统当前的毫秒数
		long end = System.currentTimeMillis();
		
		System.out.println("花费的总时间为(毫秒):" + (end - start));//17683 - 1930 - 736
		//13017 - 12

		//leetcode   acm  力扣
	}
}

知识点3:break、continue

/*
break和continue的使用

			使用场景			在循环结构中使用的作用:			相同点
break		① switch-case
			② 循环结构			结束当前循环结构					在其后,不能声明执行语句。否则,编译错误

continue	① 循环结构			结束当次循环结构					在其后,不能声明执行语句。否则,编译错误

*/
class BreakContinueTest {
	public static void main(String[] args) {
		
		for(int i = 1;i <= 10;i++){
			
			if(i % 4 == 0){
				//break;//结束当前循环
				continue;//结束当次循环

				//是否可以声明执行语句:No!
				//System.out.println("今晚迪丽热巴要约我。。。。");
			}

			System.out.print(i);
		}
		
		System.out.println("#####################");
		
		
		//##################################
		label:for(int i = 1;i <= 4;i++){
			
			for(int j = 1;j <= 10;j++){
				
				if(j % 4 == 0){
					//break;
					//continue;

					//break label;
					continue label;
				}

				System.out.print(j);

			}
			System.out.println();

		}
	}
}

知识点4:数组及一维数组

1.数组的理解

一、数组的理解
 * 1. 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,
 *    并通过编号的方式对这些数据进行统一管理。
 * 2. 数组相关的名称:
 *   > 数组的元素
 *   > 数组名
 *   > 数组的角标、下标、下角标
 *   > 数组的长度
 
 * 3. 数组一旦初始化(不管是静态初始化,还是动态初始化),其长度就是确定的。
 *    数组一旦初始化(不管是静态初始化,还是动态初始化),其长度就是不可变的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYviEJ4J-1625666894587)(assets/1595839782496.png)]

2. 一维数组的使用

public static void main(String[] args) {
//        3.1 数组的声明和初始化
        //格式:数据类型 变量名  = 变量值
        int num = 10;
        String str = "hello";
        //声明
        String[] foods;
        //初始化
        foods = new String[]{"拌海蜇","龙须菜","炝冬笋"};
        //声明并初始化
        //静态初始化:数组变量的赋值操作与数组元素的赋值操作同时进行。
        String[] names = new String[]{"李金鑫","刘志引","徐得三","武晋守"};
        //可以简写为:String[] names = {"李金鑫","刘志引","徐得三","武晋守"};//类型推断

        //动态初始化:数组变量的赋值操作与数组元素的赋值操作分开进行。
        double[] prices = new double[5];

        //错误的
//        int[] arr = new int[5]{1,2,3,4,5};
//        int[5] arr = new int[5];

//        3.2 如何调用数组的元素:通过角标的方式进行调用
        //角标从 0 开始,到数组的长度 - 1结束。
        prices[0] = 12.3;
        prices[1] = 23.4;
//        prices[5] = 34.5;//报ArrayIndexOutOfBoundsException异常。
        System.out.println(prices[0]);
        System.out.println(names[0]);

//        3.3 如何获取数组的长度
        //属性:length
        System.out.println(prices.length);//5
        System.out.println(names.length);//4

//        3.4 如何遍历数组元素
        for(int i = 0;i < names.length;i++){
            System.out.println(names[i]);

        }
 /* 3. 一维数组的使用
 * // 3.5 数组元素的默认初始化值 (以动态初始化为例)
 *     整型数组,元素的默认初始化值为:0
 *     浮点型数组,元素的默认初始化值为:0.0
 *     字符型数组,元素的默认初始化值为:0
 *     boolean型数组,元素的默认初始化值为:false
 *
 *     引用数组类型数组,元素的默认初始化值为:null
 */
public class ArrayTest1 {
    public static void main(String[] args) {
        // 3.5 数组元素的默认初始化值
        double[] prices = new double[5];
        prices[0] = 12.3;
        prices[1] = 24.4;
        System.out.println(prices[2]);//0.0

        int[] arr = new int[]{1,2,3,4};
        System.out.println(arr[0]);//1

        float[] arr1 = new float[10];
        System.out.println(arr1[4]);

        System.out.println("###################");
        long[] arr2 = new long[10];
        System.out.println(arr2[0]);

        char[] arr3 = new char[10];
        System.out.println("----" + arr3[0] + "*****");

        if(arr3[0] == 0){
            System.out.println("你好!");
        }

        if(arr3[0] == ' '){
            System.out.println("萨瓦迪卡!");
        }

        if(arr3[0] == '0'){
            System.out.println("hi!");
        }

        System.out.println("####################");
        boolean[] arr4 = new boolean[10];
        System.out.println(arr4[0]);

        String[] arr5 = new String[10];
        System.out.println(arr5[1]);//null

       
    }
}
  • 内存解析

    • jvm的内存结构主要部分

在这里插入图片描述

  • 一维数组的内存解析举例

在这里插入图片描述

补充:IDEA的配置和基本使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值