Javase day03

第三章 选择语句

3.1 比较运算符

  • 大于 >
  • 大于等于 >=
  • 小于 <
  • 小于等于 <=
  • 等于 ==
  • 不等于 !=

3.2 逻辑运算符

  • 单与 &
    有假则真。
  • 双与 &&
    有假则假。&&具有短路效果。左边是false,右边不执行。
  • 或 |
    有真则真。
  • 双或 ||
    ||和|都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。
  • 非 !
    非假则真,非真则假。
  • 异或 ^
    相同为假,不同为真。

3.3 boolean数据类型

boolean 数据类型声明一个具有值 true 或者 false 的变量 。

相等的关系操作符是两个等号 ( = = ) , 而不是一个等号 ( - ) , 后者是指斌值操作符
比较的结果是一个布尔值 : true ( 真 ) 或 false ( 假 ) 。 例如 , 下面的语句显示 true :

double radius » 1 ;
System . out . println ( radius > 0 ) ;

具有布尔值的变量称为布尔变量 ( boolean variable ) , boolean 数据类型用于声明布尔型变量 。 boolean 型变量可以是以下这两个值中的一个 : true 和 false 。 例如 , 下述语句将true 赋值给变 M lightsOn :

boolean lightsOn=true ;

3.4 if语句

if 语句是一个结构 , 允许程序确定执行的路径 。
在这里插入图片描述
单分支 if 语句是指当且仅当条件为 true 时执行一个动作 。 单分支 if 语句的语法如下 :

if ( 布尔表达式 ) {
语句 ( 组 ) :
}

给出一个程序 , 提示用户输入一个整数 。 如果该数字是 5 的倍数 , 打印HiFive 。

import java . util . Scanner ;

public class SimplelfDemo {
	public static void main ( String [ ] args ) {
		Scanner input=new Scanner ( System . in ) ;
		System , out . println( " Enter an integer :" ) ;
		int number=input . nextlnt();
		if ( number % 5 0 )
			System . out . pri ntlnC ' HiFive " ) ;

		if ( number % 2 0 )
			 System . out . println ( " HiEven " ) ;
}
}

3.5 双分支if-else语句

if - else 语句根据条件是真或者是假 , 决定执行的路径 。在这里插入图片描述
下面是双分支 if- else语句的语法 :

if ( 布尔表达式 > {
布尔表达式为其时执行的语句 ( 组 ) ;
}
else {
布尔表达式为假时执行的语句 ( 组 ) ;
}

检测一个数是奇数还是偶数 , 如下所示 :

if ( number X 2 == 0 )
	System.out.println( number + " is even . " ) ;
else
	System.out.println ( number + " is odd . " ) ;

3.6 嵌套的 if 语句和多分支 if - else 语句

if 语句可以在另外一个 if 语句中 , 形成嵌套的 if 语句 。
可以使用多分支 i f - else 语句来给出一个分数
可以使用多分支 i f - else 语句来给出一个分数

示例:

在这里插入图片描述

import java.util.Scanner;

public class Test1 { 
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in); 
		//1.获取身高和体重 
		System.out.print("Please enter your weight and hight:"); 
		double weight=scanner.nextDouble(); 
		double hight=scanner.nextDouble(); 
		//2.BMI=体重/身高^2 
		double BMI=weight/hight/hight; 
		//3.将BMI进行判断,输出相应的说明 
		if(BMI>=30.0){ 
			System.out.println("过胖");
		}else if(BMI>=25.0){
			System.out.println("超重");
		}else if(BMI>=18.5){ 
			System.out.println("正常"); }
		else{ 
			System.out.println("偏瘦"); 
		} 
	} 
}

在这里插入图片描述

import java.util.Scanner; 

public class Test2 { 
	public static void main(String[] args) { 
		Scanner scanner=new Scanner(System.in); 
		//1.获取用户输入的年份 
		System.out.print("Enter the year:"); 
		int year=scanner.nextInt(); 
		//2.将年份进行判断 year%4==0&&year%100!=0 || year%400==0 
		if( year%4==0&&year%100!=0 || year%400==0){ 
			System.out.println(year+"是闰年"); 
		}else{ 
			System.out.println(year+"是平年"); 
		} 
	} 
}

