文章目录
if else判断语句
第一种结构:
if(boolean表达式){
java语句;
}
解释:如果if后面的boolean表达式是true就执行大括号里面的java语句
如果是false就不执行大括号中的java语句
第二种结构:
if(boolean表达式){
java语句;
}else{
java语句;
}
解释:如果if后面的boolean表达式是true,就执行if大括号中的java语句,
不执行else大括号中的java语句。
如果if后面的boolean表达式是false,就不执行if大括号中的java语句,
会执行else大括号中的java语句。
第三种结构:
if(boolean表达式){
java语句;
}else if(boolean表达式){
java语句;
}else if(boolean表达式){
java语句;
}else if(boolean表达式){
java语句;
}else{
java语句;
}
解释:当if后面的boolean表达式是true时,才会执行当前if大括号中的java语句,
如果if后面的boolean表达式都不是true的话,会执行else中的语句。
注意:如果有两个以上(包括两个)的if后面boolean表达式是true时,会按照从上到下的顺序只执行最上面if大括号中的语句,最多只会执行一个大括号中的语句。
switch选择语句
switch(表达式){
case 值1:
java语句;
break;
case 值2:
java语句;
break;
case 值3:
java语句;
break;
default:
java语句;
}
执行流程:
- 先计算表达式的值
- 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句
注意:
– 程序遇到break语句结束了,可以不写break,如果不写,则会发生case穿透现象
– defalut语句也可以没有。
– switch后面的括号中可以填写byte、short、char、int、enum(枚举)类型,即能够自动转换为int类型的都可以,在jdk7版本之后可以填写String类型。
– case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
for循环语句
语法
for(初始化表达式;条件表达式;循环后的操作表达式(步进语句)) {
循环体;
}
执行流程
- 执行初始化语句,并且在整个循环过程里面只执行一次
- 执行判断条件语句,看其返回值是true还是false
- 如果是true,就继续执行
- 如果是false,就结束循环,整个流程结束
- 执行循环体语句
- 执行循环后的操作表达式
- 程序回到步骤2继续。
for循环中的变量
在for循环中定义的变量只能在循环内部访问和使用,循环外是无法访问和使用的。
小练习
1.计算1-100所有的奇数求和
2.在屏幕中打印九九乘法表
3.时钟打印,输出格式:
00时00分
00时01分
…
23时59分4.打印杨辉三角
1.计算1-100所有的奇数求和
int sum = 0;
for(int i=1;i<=100;i++){
if(i%2 != 0){
//奇数
//追加
sum += i;
}
}
System.out.println(sum);
2.在屏幕中打印九九乘法表
//外层for循环控制换行,变量i是行号
for (int i = 1; i <= 9; i++) {
//System.out.println(i);
// 输出规律:
// 第1行,输出1个
// 第2行,输出2个
// 第3行,输出3个
// ...
// 第9行,输出9个
// 第i行,输出i个
for (int j = 1; j <= i; j++) {
// 这里不要换行
System.out.print(i + "*" + j + "=" + i * j + " ");
}
// 注意:上面的for循环结束之后表示一行输出结束了,换行
System.out.println();
}
3.时钟打印
for (int i = 0;i <= 23;i++){
for (int j = 0;j <= 59;j++){
if (i <= 9){
if (j <= 9){
System.out.println("0"+i+"时"+"0"+j+"分");
}else{
System.out.println("0"+i+"时"+j+"分");
}
}else{
if (j <= 9){
System.out.println(i+"时"+"0"+j+"分");
}else{
System.out.println(i+"时"+j+"分");
}
}
}
}
4.打印杨辉三角
public static int pascalTriangle(int a) {
int rows = 10;
for (int i = 0; i < rows; i++) {
int number = 1;
// 打印空格字符串 System.out.printf等价于System.out.format
System.out.printf("%" + (rows - i) * 2 + "s", "");
for (int j = 0; j <= i; j++) {
System.out.printf("%4d", number);
number = number * (i - j) / (j + 1);
}
System.out.println();
}
return 0;
}
//第二种方法
public static int pascalTriangle(int row) {
int prev = 1;
int[] arr = new int[row];
for( int i = 0; i < row; i++) {
for( int j = 0; j <= i; j++) {
// 将上一行当前下标元素的值保存
int cur = arr[j];
// 当前元素等于上一行当前元素和上一行当前元素前一个元素之和
arr[j] = prev+cur;
// 对于下一圈循环,prev保存了当前行上一行元素前一个元素,即prev与cur保存的值一前一后
prev = cur;
System.out.print(arr[j]+" ");
}
System.out.println();
}
return 0;
}
while循环语句
语法
初始化语句;
while(boolean表达式) {
循环体语句;
控制条件语句;
}
执行过程:
- boolean表达式里面的结果是true
- 执行while大括号里面的语句,直到boolean表达式的结果变为false,循环结束。
- while循环的次数是:0-N次
while循环本质上和for循环是一样的,可以相互替换,作用相同,格式不同,实际工作中建议使用for循环,因为变量会及早的从内存中消失,可以提高内存的使用效率。
do while循环语句
语法
初始化语句;
do {
循环体语句;
控制条件语句;
}while(boolean表达式);
执行过程:
- 执行do循环体中的语句
- 运算while中的boolean表达式,如果是true则继续执行do循环体中的语句,如果是false,则循环执行结束。
do里面的语句至少会执行一次,执行之后根据while里面的条件判断语句来判定是否继续循环执行do里面的语句。
注意: while后面的;不要忘记,否则会报错。
三种循环语句的区别:
- do…while循环至少执行一次循环体。
- 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
工作中常用for循环,因为变量会及早的从内存中消失,可以提高内存的使用效率。
控制语句break和continue
break
break是java语言中的关键字,中文是打断,终止的意思
- 可以用在switch语句中,结束分支语句,防止case穿透现象的发生.
- 可以出现在循环当中,作用是结束整个循环的执行,默认情况下结束离它最近的一个循环.
for(int i=0;i<10;i++){
System.out.println(i);
if(i==5){
break; //只是结束离它最近的一个循环.
//return; //返回,结束的是方法.
}
}
System.out.println("Hello World!");
return的作用是返回,它的作用不是结束循环的,而是结束方法的,例如main方法。
默认情况下break;语句跳出的是离它最近的循环。
for( int j = 0 ; j < 2 ; j ++ ){
System.out.println( "--> " + j );
for( int i = 0 ; i < 10 ; i ++ ){
if(i == 5){
//终止的是最近的这个循环。
break; //默认情况下break;语句跳出的是离它最近的循环。
}
System.out.println("i = " + i);
}
}
break还可以控制结束嵌套循环
outerFor:for(int i=5;i>0;i--){
innerFor:for(int j=0;j<i;j++){
if(j==2){
break outerFor;
}
System.out.print(j);
}
System.out.println();
}
continue
程序执行到continue语句时,直接结束本次循环,进入下一次循环。
for(int i=0;i<10;i++){
if(i==5){
continue;
}
System.out.println(i);
}
continue也可以像break那样加上循环的名字:
outerFor:for(int i=5;i>0;i--){
innerFor:for(int j=0;j<i;j++){
if(j==2){
continue outerFor;
}
System.out.print(j);
}
System.out.println();
}
break和continue的区别?
假设有10个人参加面试,现在进行到第三个人了,突然,面试官有事了,需要走,那么今天剩下这些人就没有办法继续面试了,显然面试整个结束了。(break)
假设有10个人参加面试,现在进行到第三个人了,面试官想要招聘一位女生做秘书,但是这第三个人是一位男士,面试官说:今天咱们就聊到这里吧,下一位。(continue)
课后作业
题目
练习题1:定义一个方法,拥有一个int变量 month,实现:判断是春夏秋冬的哪个月份。
练习题2:定义一个方法,拥有三个int变量,实现:按照从大到小的顺序输出。
练习题3:定义一个方法,拥有int变量year和month,实现:判断对应的年份是否为闰年并计算当月天数。
练习题4:计算1000以内所有不能被7整除的整数之和。
练习题5:任意定义一个正整数,计算该数的阶乘。例如赋值为5,阶乘为 54321。
参考代码:
练习题1:定义一个方法,拥有一个int变量 month,实现:判断是春夏秋冬的哪个月份。
public class HomeWork {
public static void main(String[] args) {
Month(5);
}
public static void Month(int month) {
switch(month){
case 12 :
case 1 :
case 2 :
System.out.println("冬季");
break;
case 3 :
case 4 :
case 5 :
System.out.println("春季");
break;
case 6 :
case 7 :
case 8 :
System.out.println("夏季");
break;
case 9 :
case 10 :
case 11 :
System.out.println("秋季");
break;
default:
System.out.println("输入月份有误!");
}
}
练习题2:定义一个方法,拥有三个int变量,实现:按照从大到小的顺序输出。
public static void Sort(int a,int b,int c) {
int tmp;
if (a < b)//首先判断a与b的大小,将较大的数放在a中
{
tmp = a;
a = b;
b = tmp;
}
if (a < c)//再判断a与c的大小,仍然将较大的数放在a中
{
tmp = a;
a = c;
c = tmp;
}
if (b < c)//最后判断b和c,将b和c之间较大的数储存在b中
{
tmp = b;
b = c;
c = tmp;
}
System.out.println(a+","+b+","+c);
}
另一种方法:
int max = a > b ? (a > c ? a : c) : (b > c ? b : c);
int min = a < b ? (a < c ? a : c) : (b < c ? b : c);
int mid = a + b + c - max - min;
System.out.println(max+","+mid+","+min);
练习题3:定义一个方法,拥有int变量year和month,实现:判断对应的年份是否为闰年并计算当月天数。
public static void LeapYear(int year,int month) {
if ((year % 4 ==0 && year % 100 != 0) || year % 400 == 0 ) {
System.out.println(year+"年是闰年");
if (month == 2) {
System.out.println(month+"月的天数为29天");
}else {
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month+"月的天数为31天");
break;
case 2:
case 4:
case 6:
case 9:
case 11:
System.out.println(month+"月的天数为30天");
break;
}
}
}else {
System.out.println(year+"年是平年");
if (month == 2) {
System.out.println(month+"月的天数为28天");
}else {
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month+"月的天数为31天");
break;
case 2:
case 4:
case 6:
case 9:
case 11:
System.out.println(month+"月的天数为30天");
break;
}
}
}
}
另一种方法:
boolean a = false;
if ((year % 4 ==0 && year % 100 != 0) || year % 400 == 0 ){
System.out.println(year+"年是闰年");
a = true;
}else{
System.out.println(year+"年是平年");
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
System.out.println(month+"月的天数为31天");
}else if(month == 2 && b == true){
System.out.println(month+"月的天数为29天");
}else if(month == 2 && b == false){
System.out.println(month+"月的天数为28天");
}else if(0 < month && month < 13){
System.out.println(month+"月的天数为30天");
}else{
System.out.println("月份格式有误");
}
练习题4:计算1000以内所有不能被7整除的整数之和。
public static void Sum() {
int sum = 0;
for (int i = 1;i <= 1000;i++) {
if (i % 7 != 0) {
sum += i;
}
}
System.out.println("1000以内所有不能被7整除的整数之和为:"+sum);
}
练习题5:任意定义一个正整数,计算该数的阶乘。例如赋值为5,阶乘为 54321。
public static void Factorial(int a) {
int s=1;
for (int i = a;i >= 1;i--) {
s *= i;
}
System.out.println(a+"的阶乘结果为:"+s);
}