知识点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. 数组一旦初始化(不管是静态初始化,还是动态初始化),其长度就是确定的。
* 数组一旦初始化(不管是静态初始化,还是动态初始化),其长度就是不可变的。
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的配置和基本使用