3.7 switch语句

switch 语句基于变量或者表达式的值来执行语句 。
在这里插入图片描述
下面是 switch 语句的完整语法 :

switch ( switch 表达式 ) {
  case1 : 语句 ( 组 ) 1 ;
  	break ;
  case2 : 语句 ( 组 ) 2 ;
  	break ;
  case 值 N : 语句 ( 组 ) Nv
  	break ;
default : R 认情况下执行的语句 ( 组 )
}

程序清单 3 - 5 中的 if 语句是根据单独的一个 true 或 false 条件做出选择的 。 根据变量status 的值 , 会有四种计算税金的情况 。 为了全面考虑所有的情况 , 需要使用嵌套的 if 语句 。 过多地使用嵌套的 if 语句会使程序很难阅读 。 Java 提供 switch 语句来有效地处理多重条件的问题 。 可以使用下述 switch 语句替换程序清单 3 - 5 中的嵌套 if 语句 :

switch ( status ) {
	case 0 : compute tax for single filers ;
		break ;
	case 1 : compute tax for married jointly or qualifying widow ( er ) ;
		break ;
	case 2 : compute tax for married filing separately ;
		break ;
	case B : compute tax for head of household ;
		break ;
	default : System . out . println ( " Error : invalid status " ) ;
		System . exit ( 1 ) ;
}

3.8 常见错误与陷阱

  • 忘记必要的括号
  • 在if行出现错误的分号
  • 对布尔值的冗余测试
  • 悬空else出现的歧义
  • 两个浮点数值的相等测试
  • 简化布尔变量赋值
  • 避免不同情形中的重复代码

本章小结

  1. boolean 类型变量可以存储值 true 或 false。
  2. 关系操作符(<、 <= 、 ==、 ! =、 >、 >=) 产生一个布尔值。
  3. 选择语句用于可选择的动作路径的编程。 选择语句有以下几种类型: 单分支 if 语句、 双分支 ifelse
    语句、 嵌套 if 语句、 多分支 if-else 语句、 switch 语句和条件表达式。
  4. 各种 if 语句都是基于布尔表达式来控制决定的。 根据表达式的值是 true 或 false, 这些语句选择两种
    可能路径中的一种。
  5. 布尔操作符&&、||、!和^对布尔值和布尔变量进行计算。
  6. 当对 p1&&p2 求值时, Java 先求 p1 的值, 如果 p1为 true, 再对 p2 求值; 如果 p1 为 false, 就不再对 P2 求值。 当对 p1ll p2 求值时, Java 先求 p1的值, 如果 p1为 false, 再对 p2 求值; 如果p1为 true, 就不再对 p2 求值。 因此, && 也称为条件与操作符或短路与操作符, 而 || 也称为条件或操作符或短路或操作符。
  7. switch 语句根据 char、 byte,short、 int 或者 String 类型的 switch 表达式来进行控制决定。
  8. 在 switch 语句中, 关键字 break 是可选的, 但它通常用在每个分支的结尾, 以中止执行 switch语
    句的剩余部分。 如果没有出现 break 语句, 则执行接下来的 case 语句。
  9. 表达式中的操作符按照括号、 操作符优先级以及操作符结合规则所确定的次序进行求值。
  10. 括号用于强制求值的顺序以任何顺序进行。
  11. 具有更高级优先权的操作符更早地进行操作。 对于同样优先级的操作符, 它们的结合规则确定操作的顺序。
  12. 除开赋值操作符的所有二元操作符都是左结合的, 赋值操作符是右结合的。

编程练习:

在这里插入图片描述

import java.util.Scanner;


