选择
3.1 Boolean数据类型
要点提示:Boolean数据类型声明一个具有值true或者false的变量。
Java提供六种关系操作符(比较操作符),用于两个值得比较。
警告:相等的关系操作符是两个等号(==),而不是一个等号(=),后者是赋值操作符。
3.2 if语句
要点提示:if语句是一个结构,允许程序确定执行的路径。
单分支if语句是指当且仅当条件为true时执行一个动作。单分支if语句的语法如下:
if(布尔表达式){
语句(组);
}
if语句执行的流程图为:
注意:省略括号可以让代码更加简短,但是容易产生错误。当你返回去修改略去的代码时候,容易忘记加上括号。
3.3 双分支if-else语句
要点提示:if-else语句根据条件是真或者是假,决定执行的路径。
双分支if-else语句的语法:
if(布尔表达式){
布尔表达式为真时执行的语句(组);
}
else{
布尔表达式为假时执行的语句(组);
}
语句的流程图为:
3.4 常见的错误和陷阱
要点提示:忘记必要的括号,在错误的地方结束if语句,将==错用为=使用,悬空else分支,是选择语句的常见错误。if-else语句中重复的语句,以及测试双精度值相等是常见的陷阱。
常见错误有:
(1)忘记必要的括号
(2)在if行出现错误的分号
(3)对布尔值的冗余错误
(4)悬空else出现的歧义
(5)两个浮点数值的相等测试
常见的陷阱:
(1)简化布尔变量赋值
(2)避免不同情形中的重复代码
3.5 逻辑运算符
逻辑运算符!、&&、||和^可以用于产生复合布尔表达式。
3.6 switch语句
要点提示:switch语句基于变量或者表达式的值来执行语句。
Switch语句的完整语法是:
switch语句遵循的规则:
(1)switch表达式必须能计算出一个char、byte、short、int或者string类型值,必须总是用括号括住。
(2)关键字break是可选的。break语句会立即终止switch语句。
警告:不要忘记在需要的时候使用break语句。一旦匹配其中一个case,就从匹配的case处开始执行,直到遇到break语句或到达switch语句的的结束。
3.7 条件表达式
要点提示:条件表达式基于一个条件计算表达式的值。
产生随机数:Math.random()来获得一个0.0到1.0之间的随机double值,不包括1.0。
编写程序
1、 计算一元二次方程的两个根
import java.util.Scanner;
public class Day3_1 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//提醒用户输入三个数字
System.out.print("请输入a b c的值");
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
//先求出b^2-4ac的值
double m=b*b-4*a*c;
//判断b^2-4ac
if(m>0){
double r1=(-b+Math.sqrt(m))/2*a;
double r2=(-b-Math.sqrt(m))/2*a;
System.out.print("函数有两个实根"+r1+r2);
}else if(m==0){
double r1=-b/2*a;
System.out.print("函数有一个实根"+r1);
}else{
System.out.print("函数没有实根");
}
}
}
2、解线性方程,输入六个数,计算x=(ed-bf)/(ad-bc).y=(af-ec)/(ad-bc)
import java.util.Scanner;
public class Day3_2 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//提醒用户输入六个数字
System.out.println("输入六个值a b c d e f");
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
double d=scanner.nextDouble();
double e=scanner.nextDouble();
double f=scanner.nextDouble();
//先求出分母的值
double delt=a*d-b*c;
if(delt!=0){
double x=(e*d-b*f)/delt;
double y=(a*f-e*c)/delt;
System.out.print("x="+x);
System.out.print("y="+y);
}else{
System.out.print("方程无解");
}
}
}
3、输入代表今天日期的数字,0为周日,1为周一,2为周二…
在输入一个今天之后的天数,然后显示这天是星期几
import java.util.Scanner;
public class Day3_3 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//获取今天周几
System.out.print("Enter today's day:");
int Today=scanner.nextInt();
//获取几天后
System.out.print("Enter the number of days elapsed since today:");
int since=scanner.nextInt();
switch (Today%7){
case 1:
System.out.print("Today is Monday");
break;
case 2:
System.out.print("Today is Thusday");
break;
case 3:
System.out.print("Today is Wednesday");
break;
case 4:
System.out.print("Today is Thursday");
break;
case 5:
System.out.print("Today is Friday");
break;
case 6:
System.out.print("Today is Saturday");
break;
case 7:
System.out.print("Today is Sunday");
break;
}
//输入今天周几几天后周几
switch ((Today+since)%7){
case 1:
System.out.print("Today is Monday");
break;
case 2:
System.out.print("Today is Thusday");
break;
case 3:
System.out.print("Today is Wednesday");
break;
case 4:
System.out.print("Today is Thursday");
break;
case 5:
System.out.print("Today is Friday");
break;
case 6:
System.out.print("Today is Saturday");
break;
case 7:
System.out.print("Today is Sunday");
break;
}
}
}
4、国际标准书号以前是一个十位整数d1d2d3d4d5d6d7d8d9d10,最后一位d10是校验和,是由前9为数字计算出来的
import java.util.Scanner;
public class Day3_4 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//获取用户输入的前九位编号
System.out.print("Enter the first 9 digits of an ISBN as integer:");
//将九位编号取出s
int digit=scanner.nextInt();
int digitOri=digit;
System.out.println(digit);
int d9=digit%10;
digit/=10;
int d8=digit%10;
digit/=10;
int d7=digit%10;
digit/=10;
int d6=digit%10;
digit/=10;
int d5=digit%10;
digit/=10;
int d4=digit%10;
digit/=10;
int d3=digit%10;
digit/=10;
int d2=digit%10;
digit/=10;
int d1=digit%10;
//根据取出的九位计算第十位
int d10=(d1*1+d2*2+d3*3+d4*4+d5*5+d6*6+d7*7+d8*8+d9*9)%11;
System.out.println(d10);
String res="";
if (d1==0){
res+=0;
}
if(d10==10){
res=res+digitOri+"X";
// System.out.print(digitOri+"X");
}else{
res=res+digitOri+d10;
// System.out.print(""+digitOri+d10);
}
System.out.print(res);
}
}
5、输入一个三位数,判断他是否是回文数字
import java.util.Scanner;
public class Day3_5 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//输入一个三位数
System.out.print("Enter a number");
int number=scanner.nextInt();
//将三位数进行拆分
int a=number%10;
int b=number/100;
//对比个位跟百位
if(a==b){
System.out.print("是回文数字");
}else{
System.out.print("不是");
}}}
6、石头剪刀布游戏,输入0、1、2分别表示石头剪刀布。
import java.util.Scanner;
public class Day3_6 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//输入任一数 0 1 2
System.out.print("scissor(0),rock(1),paper(2):");
int p=scanner.nextInt();
int c=(int)(Math.random()*3);
//随机生成的选择
System.out.print(c);
int result=-1;
String cStr="";
String pStr="";
if(p==0){
result=(p+c+3)%3;
}
if(p==1){
result=(p+c+1)%3;
}
if(p==2){
result=(p+c+2)%3;
}
if(p==0){
pStr="scissor";
}else if(p==1){
pStr="rock";
}else{
pStr="paper";
}
if(c==0){
cStr="scissor";
}else if(p==1){
cStr="rock";
}else{
cStr="paper";
}
System.out.print("The computer is"+cStr+".You are"+pStr+".");
switch(result){
case 0:
System.out.print("too!It is a draw.");
break;
case 1:
System.out.print("You lose");
break;
case 2:
System.out.print("You win");
break;
}
}
}
7、读取三角形的三边,如果输入值合法就计算这三角形的周长
import java.util.Scanner;
public class Day3_7 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println("Enter the three side of a triangle:");
double side1=scanner.nextDouble();
double side2=scanner.nextDouble();
double side3=scanner.nextDouble();
if(side1+side2>side3&&side1+side3>side2&&side2+side3>side1){
double l=side1+side2+side3;
System.out.print("The leigth of the triangle is"+l);
}else{
System.out.print("输入的值不合法");
}
}}
8、计算某天是星期几,h是星期中的某一天(0为星期六,1为星期天,2为星期一…),q是某月的第几天,m是月份(3是三月,4是四月,。。。。一月跟二月分别记为上一年的13 14月。J是世纪数,K是该世纪的第几年。
package yy;
import java.util.Scanner;
public class Day3_8 {
public static void main(String[] args){
//获取年月日
Scanner scanner=new Scanner(System.in);
System.out.print("Ente year:");
int year=scanner.nextInt();
System.out.print("Ente month:");
int month=scanner.nextInt();
System.out.print("Ente the day of the month:");
int day=scanner.nextInt();
//隐含计算J世纪数,K该世纪第几年
if(month==1||month==2){
month+=12;
year--;
}
int j=year/100;
int k=year%100;
int h=(day+26*(month+1)/10+k+k/4+j/4+5*j)%7;
System.out.print(h);
}
}
9、输入一个点,判断这个点是否在圆内。
package yy;
import java.util.Scanner;
public class Day3_9 {
public static void main(String[] args){
//获取坐标点x y
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a point with two coordinates:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
//求坐标点到圆心的距离
double deltX=x-0;
double deltY=y-0;
double distance=Math.sqrt(deltX*deltX+deltY*deltY);
//将距离和半径进行比较
if (distance>10){
System.out.print("Point("+x+","+y+")is not in the circle");
}else{
System.out.print("Point("+x+","+y+")is in the circle");
}
}
}
10、输入一个点,判断这个点是否在以原点为中心,宽10,高5的矩形。
package yy;
import java.util.Scanner;
public class Day3_10 {
public static void main(String[] args){
//输入坐标点
Scanner scanner=new Scanner(System.in);
System.out.println("Enter a piont:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
//判断是否在矩形内
if (x>5||y>2.5){
System.out.println("在矩形外");
}else{
System.out.println("在矩形内");
}
}
}
11、从52张牌随机选一张,程序显示出该牌的大小跟牌的花色。
package yy;
public class Day3_11_2 {
public static void main(String[] args){
//[1,13]
int number=(int)(1+Math.random()*13);
//[1,4]
int colour=(int)(1+Math.random()*4);
colour=number%4;
switch(number){
case 1:
System.out.print("The card you picked is Ace");
break;
case 2:
System.out.print("The card you picked is 2");
break;
case 3:
System.out.print("The card you picked is 3");
break;
case 4:
System.out.print("The card you picked is 4");
break;
case 5:
System.out.print("The card you picked is 5");
break;
case 6:
System.out.print("The card you picked is 6");
break;
case 7:
System.out.print("The card you picked is 7");
break;
case 8:
System.out.print("The card you picked is 8");
break;
case 9:
System.out.print("The card you picked is 9");
break;
case 10:
System.out.print("The card you picked is 10");
break;
case 11:
System.out.print("The card you picked is Jack");
break;
case 12:
System.out.print("The card you picked is Queen");
break;
case 13:
System.out.print("The card you picked is King");
break;
}
switch(colour){
case 1:
System.out.print(" of clubs");
break;
case 2:
System.out.print(" of Diamonds");
break;
case 3:
System.out.print(" of Hearts");
break;
case 4:
System.out.print(" of Spades");
break;
}
}
}
12、判断两条直线是否相交还是平行。
package yy;
import java.util.Scanner;
public class Day3_12 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("4");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double x3=scanner.nextDouble();
double y3=scanner.nextDouble();
double x4=scanner.nextDouble();
double y4=scanner.nextDouble();
double a=y1-y2;
double b=-x1+x2;
double c=y3-y4;
double d=x4-x3;
double e=a*x1-b*y1;
double f=c*x3-c*y3;
//判断方程组是否有解
double delt=a*d-b*c;
if(delt==0){
System.out.print("");
}else{
double x=(e*d-b*f)/delt;
double y=(a*f-e*c)/delt;
System.out.print("x="+x);
System.out.print("y="+y);
}
}}
13、用户输入一个坐标点,判断这个点是否在该三角形中。
package yy;
import java.util.Scanner;
public class Day3_13 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a point's x- and y-coordinates:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
if(x>=0&&x<=200){
if((200-x)/y>=2);{
System.out.print("The point is in the triangle");
return;//直接结束函数
}
}
System.out.print("The point is in not the triangle");
}
}
14、输入两个矩形中的坐标,以及它的宽度和高,判断第二个是否在第一个内,还是和第一个重叠。
package yy;
import java.util.Scanner;
public class Day3_14 {
public static void main(String[] args){
//输入两个巨型的宽高和中心坐标
Scanner scanner=new Scanner(System.in);
System.out.print("Enter r1's center x-,y-coordnates,width,and height:");
double x0=scanner.nextDouble();
double y0=scanner.nextDouble();
double W=scanner.nextDouble();
double H=scanner.nextDouble();
System.out.print("Enter r2's center x-,y-coordnates,width,and height:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
double w=scanner.nextDouble();
double h=scanner.nextDouble();
if (x<=(W/2-w/2+x0)&&x>=(x0-W/2+w/2)&&y<=(H/2-h/2+y0)&&y>=(y0-H/2+h/2)){
System.out.print("r2 in r1");
}else if(x>=(W/2+w/2+x0)||y>=(H/2+h/2+y0)){
System.out.print("r2 out r1");
}else{
System.out.print("r2 overlaps r1");
}
}
}
15、输入两个圆的中心坐标和各自的半径,判断第二个是否在第一个内,还是与第一个重叠。
package yy;
import java.util.Scanner;
public class Day3_15 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter circle1's center x-,y-coordinates,and raudius:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double r1=scanner.nextDouble();
System.out.print("Enter circle2's center x-,y-coordinates,and raudius:");
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double r2=scanner.nextDouble();
double distance=Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
if(distance<=(Math.abs(r1-r2))){
System.out.print("circle2 is inside circle1");}
else if(distance>=r1+r2){System.out.print("circle2 does not overlap circle1");
}
else{System.out.print("circle2 overlaps circle1");
}
}
}
16、给定一个有向线段
import java.util.Scanner;
public class Day3_16 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter p0,p1,p2");
double x0=scanner.nextDouble();
double y0=scanner.nextDouble();
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double res=(x1-x0)*(y1-y0)-(x2-x0)*(y2-y0);
if(res>0){
System.out.println("p2 left to line");
}else if(res==0){
System.out.println("p2 on the line");
}else{
System.out.println("p2 right to line");
}
}
}