-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、流程控制语句
流程控制语句主要分为三类,分别为:顺序结构、选择结构和循环结构。
顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行。流程图如下:
class OrderDemo{
public static void main(String[] args){
System.out.println("程序不温不火运行中...");
System.out.println("程序准备");
System.out.println("程序开始运行...");
System.out.println("程序没有bug ^_^ ");
System.out.println("崩溃了......");
}
}
选择结构
也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句
if语句
格式1 :
if (关系表达式){
语句体;
}
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
注意事项:
关系表达式无论简单还是复杂,结果必须是boolean类型
if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
一般来说:有左大括号就没有分号,有分号就没有左大括号
if语句格式二:
if( 关系表达式){
语句体1 ;
}else{
语句体2 ;
}
获取两个数据中较大的值,使用if的第二种格式 实现
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
演示事例:
import java.util.Scanner;
class IfTest{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要比较的数据:");
int x = sc.nextInt();
int y = sc.nextInt();
if(x>y){
System.out.println("较大的数据为:"+x);
}
else{
System.out.println("较大的数据为:"+y);
}
}
f语句第二种格式和三元运算符:
三元运算符的操作都可以使用if语句改进,反之不成立
什么时候不成立呢?
当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。
if语句和三元运算符的区别:
三元运算符可以称之为if语句的简写形式,但是只要是简写就会有一定的弊端.
弊端:三元运算符是一种运算符号,也就是说,每次运算后,必须有结果.if...else语句是流程控制语句,执行后不一定有结果,可以是输出语句.而三元运算符不可以输出语句.
if语句第三种格式
if(关系表达式1){
语句体1;
}else if (关系表达式2){
语句体2;
}else if (关系表达式3){
语句体3;
}.....
else if (关系表达式n){
语句体 n;
}else{
语句体 n + 1;
}
执行流程:
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
boolean b = true;
if(b==false)
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
结果为:c
If语句的嵌套:
演示用例:
获取三个数据中的最大值。
import java.util.Scanner;
class Homewoerk{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据:");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
int max;
/*if (num1>num2){
if (num1>num3){
max = num1;
}else {
max = num3;
}
}else{
if (num2>num3){
max = num2;
}
else
max = num3;
}*/
max = (num1>((num2>num3)?num2:num3))?num3:((num2>num3)?num2:num3);
System.out.println("最大的数为:"+max);
}
}
switch语句
switch语句格式:
switch(表达式)
{
case取值1:
执行语句;
break;
case取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
格式解释说明:
switch:说明这是switch语句。
表达式:可以是byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面的值就是要和表达式进行比较的值
break:表示程序到这里中断,跳出switch语句
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
执行流程:
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
switch语句特点:
a,switch语句选择的类型只有四种:byte,short,int, char。
b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:1、遇到break结束;2、执行到switch结尾结束。
d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
注:JDK1.5以后可以接收枚举类型,JDK1.7以后可以接收字符串。键盘录入一个字符串的问题String s = sc.nextLine();
if和switch语句很像。具体什么场景下,应用哪个语句呢?如果判断的具体数值不多,而且符合byte short int char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
注意事项:
特殊情况:a:case 后面只能是常量,不能是变量,
而且,多个 case 后面的值不能出现相同的
b:default 可以省略吗?
可以省略,
但是不建议,可能产生一个不是我们想要的效果
因为它的作用是对不正确的情况给出提示。
case 就可以把值固定。
A,B,C,D
c:break 可以省略吗?
可以省略,但是结果可能不是我们想要的。
会出现一个现象:case 穿透。
最终我们建议不要省略
d:default 一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
e:switch 语句的结束条件
a:遇到 break 就结束了
b:执行到末尾就结束了
演示事例:
用switch语句实现键盘录入月份,输出对应的季节(12,1,2是冬季)
import java.util.Scanner;
class Homework1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份!");
int num = sc.nextInt();
switch(num){
case 12:
case 1:
case 2:
System.out.println("这是冬季!");
break;
case 3:
case 4:
case 5:
System.out.println("这是春季!");
break;
case 6:
case 7:
case 8:
System.out.println("这是夏季!");
break;
case 9:
case 10:
case 11:
System.out.println("这是秋季!");
break;
}
}
}
if语句和switch语句各自的场景:
if语句使用场景:
针对结果是Boolean 类型的判断
针对一个范围的判断
针对几个常量值的判断
switch语句使用场景:
针对几个常量值的判断
循环结构——while,do while,for
for循环语句
格式:
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
执行流程:
a:执行初始化语句
b:执行判断条件语句
如果这里是true,就继续
如果这里是false,循环就结束
c:执行循环体语句
d:执行控制条件语句
e:回到b
注意事项:
a:判断条件语句无论简单还是复杂,结果是boolean类型
b:循环体语句如果是一条,可以省略大括号,但是不建议
c:有分号就没有左大括号,有左大括号就没有分号
演示事例:
100-1000在控制台输出所有的”水仙花数”,所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
并统计”水仙花数”共有多少个
// 定义变量
int count = 0;
//1获取水仙花
for ( int x=100; x<=1000; x++){
//2 判断
//定义三个变量,保存各个位的值
int g = x%10;
int s = x/10%10;
int b = x/100%10;
//使用if判断
if (g*g*g + s*s*s + b*b*b == x){
//x为水仙花数
System.out.println("水仙花数为: "+x);
//如果是水仙花数,给变量+1
count++;
//System.out.println(count);
}
}
//输出个数的变量
System.out.print("水仙花数的个数为"+ count + "个");
System.out.print("over");
}
for循环的嵌套:
打印九九乘法表
public static void main(String[] args){
for(int i = 1; i < 10;i++){
for(int j = 1; j<=i;j++){
System.out.print(i+"*"+j+"="+j*i+"\t");
}
System.out.println();
}
}
while语句格式:
基本格式:
while(条件表达式)
{
执行语句;
}
扩展格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
执行流程:
通过查看这个格式,我们就知道while循环可以和for循环等价转换。
演示用例:
统计”水仙花数”共有多少个
int count = 0;
int num = 100;
while(num<1000){
int a = num/100;
int b = num%100/10;
int c = num%10;
if (a*a*a+b*b*b+c*c*c==num){
count+=1;
}
num++;
}
System.out.println(count);
}
求1-100之间奇数和
int x = 1;
int sum = 0;
while(x<100){
sum+=x;
x+=2;
}
System.out.println(sum);
}
for和while的区别:
(1)使用上的区别
for语句的那个控制条件变量,在循环结束后不能在使用了。而while的可以继续使用。原因在于在于for为了循环而定义的变量在for循环结束就是在内存中释放。
(2)理解上的区别
for适合于一个范围的判断
while适合次数不明确的
do while语句格式:
do
{
执行语句;
}while(条件表达式);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
执行流程:
while和do while的区别:
while:先判断条件,只有条件满足才执行循环体。
do while:先执行循环体,再判断条件,条件满足,再继续执行循环体。
简单一句话:do while:无论条件是否满足,循环体至少执行一次。
通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
c:for循环使用,有明确的次数while循环使用,没有明确次数
注意事项:
写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环。
循环使用的注意事项(死循环)
A:一定要注意修改控制条件,否则容易出现死循环。
B:最简单的死循环格式
a:while(true){...}
b:for(;;){}
跳转控制语句:
break(跳出)语句:应用范围:选择结构和循环结构(switch loop)。
作用:中断当前的循环
continue(继续)语句:应用于循环结构。
作用:结束当次循环,开始下一次循环
return (返回 )结束一个方法关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。
二、方法
定义:简单的说:方法就是完成特定功能的代码块。
格式:
修饰符 返回值类型 函数名(参数类型 参数名1,参数类型 参数名2,…)
{
执行语句;
Return 返回值;
}
其中:
修饰符 类型比较多,较为常用的为public static
返回值类型:用于限定返回值的数据类型,函数运行后的结果的数据类型。
方法名 一个名称,为了方便我们调用方法
参数类型:限定调用方法时传入参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的参数。
return:结束方法以及返回方法指定类型的值 。
返回值:程序被return带回的结果,返回给调用者。
特点:
定义函数可以将功能代码进行封装,便于对该功能进行复用。
方法只有被调用才会被执行。
方法与方法是平级关系,不能嵌套定义
方法定义的时候参数之间用逗号隔开
方法调用的时候不用在传递数据类型
如果方法有明确的返回值,一定要有return带回一个值
方法的出现提高了代码的复用性。
没有明确返回值的方法调用:
其实就是void类型方法的调用
只能单独调用。
注意:
a) 方法中只能调用函数,不可以在方法内部定义方法。
b) 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
如何定义一个方法?
两个明确,第一个明确是要定义的功能最后的结果是什么。
明确在定义该功能的过程中,是否需要未知内容参与运算。
演示用例:
打印nn乘法表
import java.util.Scanner;
class Mul{
public static void main(String[] args){
int num = 0;
num = getName();
String s = list(num);
System.out.println(s);
}
public static String list(int n){
String str = "";
for (int i = 1;i<=n ;i++ ){
for (int j = 1;j<=i ;j++ ){
str += i+"*"+j+"="+i*j+"\t";
}
str+="\n";
}
return str;
}
public static int getName(){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
return num;
}
}
打印m行n列的星形矩形
import java.util.Scanner;
class FunctionDemo4{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
printStar(n,m);
}
public static void printStar(int h,int l){
for (int x=0; x
for ( int y=0; y
System.out.print("*");
}
System.out.println();
}
}
}
方法的一个重要特性——重载(override)
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数列表的个数或者参数类型不同即可。
特点:与返回值类型无关,只看参数列表。
在调用时,虚拟机通过参数列表的不同来区分同名方法
好处:方便于阅读,优化了程序设计。
示例:
//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){returnx+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}
什么时候用到重载?
当定义的功能相同,但参与运算的未知内容不同。那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
演示用例:
public static void main(String[] args){
byte b1 = 2;
byte b2 = 2;
boolean bo = compare (b1,b2);
System.out.println(bo);
short s1 = 2;
short s2 = 2;
boolean bo1 = compare (s1,s2);
System.out.println(short);
}
public static boolean compare(byte num1, byte num2){
return num1 == num2;
}
public static boolean compare(short num1, short num2){
return num1 == num2;
}
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------