Java语言基础 (二) break continue 嵌套循环 数组 方法定义及调用 return

第五天:
3) for结构:应用率最高,固定次数循环

 3.1)语法:
        //    1     2     3
		for(要素1;要素2;要素3){
			语句块/循环体 ----------反复执行的代码  4
		}
 3.2)执行过程:
		1243 243 243 243 243 243...2

int times=0;           //1
while(times<10){       //2
	System.out.println(“行动是成功的阶梯”);  //4
times++;        //3
}
执行过程:1243 243 243 243 243 2

    //1      //2      //3
for(int times=0; times<10; times++){
	System.out.println(“行动是成功的阶梯”);  //4
}
执行过程:1243 243 243 243 243 2
执行过程一样,但是for结构更简洁清晰

-----------------------------------------------

for(int times=0;times<6;times++){
        System.out.println("行动是成功的阶梯");
    }
    System.out.println("继续...");
    
    执行过程:
        times=0   true   输出
        times=1   true   输出
        times=2   true   输出
        times=3   true   输出
        times=4   true   输出
        times=5   true   输出
        times=6   false  for循环结束
        输出继续...
--------------------------------------------------
	//for中循环变量num的作用域----仅在当前的for中好使
	for(int num=1;num<=9;num++){
        System.out.println(num+"*9="+num*9);
    }
    
    for(int num=1;num<=9;num+=2){
        System.out.println(num+"*9="+num*9);
    }
    
    for(int num=9;num>=1;num--){
        System.out.println(num+"*9="+num*9);
    }

------------------------------------------------
	for(int num=1;num<=9;num++){
        if(num==5){   //在某种特定条件下,提前结束循环
            break;
        }
        System.out.println(num+"*9="+num*9);
    }
执行过程:
        num=1   1*9=9
        num=2   2*9=18
        num=3   3*9=27
        num=4   4*9=36
        num=5   break  跳出循环,循环结束
-------------------------------------------------- 
	//输出9的乘法表,跳过能被3整除的
    for(int num=1;num<=9;num++){
        if(num%3==0){
            continue; //跳过循环体中剩余语句而进入下一次循环
        }
        System.out.println(num+"*9="+num*9);
    }
执行过程:
      num=1  1*9=9
      num=2  2*9=18
      num=3
      num=4  4*9=36
      num=5  5*9=45
      num=6
      num=7  7*9=63
      num=8  8*9=72
      num=9
      num=10

或:
    //输出9的乘法表,只要不能被3整除的
    for(int num=1;num<=9;num++){
        if(num%3!=0){
            System.out.println(num+"*9="+num*9);
        }
    }
---------------------------------------------------
案例:

package day05;
import java.util.Scanner;
//随机加法运算器
public class Addition {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int score = 0;    //总分
        for(int i=1;i<=10;i++){   //10次      (1)23+56=?  算吧!  79   答对了
            int a = (int)(Math.random()*100);  //加数a
            int b = (int)(Math.random()*100);  //加数b
            int result = a+b;   //存和
            System.out.println("("+i+")"+a+"+"+b+"=?");   //1.出题

        System.out.println("算吧!---- 输入-1时提前结束循环");
        int answer = scan.nextInt();   //2.答题

        if(answer==-1) {
            break;
        }

        if(answer==result){     //3.判题
            System.out.println("答对了");
            score +=10;    //答对1题加10分     score=score+10;
        }else{
            System.out.println("答错了");
        }

    }
    System.out.println("总分为:"+score);
}
}

需求:
int score = 0; //总分
for(int i=1;i<=10;i++){ //10次
  //1)出题  2)答题  3)判题
}
System.out.println("总分为:"+score);

(1)25+65=?
算吧!
90
答对了

(2)67+35=?
算吧!
100
答错了
(3)25+65=?
算吧!
90
答对了
(4)67+35=?
算吧!
100
答错了
(5)25+65=?
算吧!
90
答对了
(6)67+35=?
算吧!
100
答错了
(7)25+65=?
算吧!
90
答对了
(8)67+35=?
算吧!
100
答错了
(9)25+65=?
算吧!
90
答对了
(10)67+35=?
算吧!
100
答错了

总分为:50

2、关键字:
break:在某种条件下提前结束循环 跳出循环 (可用在switch…case或循环里)
continue:跳过循环体中剩余语句而进入下一次循环(只能用于循环中)