public class Demo3_1 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.获取系数 a b c
		System.out.print("Enter a,b,c:");
		double a=scanner.nextDouble();
		double b=scanner.nextDouble();
		double c=scanner.nextDouble();
		//2.根据delt=b^2-4ac的值 进行判断
		double delt=b*b-4*a*c;
		if(delt>0){
			double x1=(-b+Math.sqrt(delt))/(2*a);
			double x2=(-b-Math.sqrt(delt))/(2*a);
			System.out.print("The equation has two roots "+x1+" and "+x2);
		}else if(delt==0){
			double x1=-b/(2*a);
			System.out.println("The equation has one root "+x1);
		}else{
			System.out.println("The equation has no real roots");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_2 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入系数和常数项
		System.out.print("Enter 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();
		//2.判断该方程组是否有解
		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.println("x is "+x+" , and y is "+y);
		}else{
			System.out.println("has no solution");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;



public class Demo3_3 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.获取今天的周几
		System.out.print("Enter today's day:");
		int today=scanner.nextInt();
		//2.获取几天后
		System.out.print("Enter the number of days elasped 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 Tuesday ");
				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 0:
				System.out.print("Today is Sunday ");
				break;
		}
		//3.输出今天周几 几天后周几
		switch((today+since)%7){
			case 1:
				System.out.print("the future day is Monday ");
				break;
			case 2:
				System.out.print("the future day is Tuesday ");
				break;
			case 3:
				System.out.print("the future day is Wednesday ");
				break;
			case 4:
				System.out.print("the future day is Thursday ");
				break;
			case 5:
				System.out.print("the future day is Friday ");
				break;
			case 6:
				System.out.print("the future day is Saturday ");
				break;
			case 0:
				System.out.print("the future day is Sunday ");
				break;
		}
	}
}

在这里插入图片描述

import java.util.Scanner;
public class Demo3_4 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.获取用户输入的前九位编号
		System.out.print("Enter the first 9 digits of an ISBN as integer:");
		int digit=scanner.nextInt();
		int digitOri=digit;
		//2.将九位编号分别取出
		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;
		//3.根据取出的前九位数字 计算第十位
		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);
		//4.拼接ISBN 输出
		String res="";
		if(d1==0){
			res+=0;//"0"
		}
		if(d10==10){
			res=res+digitOri+"X";
//			System.out.println(digitOri+"X");//+ 字符串连接符
		}else{
			res=res+digitOri+d10;
		}
		System.out.println(res);
	}
}

在这里插入图片描述

