Java语言程序设计.基础篇 第三章 选择
下面附带第三章的一些习题
- 单分支 if 语句是指当且仅当条件为 true 时执行一个动作,语句设计如下:
if(布尔表达式){
语句(组)
}

- 双分支if-else语句:
if (布尔表达式){
布尔表达式为其时执行的语句(组);
} else{
布尔表达式为假时执行的语句(组);
}

- switch语句基于变量或者表达式的值来执行语句:
switch(switch 表达式){
case 值1: 语句(组)1;
break;
case 值 2: 语句(组)2
; break;
…
case ֵ N:
语句(组)Nv break;
default:默认情况下执行的语句(组)
}
- switch 表达式必须能计算出一个 char、byte、short,int或者 String 型值,并且必须总是要用括号括住。
3.12(回文数字)编写一个程序,提示用户输人一个三位的整数,然后确定它是否回文数字。当从左到右,以及从右到左都是一样的话,这个数字称为回文数
程序如下:
import java.util.*; class Demo03{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.print("请输入一个三位数字:"); int number = scanner.nextInt(); if(number>999||number<100){ System.out.println("输入的数字有误!"); return ; } int numberA = number/100; int numberB = (number%100)%10; if(numberA == numberB){ System.out.println("此数为回文数字"); }else{ System.out.println("此数不是回文数字"); } } }
3.15 (游戏:彩票)修改程序清单 3-8,产生三位整数的彩票。程序提示用户输入一个三位整数,然 后依照下面的规则判定用户是否赢得奖金:
1 )如果用户输人的所有数匹配彩票的确切顺序,奖金是10000美元。
2) 如果用户输人的所有数匹配彩票的所有数字,奖金是3000美元。
3 )如果用户输人的其中一个数匹配彩票号码中的一个数,奖金是1000美元。
import java.util.*; class Home5{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); Random random = new Random(); int comnumber = (random.nextInt(90)+10)*10; System.out.print("请输入三位数字:"); int number = scanner.nextInt(); if(number>999||number<100){ System.out.println("输入错误,程序结束"); return ; } int numberA = number/100; int numberB = number/10%10; int numberC = number%10; int comnumberA = comnumber/100; int comnumberB = comnumber/10%10; int comnumberC = comnumber%10; if(number==comnumber){ System.out.println("恭喜你,获得10000美元"); }else if((numberA==comnumberA&&numberB==comnumberC&&numberC==comnumberB)|| (numberA==comnumberB&&numberB==comnumberA&&numberC==comnumberC)|| (numberA==comnumberB&&numberB==comnumberC&&numberC==comnumberA)|| (numberA==comnumberC&&numberB==comnumberA&&numberC==comnumberB)|| (numberA==comnumberC&&numberB==comnumberB&&numberC==comnumberA)){ System.out.println("恭喜你,获得3000美元"); }else if((numberA==comnumberA)||(numberA==comnumberB)||(numberA==comnumberC)|| (numberB==comnumberB)||(numberB==comnumberB)||(numberB==comnumberC)|| (numberC==comnumberA)||(numberC==comnumberB)||(numberC==comnumberC)){ System.out.println("恭喜你,获得1000美元"); }else{ System.out.println("谢谢参与"); } } }
本题主要运用的是嵌套的if-else控制语句,并且要注意语句里面的布尔表达式的运用;一个三位数字除以100,就是取它的第一位数字,除以10然后对10取余的意思就是,将这个三位数的第二位也就是十位取出来,然后用这种方法将它的个位取出。
3.17 (游戏:剪刀、石头、布)编写可以玩流行的剪刀-石头-布游戏的程序。(剪刀可以剪布,石头可以砸剪刀,而布可以包石头。)程序提示用户随机产生一个数,这个数为 0、1或者 2, 分别表 示石头、剪刀和布。程序提示用户输入值 0、1或者 2, 然后显示一条消息,表明用户和计算机谁赢了游戏,谁输了游戏,或是打成平手
import java.util.*; class Demo02{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); Random random = new Random(); String[] arr={"剪刀","石头","布"}; System.out.print("输入你的信息:"); int usr = scanner.nextInt(); int com = random.nextInt(3); if(usr>3||usr<0){ System.out.println("输入有误"); return; } if(usr==com){ System.out.println("电脑是"+arr[com]+",你是"+arr[usr]+",平局"); }else if(usr-com==1||usr-com==-2){ System.out.println("电脑是"+arr[com]+",你是"+arr[usr]+",你赢了"); }else{ System.out.println("电脑是"+arr[com]+",你是"+arr[usr]+",你输了"); } } }
本题的话,还是用嵌套的if-else语句,但是大家需要注意的一点是,用户开始输入的时候判断一下输入的数字是否在游戏范围里面和里面的一些布尔表达式。
3.19 (计算三角形的周长)编写程序,读取三角形的三条边,如果输人值合法就计算这个三角形的周长;否则,显示这些输入值不合法。如果任意两条边的和大于第三边,那么输人值都是合法的。
*/ import java.util.*; class Home07{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.print("请输入三角形的三条边:"); double a = scanner.nextDouble(); double b = scanner.nextDouble(); double c = scanner.nextDouble(); if(a+b>c&&a+c>b&&b+c>a){ System.out.println("三边能构成三角形"); }else{ System.out.println("三边不能构成三角形"); } } }
此题需要注意的是,三角形的任意两条边之和大于第三边和if-else的运用
import java.util.*; class Demo04{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.print("请输入一对点坐标:"); double x = scanner.nextDouble(); double y = scanner.nextDouble(); double s = Math.sqrt(x*x+y*y); //计算此点坐标距离圆心的距离 if(s<10){ System.out.println("点("+x+","+y+")"+"是圆内的点"); }else{ System.out.println("点("+x+","+y+")"+"不是圆内的点"); } } }
本道题主要用的是,点到点的直线距离,然后用if-else语句判断是否在圆内。
3.28 (几何:两个矩形)编写一个程序,提示用户输入两个矩形中点的x 坐标和y 坐标以及它们的宽度和高度,然后判定第二个矩形是在第一个矩形内,还是和第一个矩形重叠。
import java.util.*; class Home10{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个矩形的中心点坐标x,y和长,高:"); double x1 = scanner.nextDouble(); double y1 = scanner.nextDouble(); double w1 = scanner.nextDouble(); double h1 = scanner.nextDouble(); System.out.print("请输入第二个矩形的中心点坐标x,y和长,高:"); double x2 = scanner.nextDouble(); double y2 = scanner.nextDouble(); double w2 = scanner.nextDouble(); double h2 = scanner.nextDouble(); //计算第二个矩形中心点的范围 double inMinX = x1-(w1-w2)/2; double inMaxX = x1+(w1-w2)/2; double inMinY = y1-(h1-h2)/2; double inMaxY = y1+(h1-h2)/2; double outMinX = x1-(w1+w2)/2; double outMaxX = x1+(w1+w2)/2; double outMinY = y1-(h1+h2)/2; double outMaxY = y1+(h1+h2)/2; //判断是否在内或外或嵌套 if(x2>=inMinX&&x2<=inMaxX&&y2>=inMinY&&y2<=inMaxY){ System.out.println("在内"); }else if(x2>=outMaxX||x2<=outMinX||y2>=outMaxY||y2<=outMinY){ System.out.println("在外"); }else{ System.out.println("嵌套"); } } }
此题重要的是算出第二个矩形中心点坐标对于第一个矩形的范围,分别求出第二个矩形中心点在第一个矩形内的左上,右上,左下和右下的坐标,也要求出第二个矩形中心点在第一个矩形外且贴着第一个矩形边的左上,右上,左下和右下的坐标,用这些坐标来判断第二个矩形的位置。
3.31(金融:货币兑换)编写一个程序,提示用户输入从美元到人民币的兑换汇率。提示用户输入 0 表示从美元兑换为人民币,输入1表示从人民币兑换为美元。继而提示用户输入美元数量或者人民币数量,分别兑换为另外一种货币.
import java.util.*; class Class11{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.print("请输入美元到人名币的汇率:"); double rate = scanner.nextDouble(); System.out.print("输入0选择美元到人名币,输入1选择人名币到美元:"); int x = scanner.nextInt(); if(rate>=15||rate<0){ System.out.println("输入的汇率超出正常范围"); return; } if(x==0){ System.out.print("请输入美元:"); double Dollar = scanner.nextDouble(); double RMB = Dollar*6.81; System.out.println(Dollar+"美元是"+RMB+"元"); }else if(x==1){ System.out.print("请输入人民币:"); double RMB1 = scanner.nextDouble(); double Dollar1 = RMB1/6.81; System.out.println(RMB1+"元是"+Dollar1+"美元"); }else{ System.out.println("选择错误"); } } }
以上程序中出现的random();方法,生成大于等于0.0且小于1.0的double型随机数(0.0<=Math.random()<1.0)
也就是[0,1)左闭右开