3、三种循环结构的更佳使用情况:
1)while:“当…”循环
2)do…while:“直到…”循环
     要素1与要素3相同时首选do…while
     要素1与要素3不同时用while

3)for:固定次数循环,应用率最高

循环的选择:
1.	先看固定次数吗 ?
	1)固定次数---------------for
	2)不固定次数,再看要素1与要素3相同吗 ?
	    2.1)相同则------------- do...while
	    2.2)不同则------------- while

4、嵌套循环:
九九乘法表:
1)循环中套循环,一般多行多列时使用,外层控制行,内层控制列
2) 执行规则:外层循环走一次,内层循环走所有次
3) 建议:嵌套的层数越少越好,能用一层就不用两层,能用两层就不用三层,
    若需求必须通过三层以上的循环才能解决,说明设计有问题
4) break只能跳出一层循环(只能跳出它当前的循环)

	package day05;
	//九九乘法表
	public class MultiTable {
	    public static void main(String[] args) {

        for(int num=1;num<=9;num++){   //外层  控制行
            for(int i=1;i<=num;i++){   //内层  控制列
                System.out.print(i+"*"+num+"="+i*num+"\t");
        }
            System.out.println();  //换行
    }
     执行过程:
        num=1   true
            i=1   true   1*1=1
            i=2   false  里层的for循环结束
            换行
        num=2   true
            i=1   true   1*2=2
            i=2   true   2*2=4
            i=3   false  里层的for循环结束
            换行
        num=3    true
            i=1   true   1*3=3
            i=2   true   2*3=6
            i=3   true   3*3=9
            i=4   false  里层的for循环结束
            换行
        num=4
        ...
}
}

6000次
for(int i=1;i<=10;i++){
	for(int j=1;j<=20;j++){  
		for(int k=1;k<=30;k++){
		  System.ou.println(“aaa”);
		}
	}
}
过程:
i=1
  j=1 
   k30次
  j=2
	k30次
、、、
  j=20
	k30次     i=1时,里面已经走了600次了

  程序=算法+数据结构

1)算法:解决问题的流程/步骤(顺序、分支、循环)
2)数据结构:将数据按照某种特定的结构来保存

		  数怎么存
 设计良好的/合理的数据结构会导致好的算法

总结:先设计数据机构再设计算法


第六天:
数组: 是最基本的一种数据结构      int和int[ ]是两种完全不同的数据类型

1)是一种数据类型(引用类型)       
2)相同数据类型的元素的集合
3)数组的定义:
      	    //声明整型数组arr,包含10个元素,每个元素都是int类型,默认值为0
			int [ ] arr = new int[10];
	注:
			arr数组固定长度为10  (数组的长度一旦定义好,就不能更改了)
			在内存中会开辟一块连续的存储空间给数组
			(1个int占4个字节,在内存中会分配 连续40个字节来存储arr数组)
			
4)数组的初始化:---------- 初始化数组中的数据
			int [ ] arr = new int[4];  //0,0,0,0
			int [ ] arr = {3,5,7,9};    //3,5,7,9
			int [ ] arr = new int[ ]{3,5,7,9};  //3,5,7,9
			int [ ] arr;
			arr = {3,5,7,9};  //编译错误,此方式必须 声明同时初始化
			arr = new int[ ]{3,5,7,9};  //正确

	-----------------------------------------------------------------------------
			int   a;  //声明整型变量a
			int [ ] b;  //声明整型数组变量b
			double [ ] c;    boolean [ ] b;   char [ ] d;

												// 0,0,0,0,0,0,0,0,0,0
			int [ ] a = new int[10];    	 	// 声明整型数组a,包含10个元素  
												// 每个元素都是int类型,默认值为0

			double [ ] d = new double[8];  	 //声明浮点型数组d,包含8个元素
					  						 //每个元素都是double类型,默认值为0.0

			boolean [ ] b = new boolean[26];   //声明布尔型数组b,包含26个元素
						   			 		   //每个元素都是boolean型,默认值为false
			数组和类属于引用类型,引用类型默认值为null
			
