判断结构(if)
if 语句是一个结构,允许程序确定执行的路径。
Java 有几种类型的选择语句:单分支 if 语句、双分支 if-else 语句、嵌套 if 语句、多分支 if-else 语句、switch 语句和条件表达式。 单分支 if 语句是指当且仅当条件为 true 时执行一个动作。
单分支 if 语句的语法如下:
if (布尔表达式){
语句(组);
}
流程图为:
当指定条件为 true时单分支 if 语句执行一个操作。而当条件为 false时什么也不干。 但是,如果你希望在条件为 false 时也能执行一些动作,该怎么办呢?你可以使用双分支 if 语句。根据条件为 true 或 false, 双分支 if 语句可以指定不同的操作
双分支的if语句的语法如下:
if (布尔表达式){
布尔表达式为其时执行的语句(组);
} else{ 布尔表达式为假时执行的语句(组);
}
流程图为:
嵌套的 if语句和多分支 if-else 语句
if语句可以在另外一个 if语句中,形成嵌套的 if语句。if 或if-else 语句中的语句可以是任意合法的 Java语句,甚至可以是其他的if 或ifelse 语句。内层 if语句称为是嵌套在外层 if语句里的。内层 if语句还可以包含其他的 if 语句;事实上,对嵌套的深度没有限制。
基于知识点,我们接下来看看选择结构解决具体问题的代码实现:
class Class06{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);//创建Scanner对象,用于输入数据
System.out.println("请输入a、b、c:");//提示用户输入数据abc
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
double delt=b*b-4*a*c;//计算delt判别式的值
if(delt>0){//根据delt的值进行分类
double x1=(-b+Math.sqrt(delt))/2*a;
double x2=(-b-Math.sqrt(delt))/2*a;
System.out.println(x1+":"+x2);
}else if(delt==0){
double x=(-b-Math.sqrt(delt))/2*a;
System.out.println(x);
} else{
System.out.println("无实数解!");
}
}
}
运行结果为:
class Class08{
public static void main(String[] args){
String[] s={"scissor","rock","paper"};
Scanner scanner=new Scanner(System.in);
System.out.println("请输入:");//提示用户输入数据
int usr=scanner.nextInt();
Random random=new Random();//创建一个任意数对象
int com=random.nextInt(3);//输入[0,2)
if(usr<0||usr>2){
System.out.println("请输入0~2");
return;
}
if(usr==com){
System.out.println("用户是:"+s[usr]+",电脑是:"+s[com]+",平局");
}else if(usr-com==0||usr-com==-2){
System.out.println("用户是:"+s[usr]+",电脑是:"+s[com]+",用户胜");
}
else{
System.out.println("用户是:"+s[usr]+",电脑是:"+s[com]+",电脑胜");
}
}
}
运行结果为:
import java.util.Scanner;
class Demo05{
public static void main(String[] args){
Random random=new Random();
int comNumber=random.nextInt(90)+10;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个两位数:");//提示用户输入
System.out.println(comNumber);
int usrNumber=scanner.nextInt();
if(usrNumber<10||usrNumber>99){
System.out.println("输入数字错误!程序结束!");
return;//结束当前函数
}
int comNumberA=comNumber/10;
int comNumberB=comNumber%10;
int usrNumberA=usrNumber/10;
int usrNumberB=usrNumber%10;
if(comNumber==usrNumber){
System.out.println("奖金为10000美元!");
}else if(comNumberA==usrNumberB&&comNumberB==usrNumberA){
System.out.println("奖金为3000美元!");
} else if(comNumberA==usrNumberA||comNumberA==usrNumberB||
comNumberB==usrNumberA||comNumberB==usrNumberB){
System.out.println("奖金为1000美元!");
} else{
System.out.println("谢谢惠顾!");
}
}
}
运行结果为:
多分支结构(switch)
switch 语句基于变量或者表达式的值来执行语句。
有时候处理问题为了全面考虑所有的情况,需要使用嵌套的 if 语 句。过多地使用嵌套的 if 语句会使程序很难阅读。Java提供 switch 语句来有效地处理多重 条件的问题。
switch 语句遵从下述规则:
① switch 表达式必须能计算出一个 char、byte、short,int或者 String 型值,并且必 须总是要用括号括住。
② valuel,. . . ,valueN 必须与 switch 表 达 式 的 值 具 有 相 同 的 数 据 类 型。注意: valuel, valueN 都是常量表达式,也就是说这里的表达式是不能包含变量的,例如,不 允许出现 1+X。
③ 当 switch 表达式的值与 case 语句的值相匹配时,执行从该 case开始的语句,直到 遇到一个 break 语句或到达该switch 语句的结束。
④ 默认情况(default)是可选的,当没有一个给出的 case 与 switch 表达式匹配时, 用来执行该操作。
⑤ 关键字 break 是可选的。break 语句会立即终止 switch 语句
注意:不要忘记在需要的时候使用 break 语句。一旦匹配其中一个 case, 就从匹配的case 处开始执行,直到遇到 break 语句或到达 switch 语句的结束。
循环结构(while和do while和for)
while循环
while 循环在条件为真的情况下,重复地执行语句。
while 循环的语法如下 :
while( 循环继续条件) {
// 循环体 语句 ( 组);
}
流程图如下:
下面的题应用到了while循环,我们具体来解一下这两道题:
class Home12{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个十进制数:");//提示用户输入
int num=scanner.nextInt();
String str="";//创建一个空字符串
while(true){
int rest=num%16;
if(rest<10){
str=rest+str;
}else{
str=(char)(55+rest)+str;//转换为ASII码表中的A~F
}
num=num/16;
if(num==0){
break;
}
}
System.out.println(str);
}
}
运行结果为:
class Class14{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int number=scanner.nextInt();
while(true){
boolean flag=true;//结束
for(int i=2;i<number;i++){
if(number%i==0){
System.out.print(i+",");
number=number/i;
flag=false;//未结束
break;
}
}
if(flag){
System.out.print(number+".");
break; }
}
}
}
运行结果为:
do-while循环
do-while 循环和 while 循环基本一样,不同的是它先执行循环体一次,然后判 断循环继续条件。 do-while 循环是 while 循环的变体。
它的语法如下:
do{
// 循环体;
语句(组);
} while ( 循环继续条件);
流程图如下:
下面这题应用到了do-while循环,我们具体来解一下这道题:
class Home13{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter an integer,the input ends if it is 0:");//提示用户输入
int value=0;
int total=0;
int positives=0;
int negatives=0;
int sum=0;
double average=0;
do{
value=scanner.nextInt();
if(value>0){
positives=positives+1;//正数个数加一
}if(value<0){
negatives=negatives+1;//负数个数加一
}
sum=sum+value;
}while(value!=0);
total=negatives+positives;
average=(double)sum/total;
System.out.println("The number of positives is"+positives);
System.out.println("The number of negatives is"+negatives);
System.out.println("The tatal is"+total);
System.out.println("The average is"+average);
}
}
运行结果为:
for循环
通常,for 循环的语法如下所示:
for (初始操作;循环继续条件;每次迭代后的操作) {
// 循环体;
语句(组); }
流程图如下:
下面的题应用到了while循环,我们具体来解一下这道几题:
class Class13{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入两个数:");//提示用户输入
int a=scanner.nextInt();
int b=scanner.nextInt();
int gcd=1;
for(int i=2;i<=(b<a?b:a);i++){
if(a%i==0 && b%i==0){
gcd=i;
}
}
System.out.println(gcd);
}
}
运行结果为:
public static void main(String[] args){
for(int i=1;i<=7;i++){
for(int k=1;k<=7-i;k++){
System.out.print(" ");
}
for(int j=-(i-1);j<=i-1;j++){
System.out.print(Math.abs(j)+1+" ");
}
System.out.println();
}
}
}
运行结果为:
![](
public static void main(String[] args){
double e=0;
for(int i=0;i<=10000;i++){
double multi=1;
for(int j=1;j<=i;j++){
multi*=j;
}
e+=1/multi;
}
System.out.println(e);
}
}
运行结果为:
public static void main(String[] args){
for(int i=1;i<=8;i++){
for(int k=1;k<=8-i;k++){
System.out.print(" ");
}
for(int j=-(i-1);j<=i-1;j++){
System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(j)));
}
System.out.println();
}
}
}
运行结果为: