• Java 基础 | 循环结构和数组


    接着前几天的分支结构的回顾,今天主要回顾一下循环结构和数组方面的一些知识吧。
     
    练习:输入一个数字,然后输出这个数字表示星期几
    switch(选择){
        case 选项1:Code1;break;
        case 选项2:Code2;break;
        ……
    }
     
    1.switch() 中需要一个选项,选项只能是 byte/short/char/int,从JDK 1.7开始,允许使用 String
    case 顺序不影响结果
    2.如果有一个或者多个 case 之后没有 break,那么这个时候 case 之间的顺序影响结果
     
    练习:输入两个数字以及一个符号,输出这两个数字在这个符号下运算产生的结果
    5 9 +   ->14
    练习:输入三个数字表示年月日,输出这一天在这一年时第几天
    2012 3 5  ------>65
    2014 3 5  ------>64
    需要判断平年闰年:逢百整除 400;不逢百整除 4
    2012 % 4 = 0
    2100 % 400 = 0  --- false
     
    循环结构:
    用于完成一些相同或者相似的重复操作
     
    while(逻辑值){
        Code;
    }
     
    练习:
    1.求 1-100 以内所有的奇数的和  --- i=1; i+=2;
    2.打印 100 以内能被 3 整除而不能被 7 整除的数字  int i = 0; i +=3;
    3.输入一个数字,输出这个数字是一个几位数。*
    4.输入一个数字,输出这个数字的所有因数。 --- 从 1 开始,逐个数字取余这个输入的数字,看是否能够整除  * 20:1 2 4 5 10 20  
    定义一个循环,需要三个要素:定义一个变量来控制次数,利用判断条件决定循环结束;在循环过程中需要改变变量
     
    do{
        Code;                //先执行代码块,再执行逻辑值,如果逻辑值为 true,转过头来继续执行代码块;如果为 false,就执行接下来的程序。
    }whie(逻辑值);
     
    注意:无论条件是否满足,do-while 的循环体必然至少执行一次。
                                2               7
    for(){定义循环变量; 控制条件; 改变循环变量){    //
                    1             4      5            6
        Code;
    }
    注意:对于 for 循环而言,如果第二部分的控制条件没有写,那么默认是 true,这个时候就成了一个死循环。
    习惯上如果变化不规律或者次数不确定一般使用while(比如,从控制台获取一个大于 10 的奇数,有可能输入很多次,就是用这个)
     
    while(n < 10 || n % 2 ==0){
        n =s.nextInt();
    }
    for(; n < 10 || n % 2 == 0; n = s.nextInt())
              //求 1-50 的和
    		int sum = 0;
    		//对于 for 循环而言,如果第二部分的控制条件没有写,那么默认是 true,这个时候就成了一个死循环。
    		for(int i = 1; i <= 50; i++){
    			sum += i;
    			i++;
    		}
    		System.out.println(sum);
    

      

     
    练习:百钱百鸡  --- 3 文钱 1只公鸡, 2 文钱 1 只 母鸡,1 文钱 3 只小鸡;100 文钱如何买恰好 100 只鸡? --- 先定义一个循环表示公鸡,嵌套一个循环表示母鸡,计算小鸡的个数,根据各种鸡的个数来计算钱数是否为 100
     
    /**
    练习:百钱百鸡  --- 3 文钱 1只公鸡, 2 文钱 1 只 母鸡,1 文钱 3 只小鸡;100 文钱如何买恰好 100 只鸡?
     --- 先定义一个循环表示公鸡,嵌套一个循环表示母鸡,计算小鸡的个数,根据各种鸡的个数来计算钱数是否为 100
    */
    import java.util.Scanner;
    public class Demo2d{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    		for(int i = 1 ; i <= 33 ; i++)
    		    for(int j = 1; j <= 50; j++){
    			int k = 100 - i - j
    			if(k % 3 == 0 && 3*i+2*j+k/3 == 100){
    				System.out.print(i+","+j+","+k+"	");
    			}
    		    }
    		}
    }
    

      

     
    break 和 continue
    break:用于选择结构和循环结构,表示结束当前的一层结构
    continue:只能用于循环结构,表示跳过本次循环继续下次循环,
     
    扩展作业:一个循环打印九九乘法表
     
    for(int i = 1; i <= 9; i++){
    			for(int j = 1; j <= i; j++){
    				//if(i*j >= 10){
    				//	System.out.print(i+"*"+j+"="+i*j+"   ");
    				//}else{
    				//	System.out.print(i+"*"+j+"="+i*j+"    ");
    				//}
    				System.out.print(i+"*"+j+"="+i*j+"	");//使用制表符 	,可以不用自己特意去控制了,自动左边对齐了。
    			}
    			System.out.println();	
    			
    	}
    //用一个循环输出
    for(int i = 1, j = 1; i <= 9; j++){
            System.out.print(i + "*" + j + "=" + i * j + "	");
            if(j == i){
                //换行
                System.out.println();
                i++;
                j = 0;
            }
    }        
    

      

    数组
    存储同一类型的多个数据的容器 --- 大小固定的
    数组会对放入其中的数据进行编号,编号是从 0 开始的 --- 下标(比数组的长度少一个)
    数组的容量 --- 长度
     
     定义格式
    数据类型[]  数组名 = new 数据类型[长度];
    int  arr = new int[5]; 表示定义一个能存储 5 个整型元素的数组
    arr[3] = 10;    arr[5] = 7; // ArrayIndexOutOfBoundsException ---数组下标越界异常
     
     内存
    Java 将所占用的内存划分为了 5 块:栈内存(*)、堆内存(*)、方法区、本地方法栈(涉及到块语言的问题)、PC 计数器(寄存器,跟硬件相关)
      栈内存
    用于存储变量的,变量在栈内存中使用完成之后会立即移除出栈内存,有种卸磨杀驴的样子。只要遇到 new ,就会在堆中开辟一块空间(从 0-n划分),有地址。对于里面的数据先默认一个值(0),当赋值后改变值。
      堆内存
    用于存储对象(数组是一种特殊的对象)的。元素在存入堆内存中之后会自动的赋予默认值:byte/short/int -0   long -0L  float -0.0f  double -0.0  char -'u0000'  boolean -false,其他类型的默认值都是null。   [(表示数据类型 --- [ 表示数组)   I(如果这是一个数组,那么是这一部分表示数组中的元素类型 --- I 表示 Int)  @(标记符号,表示后边是一个地址) 15db9742(可以认为表示一个地址,实际上是这个对象的哈希码的十六进制形式)
    对象在用完之后是在不确定的某个时刻被回收。
     
     
     
     
     
     
     
     
  • 相关阅读:
    Java集合框架面试题
    Java:concurrent包下面的Collection接口框架图( CopyOnWriteArraySet, CopyOnWriteArrayList,ConcurrentLinkedQueue,BlockingQueue)
    JDK1.5新特性,基础类库篇,浅谈并发工具包(Concurrency Utilities)
    《Java Concurrency》读书笔记,使用JDK并发包构建程序
    Java:多线程,Exchanger同步器
    Java:多线程,CountDownLatch同步器
    Java:多线程,CyclicBarrier同步器
    Java:多线程,Semaphore同步器
    《Java Concurrency》读书笔记,构建线程安全应用程序
    《Java Concurrency》读书笔记,Java并发编程实践基础
  • 原文地址:https://www.cnblogs.com/tangdiao/p/9432673.html
Copyright © 2020-2023  润新知