第二章 Java基本语法(下)

程序流程控制:

1.顺序结构:程序由上而下的执行,中间没有任何判断和跳转
2.分支结构:根据条件,选择性的执行某段代码
3.循环结构:根据循环条件,重复执行某段代码

1.分支结构:

①if-else结构

1.if(条件表达式){
代码执行块}
2.if(条件表达式) {
代码执行块} else{
代码执行块}
3.if(条件表达式) {
代码执行块} else if (条件表达式) {
代码执行块} else{
代码执行块}

//举例1
int heartBeats=79;
if(heartBeats<60||heartBeats>100){
System.out.println("需要进一步检查");
}
System.out.println("体检结束,心跳正常");/体检结束,心跳正常

//举例2
int age =23;
if(age<18){
System.out.println("你还可以看动画");
}else{
System.out.println("可以去网吧了");
}                         //可以去网吧了


//举例3
int age=23;
if(age<0){
System.out.println("输入错误");
}else if(age<18){
System.out.println("青少年时期");
}else if(age<35){
System.out.println("青壮年时期");
}else if(age<60){
System.out.println("可以退休了");
}else if(age<100){
System.out.println("安享晚年");
}else{
System.out.println("即将去往天堂");}

Scanner 类的使用

1.导包: import java.util.Scanner; (写在类声明之前)
2.Scanner实例化:Scanner scan =new Scanner(System.in);
3.调用Scanner类相关方法获取指定类型变量

//举例1
import java.util.Scanner;//导包
class Test1{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);//实例化
int num = scan.nextInt();//调用int方法
System.out.println(num);//1001  1001
}

举例2
import java.util.Scanner;
class Test2{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);

System.out.println("请输入你的姓名:");
String name =scan.next();//String型获取
System.out.println(name);

System.out.println("请输入你的年龄:")
int age =scan.nextInt();//int型获取
System.out.println(age);

System.out.println("请输入你的体重:");
double weight=scan.Double();//double型获取
System.out.println(weight);

System.out.println("是否单身");
boolean isMarried=scan.nextBoolean();//boolean型获取
System.out.println(isMarried);

System.out.println("请输入你的性别:");
String sex=scan.next();//char型的获取Scanner没有提供方法,用String即可
System.out.println(sex);
}     //输入的数据类型与要求的数据类型不匹配报错,导致程序终止

Math类(获取一个随机数)

需要用到random()方法,返回值为doube,范围是[0.0,1.0)

//double value =  Math.random( )*100;     //[0.0,100.0)
//double value =  Math.random( )*90+10;//[10.0,100.0)
//获得 10~99之间的随机整数
int value =(int)(Math.random( )*90+10);    //[10,99]

公式:求[a,b]之间的随机整数
int value = (int)(Math.random( )*(b-a+1)+a);


②switch-cash结构

switch(表达式){
case常量1:
语句1;
//break;
case常量2:
语句2;
//break;

case常量n:
语句n;
//break; //表达式和常量几匹配就执行常量几后的语句,知道遇到break终止或者执行到程序完毕
default: //都不匹配就执行default
语句;
//break;
}

//举例1
int num =2;
switch(num){
case 0:
    System.out.println("zero");

case 1:
    System.out.println("one");

case 2:
    System.out.println("two");

case 3:
    System.out.println("three");

default:
   System.out.println("other");

}// 执行结果为   two
                three
                other    找到case 2 入口直接执行到底,不执行判断,因为没写break
//对比举例1
int num =2;
switch(num){
case 0:
    System.out.println("zero");
    break;

case 1:
    System.out.println("one");
   break;

case 2:
    System.out.println("two");
   break;

case 3:
    System.out.println("three");
   break;

default:
   System.out.println("other");
   break;

}// 执行结果为   two

//对比举例1
int num =4;
switch(num){
case 0:
    System.out.println("zero");
    break;


case 1:
    System.out.println("one");
   break;


case 2:
    System.out.println("two");
   break;


case 3:
    System.out.println("three");
   break;


default:
   System.out.println("other");
   break;


}// 执行结果为   other //switch后的表达式值为4,没有找到case入口,执行default语句

switch(表达式),表达式只可以为:byte short int char String 即整型与字符串,不可为浮点型

2.循环结构:

循环结构四个要素:
1.初始化条件
2.循环条件
3.循环体
4.迭代条件

①for循环

//举例1 输出5次helloworld
int i;
for(i=1;i<=5;i++){
Syste.out.println("helloworld!")
}

