流程控制语句
流程控制语句分为以下三个大类:
- 顺序结构
- 选择结构
- 循环结构
顺序结构
代码从主函数开始逐行向下运行
例如下面这个程序
public class Demo01_01{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
选择结构
选择结构分为两大类
- if语句
if语句基本格式
单if形式
if(条件表达式){
当条件为true时执行的代码;
}else{
当条件为false时执行的代码;
}
class Demo{
public static void mian(String[] args){
int a=1;
int b=2;
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
}
}
}
嵌套if-else形式
if(条件1){
条件1为true时执行的代码;
if(条件2){
条件2为true时执行的代码;
}else{
条件2为false时执行的代码;
}
}else{
条件1为false时执行的代码;
}
if-else-if形式
if(条件1){
条件1为true时执行的代码;
}else if(条件2){
条件2为true时执行的代码;
}else{
条件1、2为false时执行的代码;
}
class Demo{
public static void mian(String[] args){
int a=1;
int b=1;
if(a>b){
System.out.println(a);
}else if(a<b){
System.out.println(b);
}else{
System.out.println("无");
}
}
}
- switch语句(一般在多选情况下用)
switch语句形式
switch(变量){
case 值1:
执行语句1;
break;
case 值2:
执行语句2;
break;
case 值3:
执行语句3;
break;
........
deafult:
执行语句n;
break;
}
class Demo{
public static void main(String[] args){
int a=2;
switch(a){
case 0:
System.out.printf("你");
break;
case 1:
System.out.printf("我");
break;
case 2:
System.out.printf("他");
break;
}
}
}
循环结构(主要解决重复性执行的代码)
- 已知重复次数的循环-->for循环
- 不知重复次数但是已知结束条件的循环-->while循环
循环的四要素
1.循环初始化
2.循环继续条件
3.循环体
4.循环的周期,步长,间距
- for循环
for(1循环的初始化 ; 2循环的继续条件 ; 4循环的步长 ){
3循环体
}
class Test02{
public static void main(String[] args){
for(int i=1;i<=8;i++){
System.out.print("*");
}
}
}
- while循环
第一种格式
1.循环的初始化
while(2.循环的继续条件){
3.循环体
4.循环的步长
}
比如
class Demo{
public static void main(String[] args){
int i=1;
int sum=0;
while(i<10){
sum=sum+i;
i++;
}
System.out.println(sum);
}
}
第二种格式
while(true){
1.循环初始化
2.循环的继续条件
3.循环体
4.循环的步长
}
注意:这么写while循环的话,逻辑上比较顺畅的,但是有危险,在于本身是死循环,需要在合适的时候用break关键字跳出循环
比如
import java.util.*;
class Demo{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
//输入数字
System.out.print("输入一个数字:");
int n=s.nextInt();
while(true){
for(int i=2;i<=n;i++){
if(n%i==0){
System.out.print(i+" ");
n=n/i;
break;
}
}
if(n==1){
break;
}
}
}
}
例题
1.1
import java.util.*;
class Demo01{
public static void main (String[] args){
//提示输入a,b,c的值
System.out.print("请输入a,b,c的值:");
Scanner s=new Scanner(System.in);
double a=s.nextDouble();
double b=s.nextDouble();
double c=s.nextDouble();
//delt公式
double delt=b*b-4*a*c;
if(delt>0){
//当delt>0时的两个解
double r1=(-b+Math.sqrt(delt))/(2*a);
double r2=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r1=%.2f,r2=%.2f",r1,r2);
}else if(delt==0){
//当delt=0时的解
double r=-b/(2*a);
System.out.printf("r=%.2f",r);
}else{
//当delt=<0时的解
System.out.println("无实数解!");
}
}
}
1.2
import java.util.*;
class Demo03{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
//输入今天是周几
System.out.print("今天是周几:");
int today=s.nextInt();
//输入未来的几天
System.out.print("未来的几天:");
int future=s.nextInt();
//未来几天是周几的算法
int futureDay=(today+future)%7;
String todayStr="";
String futureDayStr="";
if(today==0){
todayStr="周日";
}else if(today==1){
todayStr="周一";
}else if(today==2){
todayStr="周二";
}else if(today==3){
todayStr="周三";
}else if(today==4){
todayStr="周四";
}else if(today==5){
todayStr="周五";
}else if(today==6){
todayStr="周六";
}
if(futureDay==0){
futureDayStr="周日";
}else if(futureDay==1){
futureDayStr="周一";
}else if(futureDay==2){
futureDayStr="周二";
}else if(futureDay==3){
futureDayStr="周三";
}else if(futureDay==4){
futureDayStr="周四";
}else if(futureDay==5){
futureDayStr="周五";
}else if(futureDay==6){
futureDayStr="周六";
}
System.out.println("今天是"+ todayStr+"未来几天是"+futureDayStr);
}
}
1.3
import java.util.*;
class Demo04{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
//输入数字
System.out.println("请输入一个数字:");
int num=s.nextInt();
int temp=num;
//拼接出该数的反序
int sum=0;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
if(sum==temp){
System.out.println("是回文");
}else{
System.out.println("不是回文数");
}
}
}
1.4
import java.util.*;
class Demo06{
public static void main(String[] args){
//1.输入数字
System.out.print("请输入一个数字:");
Scanner s=new Scanner(System.in);
int user=s.nextInt();
//2.产生随机数
int com=(int)(Math.random()*3);
String userStr="";
String comStr="";
switch(user){
case 0://if user==0
userStr="剪刀";
break;
case 1:
userStr="石头";
break;
case 2:
userStr="布";
break;
}
switch(com){
case 0://if user==0
comStr="剪刀";
break;
case 1:
comStr="石头";
break;
case 2:
comStr="布";
break;
}
//3.打印结果
if(user==com){
System.out.printf("用户是%s,电脑是%s,平局",userStr,comStr);
}else if(user==0&&com==2||user==1&&com==0||user==2&&com==1){
System.out.printf("用户是%s,电脑是%s,用户赢",userStr,comStr);
}else{
System.out.printf("用户是%s,电脑是%s,用户输",userStr,comStr);
}
}
}
1.5
import java.util.*;
class Demo07{
public static void main (String[] args){
Scanner input = new Scanner(System.in);
//输入年份
System.out.print("输入年份:");
int year = input.nextInt();
//输入月份
System.out.print("输入月份:");
int month = input.nextInt();
//输入日期
System.out.print("输入月份的日期:");
int day = input.nextInt();
//对特殊的1月和2月做处理
if (month == 1||month == 2) {
month = month+12;
year -= 1;
}
int h = (day + 26 * (month + 1) / 10 + (year % 100) +(year % 100) / 4 + (year / 100) / 4 + (year / 100) * 5) % 7;
switch(h) {
case 0:
System.out.println("周六");
break;
case 1:
System.out.println("周日");
break;
case 2:
System.out.println("周一");
break;
case 3:
System.out.println("周二");
break;
case 4:
System.out.println("周三");
break;
case 5:
System.out.println("周四");
break;
case 6:
System.out.println("周五");
break;
}
}
}
1.6
import java.util.*;
class Demo08{
public static void main(String[] args){
//1.输入点的坐标
System.out.print("请输入坐标点:");
Scanner s=new Scanner(System.in);
double x=s.nextDouble();
double y=s.nextDouble();
double xo=0;
double yo=0;
double radius=10;
//2.计算点到圆心之间的距离
double distance=Math.sqrt(Math.pow(x-xo,2)+Math.pow(y-yo,2));
//3.判断距离和半径之间的关系
if(distance>radius){
//距离>半径 点在圆外
System.out.println("点在圆外");
}else if(distance==radius){
//距离=半径 点在圆上
System.out.println("点在圆上");
}else{
//距离<半径 点在圆内
System.out.println("点在圆内");
}
}
1.7
import java.util.Scanner;
class Demo10{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.先输入大矩形的中心,宽和高
System.out.print("请输入第1个矩形的信息:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double w1=scanner.nextDouble();
double h1=scanner.nextDouble();
//2.再输入小矩形的中心,宽和高
System.out.print("请输入第2个矩形的信息:");
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double w2=scanner.nextDouble();
double h2=scanner.nextDouble();
double inXMin=x1-(w1-w2)/2;
double inXMax=x1+(w1-w2)/2;
double inYMin=y1-(h1-h2)/2;
double inYMax=y1+(h1-h2)/2;
double outXMin=x1-(w1+w2)/2;
double outXMax=x1+(w1+w2)/2;
double outYMin=y1-(h1+h2)/2;
double outYMax=y1+(h1+h2)/2;
if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
System.out.println("小矩形在大矩形里面!");
}else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
System.out.println("小矩形在大矩形外面!");
}else{
System.out.println("小矩形和大矩形相交!");
}
}
}
1.8
import java.util.Scanner;
public class Demo14 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//确定行数
System.out.print("请输入行数:");
int line=scanner.nextInt();
//打印行数
for(int i=1;i<=line;i++){
//打印空格
for(int k=1;k<=(line-i);k++){
if(line<10){
System.out.print(" ");
}else{
System.out.print(" ");
}
}
//打印数字
for(int x=-(i-1);x<=i-1;x++){
if(line<10){
System.out.printf("%-2d",Math.abs(x)+1);
}else{
System.out.printf("%-3d",Math.abs(x)+1);
}
}
//每行打印完换行
System.out.println();
}
}
}
1.9
import java.util.*;
class Demo{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
double sum=0;//总和
int pos=0;//正数的个数
int neg=0;//负数的个数
System.out.print("请输入若干数字:");
while(true){//进循环
int num=s.nextInt();
if(num!=0){
sum+=num;
if(num>0){
pos++;
}else{
neg++;
}
}else{
break;//跳出当前循环
}
}
if(pos+neg==0){
System.out.println("没有其他数字输入,只有0");
}else{
System.out.println("正数的个数"+pos);
System.out.println("负数的个数"+neg);
System.out.println("总和"+sum);
}
}
}