import java.util.Scanner;
public class Demo3_5 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入一个三位数字
		System.out.print("Enter a number:");
		int number=scanner.nextInt();
		//2.将三位数进行拆分
		int a=number%10;//123
		int b=number/100;//
		//3.对比个位与百位
		if(a==b){
			System.out.println("是回文数字");
		}else{
			System.out.println("不是!");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;
public class Demo3_6 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入玩家的选择
		System.out.print("Enter :");
		int p=scanner.nextInt();
		//2.随机生成选择
		int c=(int) (Math.random()*3);//[0,1)*3 [0,3)
		System.out.println(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(c==1){
			cStr="rock";
		}else{
			cStr="paper";
		}
		System.out.print("The computer is "+cStr+". You are "+pStr+".");
		switch (result) {
			case 0:
				System.out.println(" too! It is draw.");
				break;
			case 1:
				System.out.println("You lose.");
				break;
			case 2:
				System.out.println("You won.");
				break;
		}
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_7 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入三角形三边
		System.out.print("Enter the three side of a triangle:");
		double side1=scanner.nextDouble();
		double side2=scanner.nextDouble();
		double side3=scanner.nextDouble();
		//2.依次判断每个边的合法性
		if(side1+side2>side3&&side1+side3>side2&&side2+side3>side1){
			//3.如果合法 计算周长
			double l=side1+side2+side3;
			System.out.println("The length of triangle is "+l);
		}else{
			System.out.println("The side is Illegal");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_8 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.获取 年份 月 日
		System.out.print("Enter year:");
		int year=scanner.nextInt();
		System.out.print("Enter month:");
		int month=scanner.nextInt();
		System.out.print("Enter 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.println(h);
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_9 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.获取坐标点 x y
		System.out.print("Enter a point with two coordinates:");
		double x=scanner.nextDouble();
		double y=scanner.nextDouble();
		//2.求坐标点到圆心的距离
		double deltX=x-0;
		double deltY=y-0;
		double distance=Math.sqrt(deltX*deltX+deltY*deltY);
		//3.将距离和半径进行个比较
		if(distance>10){
			System.out.println("Point("+x+","+y+") is not in the circle.");
		}else{
			System.out.println("Point("+x+","+y+") is in the circle.");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;

public class Demo3_10 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入坐标点
		System.out.print("Enter a point:");
		double x=Math.abs(scanner.nextDouble());
		double y=Math.abs(scanner.nextDouble());
		//2.判断该坐标点x的量和y的量
		if(x>5||y>2.5){
			System.out.println("矩形外");
		}else{
			System.out.println("矩形内");
		}
	}
}

在这里插入图片描述

public class Demo3_11 {
	public static void main(String[] args) {
		//1.从[1,13]之间随机数点数
		int rank=(int) (1+Math.random()*13);
		//2.从[1,4]之间随机数花色
		int suit=(int) (1+Math.random()*4);
//		switch(){}
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_12 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入四个坐标点
		System.out.print("Enter 4 points:");
		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();
		//2.结合方程组 计算方程组中的系数和常数项
		double a=y1-y2;
		double b=-(x1-x2);
		double c=y3-y4;
		double d=-(x3-x4);
		double e=(y1-y2)*x1-(x1-x2)*y1;
		double f=(y3-y4)*x3-(x3-x4)*y3;
		//3.判断方程组是否有解
		double delt=a*d-b*c;
	
		if(delt==0){
			System.out.println("The two line are parallel");
		}else{
			double x=(e*d-b*f)/delt;
			double y=(a*f-e*c)/delt;
			System.out.println("x="+x+",y="+y);
		}
	}
}

在这里插入图片描述

import java.util.Scanner;
public class Demo3_13 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter x,y:");
		double x=scanner.nextDouble();
		double y=scanner.nextDouble();
		if(x>=0&&x<=200){
			if((200-x)/y>=2){
				System.out.println("int");
				return;//直接结束函数 谨慎使用
			}
		}
		System.out.println("out");
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_14 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入两个矩形的宽高和中心坐标
		System.out.print("Enter r1:");
		double xo=scanner.nextDouble();
		double yo=scanner.nextDouble();
		double W=scanner.nextDouble();
		double H=scanner.nextDouble();
		System.out.print("Enter r2:");
		double x=scanner.nextDouble();
		double y=scanner.nextDouble();
		double w=scanner.nextDouble();
		double h=scanner.nextDouble();
		//2.计算是否r2在r1内
		if(x<=(W/2-w/2+xo)&&x>=(xo-W/2+w/2)&&y<=(H/2-h/2+yo)&&y>=(yo-H/2+h/2)){
			System.out.println("r2 in r1");
			//计算是否r2在r1外
		}else if(x>=(W/2+w/2+xo)||x<=(xo-W/2-w/2)||y>=(H/2+h/2+yo)||y<=(yo-H/2-h/2)){
			System.out.println("r2 out r1");
		}else{
			System.out.println("r2 overlaps r1");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;


public class Demo3_15 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		//1.输入两个圆的信息 圆心坐标 半径
		System.out.print("Enter circle1:");
		double x1=scanner.nextDouble();
		double y1=scanner.nextDouble();
		double r1=scanner.nextDouble();
		System.out.print("Enter circle2:");
		double x2=scanner.nextDouble();
		double y2=scanner.nextDouble();
		double r2=scanner.nextDouble();
		//2.计算两圆心之间的距离
		double distance=Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2));
		//3.判断距离所表示的两圆之间的关系
		if(distance<=Math.abs(r1-r2)){
			System.out.println("c2 in c1");
		}else if(distance>=r1+r2){
			System.out.println("c2 out c1");
		}else{
			System.out.println("c2 overlaps c1");
		}
	}
}

在这里插入图片描述

import java.util.Scanner;
public class Demo3_16 {
	public static void main(String[] args) {
		//1.输入三个点的坐标 p0 p1 p2
		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)*(y2-y0)-(x2-x0)*(y1-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");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/santtde/article/details/83025167