//举例2 遍历100以内的偶数
int i;
     for(i=1;i<=100;i++) {
          if(i%2==0) {
              System.out.println(i);
          }

//举例2 遍历1~150,输出且在 3  5  7 的倍数后加上字符
     int i;
     for(i=1;i<=150;i++) {
          if(i%3==0) {
              System.out.println(i+"  foo");
          }else if(i%5==0) {
              System.out.println(i+"  biz");
          }else if(i%7==0) {
              System.out.println(i+"  baz");
          }else {
              System.out.println(i);
          }
     }

//举例3  键入2个正整数,找出二数最小公倍数和最大公约数
     int i;
     Scanner scan  = new Scanner(System.in);
     System.out.println("请输入第一个正整数");
     int a = scan.nextInt();
     System.out.println("请输入第二个正整数");
     int b =scan.nextInt();
     
      int min =(a<b)?a:b;
      for(i=min;i>=0;i--) {
           if(a%i==0 && b%i==0) {
               System.out.println("最大公约数是: " + i);
               break;//最大公约数,从较小值开始递减循环,找到第一个公约数break跳出循环
           }
      }
      
      int max =(a>b)?a:b;
      for(i=max;i<=a*b;i++) {
           if(i%a==0 && i%b==0) {
               System.out.println("最小公倍数是:" +i);
               break;//最小公倍数,从较大值递加循环到二数之积,找到第一个公倍数break跳出循环
           }
      }

②while循环

//举例 遍历100以内的偶数
int i = 1;
          while (i <= 100) {
              if (i % 2 == 0) {
                   System.out.println(i);
              }i++; //i++为迭代条件
          }

③do-while循环

 //举例 遍历100以内的偶数
 int i = 1;
          do {
              if (i % 2 == 0) {
                   System.out.println(i);
              }
              i++;//迭代条件
          } while (i <= 100)

开发中 使用for和while循环更多

综合例题:

// 从键盘读入不确定个数的整数,并判断读入的正数和负数的个数,输入0结束;
//while循环
          Scanner scan = new Scanner(System.in);
          int posnumber = 0;
          int negnumber = 0;
          while (true) {   //不确定循环多少次
              int num = scan.nextInt();
              if (num < 0) {
                   negnumber++;
              } else if (num > 0) {
                   posnumber++;
              } else {
                   break;
              }
          }
          System.out.println("正数:" + posnumber  + "负数:" + negnumber);

3.嵌套循环

将一个循环结构A声明在另一个循环结构的循环体B中

//举例1 输出 ******
     int i ;
     for(i=1;i<=6;i++) {
          System.out.print("*");
     }

// 举例2 输出4行 ******
          int i, k;
          for (i = 1; i <= 4; i++) {
              for (k = 1; k <= 6; k++) {
                   System.out.print("*");
              }
              System.out.println();
          }

//举例3  /*输出 *
                 **
                 ***
                 ****
                 ******   */
          
          int i, k;
          for(i=1;i<=5;i++) {    //i控制行数
              for(k=1;k<=i;k++) { //k控制列数
                   System.out.print("*");
              }
              System.out.println();
          }

//举例4 嵌套循环实现九九乘法表
          int i, k;
          for(i=1;i<=9;i++) {
              for(k=1;k<=i;k++) {
                   System.out.print(i+"*"+k+"="+(i*k)+"\t");
              }System.out.println();
          }


//举例5 求100以内所有质数
          boolean isFlag=true;
          for(int i=2;i<=100;i++) { //遍历100以内的自然数
          for(int j=2;j<i;j++) {    //j被i除
              if(i%j==0) {          //i被j除尽
                   isFlag=false;
              }
          }
          if(isFlag==true) {
              System.out.println(i);
          }
          isFlag=true;//重置flag
          }
//修改版本
for(int i=2;i<=100;i++) {//遍历100以内的自然数
         boolean isFlag=true;
          for(int j=2;j<i;j++) {//j被i除
              if(i%j==0) {//i被j除尽
                   isFlag=false;   //利用循环充值flag
              }
          }
          if(isFlag==true) {
              System.out.println(i);
          }
          }

//对质数输出问题优化
         boolean isFlag=true;
         for(int i=2;i<=100;i++) { //遍历100以内的自然数
         for(int j=2;j<=Math.sqrt(i);j++) {//j被i除 优化2:对外循环优化
             if(i%j==0) {          //i被j除尽
                  isFlag=false;
                  break;//优化1:对本身非质数的数字有效
             }
         }
         if(isFlag==true) {
             System.out.println(i);
         }
         isFlag=true;//重置flag
         }

4.break和continue关键字的使用

break: 结束当前循环
continue: 结束当此循环 在一个{ }内 二者后面均不能声明执行语句

//举例
for(int i=1;i<=10;i++) {
          if(i%4==0) {    
              //break;//1 2 3  结束当前循环,    直接跳出for循环
              //continue;//1 2 3 5 6 7 9 10     结束当前循环,直接跳入i=5
              //System.out.print("123");//报错  后面均不能声明执行语句
          }
          System.out.println(i);
     }


//质数的优化二
int count=0;
     label:for(int i=2;i<=100;i++) {
          for(int j=2;j<=Math.sqrt(i);j++) {
              if(i%j==0) {
                   continue label;  //continue标签,指定结束哪个循环
              }
          }
          count++;//能执行到此步骤的都是质数
     }
     
     System.out.println(count);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值