5)数组的访问:      访问的是数组中的元素
	5.1)通过(数组名 .length)可以获取数组的长度(元素的个数)
			int [ ] arr = new int[4];
			System.out.println(arr.length);  //4  arr.length就是arr数组的长度  . 读 的
			
	5.2)通过下标/索引来访问数组中的元素
		下标从0开始,最大到(数组的长度-1)
			int [ ] arr = new int[3];  //0,0,0
			arr[0] = 100;   // 给第1个元素赋值为100
			arr[1] = 200;   // 给第2个元素赋值为200
			arr[2] = 300;   // 给第3个元素赋值为300
			arr[3] = 400;   // 运行时发生数组下标越界异常
			System.out.println(arr[2]); 
			System.out.println(arr.length);        //输出arr数组的长度
			System.out.println(arr[0]);           //输出第1个元素的值
			System.out.println(arr[arr.length-1]);  //输出最后一个元素的值

			arr[0]---------------代表arr中的第1个元素
			arr[1]---------------代表arr中的第2个元素
			arr[2]---------------代表arr中的第3个元素

6)数组的遍历/迭代:从头到尾挨个走一遍
	int [ ] arr = new int[10];   // arr数组
	for(int i=0;i<arr.length;i++){  //遍历arr数组  原来是i<10;
		arr[i] = 100;             //给每个元素赋值为100   把值写死了
		arr[i] = (int)(Math.random()*100);  //每个元素为0~99随机生成的数
		arr[i] = scan.nextInt();            //每个元素用户输入的值
	System.out.println(arr[i]);       //输出每个元素的值
	}     
	//写代码时只要用到数组的长度一律写为.length,不把数据写死
	
					//输出这10个元素的值:
	int [ ] arr = new int[10];     //正序
	for(int i=0;i<arr.length;i++){  
		System.out.println(arr[i]);
	}    
					
	int [ ] arr = new int[10];     //倒序
	for(int i= arr.length-1;i>=0;i--){  
		System.out.println(arr[i]);
	}  

案例一:
package day06;
//求数组元素的最大值
public class MaxOfArray {
    public static void main(String[] args) {

    int[] arr = new int[10];          //定义arr数组
    for(int i=0;i<arr.length;i++){    //遍历arr数组
        arr[i] = (int)(Math.random()*100);   //给每个元素赋值为0到99之间的随机数
        System.out.println(arr[i]);  //输出arr中每个元素的值
    }

    int max = arr[0];       //假设第1个元素为最大值
    for(int i=1;i< arr.length;i++){   //遍历剩余元素
        if(arr[i]>max){     //若剩余元素大于max
            max = arr[i];   //修改max的值为较大的
        }
    }
    System.out.println("最大值为:"+max);

    /* 执行过程:
                      0, 1, 2,3
        int[] arr = {23,56,89,4};      // max=23/56/89
     */
}
}
	
7)数组的复制
	7.1)System.arraycopy(a,1,b,0,4);                效率高、灵活性好
		
			第1种方式:
	        int[] a = {10,20,30,40,50};
	        int[] b = new int[6];     //0,0,0,0,0,0
	
	        //a:源数组
	        //1:源数组的起始下标
	        //b:目标数组
	        //0:目标数组的起始下标
	        //4:要复制的元素个数
	        System.arraycopy(a,1,b,0,4);
	
	        for(int i=0;i<b.length;i++){    //遍历b数组
	            System.out.println(b[i]);   //输出b中每个元素的值
	        }
	     
