Day04JavaSE——流程控制 & 方法
条件语句
if条件语句
switch语句
if条件语句
if语句的条件式一定是一个结果为布尔类型的表达式,if语句分为if-else语句和if-else if-else多分支语句
if-else语句
语法:
if(boolean表达式){
语句序列
}
//键盘录入三个数,并求出三个数的最大值
import java.util.Scanner;
public class sequence {
public static void main(String[] args) {
//调用Scnner键盘输入包,打出这句代码IDEA会自动调用Scnner包
//第3行代码就是调用Scnner包,但是其他第三方记事本需要你自行将第一句代码写出来
Scanner sc = new Scanner(System.in);
//在屏幕上提示用户输入第一个整数
System.out.println("请输入第一个整数");
//将用户输入的第一个整数赋值给新定义变量i1
//若用户输入的是字符串,则需要定义变量类型为string
int i1 = sc.nextInt();
System.out.println("请输入第二个整数");
int i2 = sc.nextInt();
System.out.println("输入第三个整数");
int i3 = sc.nextInt();
int max1 = i1 > i2 ? i1 : i2;
int max2 = max1 > i3 ? max1 : i3;
System.out.println("最大值为" + max2);
}
}
键盘录入三个数,并求出三个数的最大值流程图
多条件选择语句
语法:
if(条件1){
代码1
}else if(条件2){
代码2
}else if(条件3){
代码3
}else{
代码4}
流程图
//根据成绩范围,输出优良中差
public class sequence {
public static void main(String[] args) {
//根据成绩范围,输出优良中差
Scanner sc=new Scanner(System.in);
System.out.println("请输入分数");
int score=sc.nextInt();
if(score>=90 & score<=100){
System.out.println("A等");
}else if(score>=80&score<90){
System.out.println("B等");
}else if(score>=70&score<80){
System.out.println("C等");
}else if(score>=60&score<70){
System.out.println("D等");
}else if(score<60){
System.out.println("E等");
}
}
}
switch多分支语句
语法:
switch(表达式){
case 常量值1:
语句1:
break;
case 常量值2:
语句2:
break;
case 常量值3:
语句3:
break;
…………………………
case 常量值n:
语句n:
break;
default:
语句n+1;
break;
}
-
switch注意的事项
switch语句所支持的类型,byte short int char JDK1.5之后,支持枚举类型
switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举(什么是枚举,以后再讲)
JDK7以后可以是String
JDK1.7 之后执行 字符串类型
case 匹配项:case 后面只能写常量,不能写变量
多个case的值不能出现重复的值
多个case项 数据类型一致
default: 所有case项都没有匹配上,那就执行默认项
default: 不是必须要提供的,也不是说一定要放在最后面,放在哪了都行,但是无论放在哪里,default一定是其他条件都不符合的时候才执行
break 中断,总用就是用来结束switch语句
break 你忘了写,或着说你故意就不写。语法不报错 ,但是会发生一种现象,叫做case穿透,你可以利用这种现象 -
if与switch的区别
if(布尔类型)if是对布尔类型结果进行判断例如范围,常量
switch只能对某些常量进行判断,不能判断范围
//输入月份,对应生成什么季节,利用缺少break会穿透特性
import java.util.Scanner;
public class practice1 {
public static void main(String[] args) {
while(true){
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份");
int month= sc.nextInt();
switch(month){
case 1:
case 2:
case 3:
System.out.println(month + "月是春季");
break;
case 4:
case 5:
case 6:
System.out.println(month + "月是夏季");
break;
case 7:
case 8:
case 9:
System.out.println(month + "月是秋季");
break;
case 10:
case 11:
case 12:
System.out.println(month + "月是冬季");
break;
default:
System.out.println("输入有误,请重新输入");
break;
}
}
}
}
用if语句实现同样的功能
import java.util.Scanner;
public class practice2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Plesase input month");
int month=sc.nextInt();
if(month<=3){
System.out.println(month + "月是春季");
}else if(month<=6){
System.out.println(month + "月是夏季");
}else if(month<=9){
System.out.println(month + "月是秋季");
}else if(month<=12){
System.out.println(month + "月是冬季");
}else{
System.out.println("输入有误,请重新输入");
}
}
}
循环语句
循环语句就是在满足一定条件的情况下反复执行某一个操作。Java中提供了3种常用的循环。
分别是while语句,do……while语句和for语句
for语句
语法
for(表达式1;表达式2;表达式3){
语句序列
}
练习
//1-100之间的偶数和,奇数和
public class practice1 {
public static void main(String[] args) {
int add=0;
int even=0;
for (int i = 1; i < 101; i++) {
if(i%2==0){
even+=i;
}else if(i%2!=0){
add+=i;
}
}
System.out.println("1-100之间的偶数和为" + even);
System.out.println("1-100之间的奇数和为" + add);
}
}
//计算1000以内的水仙花数
public class practice2 {
public static void main(String[] args) {
int count=0;
for (int i = 100; i < 1000; i++) {
if(i==(i/100)*(i/100)*(i/100)+(i/10%10)*(i/10%10)*(i/10%10)+(i%10)*(i%10)*(i%10)){
System.out.println(i);
count++;
}
}
System.out.println("水仙花数共有"+count+"个");
System.out.println(153/100);
System.out.println(153%100/10);
System.out.println(153%10);
}
}
while语句
语法:
while(条件表达式){
执行语句
}
//用while实现1-100之间的偶数和,奇数和
public class practice2 {
public static void main(String[] args) {
int i=1;
int add=0;
int even=0;
while(i<=100){
if(i%2==0){
even+=i;
i++;
}else if(i%2!=0){
add+=i;
i++;
}
}
System.out.println("1-100之间的偶数和为" + even);
System.out.println("1-100之间的奇数和为" + add);
}
}
//用while实现水仙花数
public class practice2 {
public static void main(String[] args) {
int i=100;
int flowerNumber=0;
int flower=0;
while(i<=999){
double i1=Math.pow(i/100,3);
double i2=Math.pow(i%100/10,3);
double i3=Math.pow(i%10,3);
if((i1+i2+i3)==i){
System.out.println(i);
flowerNumber++;
}
i++;
}
System.out.println(flowerNumber);
}
}
Math函数的调用(上面代码中用过)
-
平方根
double x=4; double y=Math.sqrt(x); System.out.println(y); //prints 2.0
-
幂运算
double y=Matn.pow(x,a); 因为x,y都是double型变量,所以算幂结果也用double承载
y=xa
-
三角函数
Math.sin Math.cos Math.tan Math.atan Math.atan2
-
指数函数
Math.exp Math.log Math.log10
-
pi和E
Math.PI Math.E
调用数学函数包可以不用再方法名和常量名前加前缀“Math”,包调用方法如下
import static java.lang.Math.*;
使用:System.out.println(sqrt(PI));
do……while语句
语法:
do{
执行语句
}while(条件表达式);
//用do-while输出1-10
public class practice3 {
public static void main(String[] args) {
int i=1;
do{
System.out.println(i);
i++;
}while(i<=10);
}
}
三种循环结构的区别&死循环
(1)do...while循环至少执行一次循环体。
而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
(2)如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。
因为变量及早的从内存中消失,可以提高内存的使用效率。
建议优先考虑for循环,然后是while循环 ,最后是do...while循环
(3)两种最简单的死循环格式
while(true){...}
for(;;){...}
循环控制语句
break语句
//打印2次java基础班
/*break的作用是跳出这个循环,直接开始执行下一个模块的语句*/
public class pracytice5 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if(i%3==0){
//break;
System.out.println("java基础");
}
System.out.println("java基础");
}
}
}
//break语句还有一个作用就是跳出多层循环(几乎不使用)
/*要想实现这个效果,就必须知道一个东西;带标签的语句;
格式:标签名:语句*/
continue语句
//打印7次java基础班
/*continue的作用也是跳出循环,只是continue是跳出本次循环,重新回到语句的判断条件部分重新执行下一次循环,而break是世界中断这个循环,不再执行本循环代码块,直接去执行下一块代码*/
public class pracytice5 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if(i%3==0){
continue;
System.out.println("java基础");
}
System.out.println("java基础");
}
}
}
练习
public class pracytice5 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if(i%3==0){
//break; //打印2次
//continue; //打印7次
// System.out.println("java基础"); //打印13次
}
System.out.println("java基础");
}
}
}
循环嵌套练习
public class practice1 {
public static void main(String[] args) {
for(int i=1;i<=4;i++){
for(int j=i;j<4;j++){
System.out.print(" ");
}
for(int k=1;k<=i*2-1;k++){
System.out.print("*");
}
System.out.println();
}
}
}
-
使用双重循环实现键盘输入行数,列数输出正三角形,效果如下
import java.util.Scanner; public class practice1 { public static void main(String[] args) { //根据键盘录入行数、列数,在控制台输出三角形的星星阵列 Scanner sc = new Scanner(System.in); System.out.println("请输入行数"); int hang=sc.nextInt(); System.out.println("请输入列数"); int lie=sc.nextInt(); output(hang); } public static void output(int i){ for(i=1;i<=4;i++){ for(int j=i;j<4;j++){ System.out.print(" "); } for(int k=1;k<=i*2-1;k++){ System.out.print("*"); } System.out.println(); } } }
-
根据键盘录入行数、列数,在控制台输出正方形的星星阵列
import java.util.Scanner; public class practice1 { public static void main(String[] args) { //根据键盘录入行数、列数,在控制台输出正方形的星星阵列 Scanner sc = new Scanner(System.in); System.out.println("请输入行数"); int hang=sc.nextInt(); System.out.println("请输入列数"); int lie=sc.nextInt(); outputSquire(hang,lie); } public static void outputTriangle(int i){ for(i=1;i<=4;i++){ for(int j=i;j<4;j++){ System.out.print(" "); } for(int k=1;k<=i*2-1;k++){ System.out.print("*"); } System.out.println(); } } public static void outputSquire(int i,int j){ for(int k=1;k<=i;k++){ for(int h=1;h<=j;h++){ System.out.print("*"); } System.out.println(); } } }
-
根据键盘输入,打印乘法表
import java.util.Scanner; public class practice { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入被乘数"); int hang=sc.nextInt(); outputTable(hang); /*//\t是转义字符 空一格TAB位 //System.out.println(); //\n是一个转义字符,是换行符 System.out.print("\n");*/ } //此处定义了一个方法 public static void outputTable(int i) { for (int k = 1; k <= i; k++) { for (int j = 1; j <= k; j++) { System.out.print(k + "*" + j + "=" + (k * j) + " "); } System.out.println(); } } }
方法&案例分析
public class Method {
public static void main(String[] args) {
//java中的方法就是封装一段功能逻辑,以实现代码的复用性(相当于C中的功能子函数)
/*如何定义一个方法:
* 1、仿照main方法建立方法
* 2、方法定义在类中,方法与方法是平级关系,不能嵌套定义
* 3、定义方法的语法:
* 权限修饰符 状态修饰符 返回值类型 方法名(参数){方法体}
* public static void send(){
* 方法体,你要实现的功能逻辑代码
*
* }
* 4、方法不调用不执行,main由JVM自动调用;
* 5、在main中调用方法:通过方法名直接调用*/
add();
add2();
add3(5,6);
}
public static void add(){
int a=20;
int b=20;
int sum=a+b;
System.out.println("sum" + sum);
}
public static double add2() {
int a=20;
float b=20.111F;
float sum=a+b;
System.out.println("sum" + sum);
//返回值,返回结果是否使用不是必须的,但是必须返回
return sum;
}
public static int add3(int a,int b){
return a+b;
}
}
-
返回值类型
System.out.println("------------返回值类型------------"); /*设计一个方法,计算两个数的和 * 要在下面的代码中使用add方法执行计算的结果*/ //返回值类型:void代表没有明确的返回值类型 //若你的方法,要返回数据,那么你就要明确,你的方法,要返回什么样的类型数据 //若你的方法,一旦明确了返回值类型,那么必须通过关键字return来带回与你声明的返回数据类型一致的值 double r=add2(); System.out.println(100 + r); System.out.println("------------返回return关键字------------"); //return:结束方法,并返回 //方法最后默认存在return //你的方法的返回值类型是void,return可以不写
-
方法的参数设置
System.out.println("---------------方法的参数设置---------------"); /*语法:(数据类型 参数名,数据类型 参数名,……) 形式参数 参数1 参数2 public static int add(int a, int b){ return a+b; } 形参的作用:就是用来接收调用方法时,所传入的数据 如果我们在调用方法时,方法需要参数,那我们就需要传入相应的参数 参数类型和参数个数与方法定义的形参一致 我们吧调用方法时,传入的参数,叫做实际参数,简称实参 如果一个方法有返回值,我们可以输出调用,例如: System.out.println(add(i,j)); 这样做的前提是add方法有返回值 以后我们设计方法需要考虑方法要不要返回值 要不要参数,要几个参数,什么类型(两个明确)*/ int i=200; int j=300; System.out.println(add3(i,j));
-
方法的重载
public class practice2 { public static void main(String[] args) { //求两个数相加的结果 System.out.println(add(2,3)); //求三个数相加的结果 System.out.println(add(2,3,4)); //求四个数相加的结果 System.out.println(add(2,3,4,5)); //允许一个类中出现多个同名方法,只要他们的形参个数或形参类型不一样即可 //在调用时,会根据传入的参数个数和参数类型自动匹配 //不会根据返回值类型区分,只与形参的个数或类型有关 } public static int add(int a,int b) { return a+b; } public static int add(int a,int b,int c) { return a+b+c; } public static int add(int a,int b,int c,int d) { return a+b+c+d; } }
方法重载概述
在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同,与返回值无关。
参数列表不同:参数个数不同, 参数类型不同简言之,在同一个类中,允许同名方法存在,但是必须以参数个数或者参数类型进行区分。
方法案例分析
//A:案例演示: 需求:根据键盘录入的数据输出对应的乘法表 import java.util.Scanner; public class practice { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入被乘数"); int hang=sc.nextInt(); outputTable(hang); /*//\t是转义字符 空一格TAB位 //System.out.println(); //\n是一个转义字符,是换行符 System.out.print("\n");*/ } //此处定义了一个方法 public static void outputTable(int i) { for (int k = 1; k <= i; k++) { for (int j = 1; j <= k; j++) { System.out.print(k + "*" + j + "=" + (k * j) + " "); } System.out.println(); } } }
/*案例演示 需求:根据键盘录入的行数和列数,在控制台输出星阵列*/ import java.util.Scanner; public class practice1 { public static void main(String[] args) { //根据键盘录入行数、列数,在控制台输出星星阵列 Scanner sc = new Scanner(System.in); System.out.println("请输入行数"); int hang=sc.nextInt(); System.out.println("请输入列数"); int lie=sc.nextInt(); outputTriangle(hang); outputSquire(hang,lie); } //此处为输出三角形星星阵列 public static void outputTriangle(int i){ for(i=1;i<=4;i++){ for(int j=i;j<4;j++){ System.out.print(" "); } for(int k=1;k<=i*2-1;k++){ System.out.print("*"); } System.out.println(); } System.out.println(); } //此处为输出正方形星星阵列 public static void outputSquire(int i,int j){ for(int k=1;k<=i;k++){ for(int h=1;h<=j;h++){ System.out.print("*"); } System.out.println(); } } }
public class practice1 { public static void main(String[] args) { //根据键盘录入行数、列数,在控制台输出星星阵列 Scanner sc = new Scanner(System.in); System.out.println("请输入行数"); int hang=sc.nextInt(); System.out.println("请输入列数"); int lie=sc.nextInt(); outputTriangle(hang); outputSquire(hang,lie); } //此处为输出三角形星星阵列 public static void outputTriangle(int i){ for(i=1;i<=4;i++){ for(int j=i;j<4;j++){ System.out.print(" "); } for(int k=1;k<=i*2-1;k++){ System.out.print("*"); } System.out.println(); } System.out.println(); } //此处为输出正方形星星阵列 public static void outputSquire(int i,int j){ for(int k=1;k<=i;k++){ for(int h=1;h<=j;h++){ System.out.print("*"); } System.out.println(); } } }