程序流程控制:
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);