案例二:
package day06;
//求数组元素的最大值 , 并将最大值放到数组最后一个元素的下一个位置
import java.util.Arrays;
public class MaxOfArray02 {
    public static void main(String[] args) {

    int[] arr = new int[10];          //定义arr数组
    for(int i=0;i<arr.length;i++){    //遍历arr数组
        arr[i] = (int)(Math.random()*100);   //给每个元素赋值为0到99之间的随机数
        System.out.println(arr[i]);  //输出arr中每个元素的值
    }

    int max = arr[0];       //假设第1个元素为最大值
    for(int i=1;i< arr.length;i++){   //遍历剩余元素
        if(arr[i]>max){     //若剩余元素大于max
            max = arr[i];   //修改max的值为较大的
        }
    }
    System.out.println("最大值为:"+max);

    arr = Arrays.copyOf(arr,arr.length+1);   //扩容
    arr[arr.length-1] = max;  //将最大值max赋值到arr最后一个元素上

    for(int i=0;i<arr.length;i++){    //遍历arr数组
        System.out.println(arr[i]);  //输出arr中每个元素的值
    }

}
}

	7.2)int[ ] b = Arrays.copyOf(a, 6);
		 a = Arrays.copyOf(a, a.length+1);  //扩容    效率低、灵活性差,但有优点(扩容)

			第2种方式:
	        int[] a = {10,20,30,40,50};
	
	        //a:源数组
	        //b:目标数组
	        //6:目标数组的长度(元素个数)
	        //   ---若目标数组长度 > 源数组长度,则末尾补默认值
	        //   ---若目标数组长度 < 源数组长度,则从末尾截取
	        int[] b = Arrays.copyOf(a,6);
	
	        for(int i=0;i<b.length;i++){    //遍历b数组
	            System.out.println(b[i]);   //输出b中每个元素的值
	        }
	
			第2种方式的优点: 扩容
	        int[] a = {10,20,30,40,50};
	        //数组的扩容(创建了一个更大的新的数组,并将数据复制进去了)
	        a = Arrays.copyOf(a,a.length+1);  //扩容
	
	        for(int i=0;i<a.length;i++){    //遍历a数组
	            System.out.println(a[i]);  //输出a中每个元素的值
	        }
	        
8)数组的排序      冒泡排序、快速排序、插入排序...
	8.1)Arrays.sort(arr);   //效率高     升序排列
	
		int[] arr = {45,35,7,89,21,39,14,1};

        Arrays.sort(arr);   //对arr进行升序排列

        for(int i=0;i<arr.length;i++){    //遍历arr数组
            System.out.println(arr[i]);  //输出arr中每个元素的值
        }

        System.out.println("倒着输出:");
        for(int i=arr.length-1;i>=0;i--){    //遍历arr数组
            System.out.println(arr[i]);  //输出arr中每个元素的值
        }
        
	8.2)冒泡排序:
		8.2.1)五个数冒4轮
		8.2.2)每一轮都是从第1个元素开始冒
		 	   每一次都是和它的下一个元素比
		8.2.3)冒出来了就不带它玩了

		int[ ] arr = {67,23,4,56};    //升序
		for(int i=0;i<arr.length-1;i++){   //控制轮
			for(int j=0;j<arr.length-1-i;j++){   //控制次
				if(arr[j]>arr[j+1]){      //若前数大于后数则交换,保证前数小于后数---升序
									      //想降序把这里的>改为<
								  		  //若前数小于后数则交换,保证前数大于后数---降序
				int t = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = t;
				}
			}
		}
		
		System.out.println(“排序后”);
		for(int i=0;i<arr.length;i++){
			System.out.println(arr[i]);    //对arr中每个元素输出
		}
		
		执行过程:
		i=0
			j=0  67和23比,换,23,67,4,56
			j=1  67和4比,换,23,4,67,56
			j=2  67和56比,换,23,4,56,67------------------67出来了
		i=1
			j=0  23和4比,换,4,23,56,67
			j=1  23和56比,不换
		i=2
			j=0  4和23比,不换
		
		  		    arr.length-1-I    3-i次
		i=0(第1轮)  比3次
		i=1(第2轮)	比2次
		i=2(第3轮)	比1次
		
		第一轮:
			67和23比,换,23,67,4,56
			67和4比,换,23,4,67,56
			67和56比,换,23,4,56,67------------------67冒出来了
		第二轮:
			23和4比,换,4,23,56,67
			23和56比,不换---------------------------56冒出来了
		第三轮:
				4和23比,不换----------------------------23冒出来了

方法: (C语言将方法称为函数)      标志就是 小括号()
1、
  1)封装一段特定的业务逻辑功能
  2)尽可能的独立,一个方法只干一件事
  3)可以被反复调用多次
  4)可以减少代码重复,有利于代码的维护,有利于团队的协作
2、方法的定义:
  五个要素:修饰词、返回值类型、方法名、参数列表、方法体
在这里插入图片描述

3、方法的调用:
  1)无返回值:方法名(有参传参);
  2)有返回值:数据类型 变量 = 方法名(有参传参);

4、return:
  1)return 值;   //1.1)结束方法的执行   1.2)返回结果给调用方
         ------------用在有返回值的方法中
  2)return;    //2.1)结束方法的执行
         ------------用在无返回值的方法中

