day05
- 昨天练习的答案
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
int month = scanner.nextInt();
while (year<=0){
System.out.println("输入错误请重新输入年份");
year = scanner.nextInt();
}
while (month<1 || month>12){
System.out.println("输入错误请重新输入月份");
month = scanner.nextInt();
}
if(year % 4==0 && !(year%100==0) || year % 400==0){
System.out.println("您输入的"+year+"是闰年");
switch(month){
case 2:
System.out.println(month+"月有29天");
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month+"月有31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month+"有30天");
}
}else{
System.out.println("您输入的"+year+"是平年");
switch(month) {
case 2:
System.out.println(month + "有28天");
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + "有31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month + "有30天");
}
}
笔记
- for循环:应用率最高,适合与次数相关的循环
- for(要素1;要素2;要素3){ }
- for( ; ; ) 死循环
- for(int i=2,j=3;i<=3;i++,j–)要素1,3可以添加,多个赋值改变
- break配合if来跳出循环或者swtich case分支
- continue;//跳过循环体中剩余的语句而进入下次循环
- continue不常用,可以不用也能实现
for (int i=4,j=5;i<=8;i++,j--){
System.out.println(i+" "+j);
if(i==6){
break;
}
}
/*
执行过程
i = 4,j = 5 true 输出 if(false)
i = 5,j = 4 true 输出 if(false)
i = 6,j = 3 true 输出 if(true)执行break 跳出for循环
*/
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 跳出for循环
*/
- 三种循环结构的选择
- 先看循环是否与次数有关
- 若有关--------------------------直接用for
- 若无关,再看要素1与要素3是否相同
- 若相同:-----------------------直接用do while
- 若不同:-----------------------直接用while
- 嵌套循环 常常多行多列时使用
- 外层控制行
- 内层控制列
- 执行过程:外层循环走一次,内层循环走所有次
- 建议:嵌套层次越少越好,能用一层就不用两层,能用两层就不用三层
- break:只能跳出当前层循环
- 数组(上):
- 是一种引用数据类型
- 相同数据类型元素的集合
- 通过(数组名.length)可以获取数组的长度(元素的个数)
- 通过下标/索引来访问数组中的元素,下标从0开始,最大到数组长度-1
- 定义 初始化
//1)数组的定义
//声明整型数组arr,包含10个元素,每个元素都是int型,默认值为0
int[] arr = new int[10];
//2)数组的初始化:初始化的是数组中的与元素
int[] arr1 = new int[3];//0,0,0
int[] arr2 = {1,4,7};
int[] arr3 = new int[]{1,4,7};
int[] arr4;
//arr4 = {1,4,7};//编译错误,此方式只能同时声明初始化
arr4 = new int[]{1,4,7};//new 可以先声明后初始化
-
访问:----------------访问的是数组中的元素
-
通过(数组名.length)可以获取数组的长度(元素个数)
int[] arr = new int[6]; System.out.println(arr.length); //6
-
通过下标/索引来访问数组中的元素,下标从0开始,最大到(数组长度-1)
int[] arr = new int[3]; arr[0] = 100; //给第1个元素赋值为100 arr[1] = 200; //给第2个元素赋值为200 arr[2] = 300; //给第3个元素赋值为300 //arr[3] = 400; //运行时发生数组下标越界异常 System.out.println(arr[arr.length-1]); //输出最后一个元素的值
-
-
数组的遍历/迭代:从头到尾挨个走一遍
int[] arr = new int[10]; for(int i=0;i<arr.length;i++){ //遍历arr数组 arr[i] = (int)(Math.random()*100); //给每个元素赋值为0到99之间的随机数 System.out.println(arr[i]); //输出每个元素的值 }
补充
- \t :水平制表位,占8个空格(用于输出打印时对齐)
- ArrayIndexOutOfBoundsException数组下标越界异常
- 数组下标从0开始,最大到(数组长度-1),若不符合这个范围,则运行时发生数组下标越界异常
- 变量的同名问题:
- 作用域重叠时,变量不能同名
- 数组中的默认值规则:
byte,short,int,long,char--------------------0
float,double--------------------------------0.0
boolean-------------------------------------false
String--------------------------------------null
总结
- 今天学习了for循环和数组(上),刚刚在做老师留的作业时,感觉到难度逐渐上来了。前面这基础的几天,自己学的倒是游刃有余的。但我觉得老师说的一句话很对,“等基础语法6天后所有人都一样了,那些由计算机基础的人和大家都在一个水平了”“就这六天几乎就是大学一个学期所学的语言知识”
*谁说不是呢,没有好好珍惜大学的我,这几天的知识就几乎是我这四年全部所学的关于代码的知识了。说来都惭愧,不过我觉得这是在鞭策我,今后更要认真听讲咯!
练一下
- `利用for循环计算:打印字符*组成的等腰三角形,输出结果如下所示:
*
***
*****
*******
*********
***********
这是在练习我们对for循环嵌套的掌握能力,提醒一下需要分别利用for来输出" "和"*"并合理打印
记住外层是控制行,内层是控制列哦