sayHello(“zhangsan”,55);   //55>50,就不会到输出那句了
//有参无返回值
public static void sayHello(String name,int age) {
		if(age>50){
			return;     //结束方法的执行     类似break;
}
		System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
	}

方法可以有返回值,也可以没有返回值:
1)无返回值-----返回值类型统一写成void       public static void
2)有返回值-----返回值类型写成特定数据类型即可   public static int

方法完成后:
1)若需要用到方法中的某个数据---------------有返回值
2)若不需要用到方法中的某个数据-------------无返回值

Java给的方法:(标志性的小括号)
System.out.println(“hello”);    //输出一句话并换行
System.arraycopy(a,1,a1,0,4);     //数组的复制
Array.sort(arr);                  //数组的排序 --------------无返回值

int a = scan.nextInt();           //接收一个整数
double b = scan.nextDouble();     //接收一个小数
double c = Math.random();         //生成随机数
int[] a1 = Arrays.copyOf(a,6);    //数组的复制 --------------有返回值

方法可以有参也可以无参
---------有参可以使方法更灵活 ,   无参 数据是写死的

System.out.          println(“hello”);    
System.              arraycopy(a,1,a1,0,4);     
Array.               sort(arr);                   
int[] a1 = Arrays.   copyOf(a,6);  -----------------------有参数

int a = scan.        nextInt();           
double b = scan.     nextDouble();     
double c = Math.     random(); ---------------------------无参数       

调用方法时:(5,6)、(m,n)        实参(实际参数) 5、6、m、n都是具体的数

声明方法时:plus(int num1,int num2)  形参(形式参数) 只是在声明变量,没有实际的值


package day06;
//方法的演示

public class MethodDemo {
    public static void main(String[] args) {
        say();    //方法的调用
        
	//无参无返回值 的say()方法
    public static void say(){
        System.out.println("大家好,我叫LCX,今年23岁了");
    }
-----------------------------------------------------------   
public class MethodDemo {
    public static void main(String[] args) {
    
    //sayHi();  //编译错误,有参必须传参
    //sayHi(250);  //编译错误,参数类型必须匹配
    sayHi("zhangsan");    // String name="zhangsan" //---------实参(调用方法时 都是具体的值、数)
    sayHello("lisi",30);  //String name="lisi"  int age=30

    //有参无返回值
    public static void sayHi(String name){  //-------------- 形参(声明方法时 只是在声明变量,没有实际的值)
        System.out.println("大家好,我叫"+name+",今年23岁了");
    }
    public static void sayHello(String name,int age){
        System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
    }
----------------------------------------------------------

public class MethodDemo {
	public static void main(String[] args) {   
		double a = getNum();     //getNum()的值就是return后的那个数
   		System.out.println(a);   //8.88 ----这里只是模拟对返回值的后续操作
                                      // 输出只是其中之一操作

    //无参有返回值
    public static double getNum(){
        //return;  //编译错误,return后必须跟一个值
        //return "abc";   //编译错误,返回值类型必须匹配
        return 8.88;      //1)结束方法的执行  2)返回结果给调用方
    }
---------------------------------------------------------------   
public class MethodDemo {
	public static void main(String[] args) {
		int b = plus(5,6);
        System.out.println(b);  //11 ----模拟对返回值的后续操作

        int m=5,n=6;
        int c = plus(m,n);   //传的是m和n里面的数
        System.out.println(c);  //11 ----模拟对返回值的后续操作

    //有参有返回值
    public static int plus(int num1,int num2){
        int num = num1+num2;
        return num;     //返回的是num里面的那个数
        //return num1+num2;  //返回的是num1+num2的和
-----------------------------------------------------------------
public class MethodDemo {
	public static void main(String[] args) {     
		int[] d = testArray();
   		for(int i=0;i< d.length;i++){ //--模拟对返回值的后续操作(或可排序或可输出长度...)
      	 	 System.out.println(d[i]);
   		}

    //无参有返回值
    public static int[] testArray(){
        int[] arr = {23,5,1,46};
        return arr;
    }
--------------------------------------------------------------------
方法的嵌套调用:

public class MethodDemo {
	public static void main(String[] args) {
		a(); //111,333,222,444 方法的嵌套调用
    	System.out.println(444);
	}

public static void a(){
    System.out.println(111);
    b();
    System.out.println(222);
}
public static void b(){
    System.out.println(333);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值