java程序的控制结构
- 顺序结构
- 每条语句结束必须以分号
;
结束
- 分支结构
- 两种分支结构
if
switch
- 循环结构
分支结构
if
单选条件语句
说明:
条件表达式必须用一对圆括号
()
括起来语句体可以是一条语句,也可以是多条语句,若是多条语句,必须用一对花括号
{}
括起来构成一个复合语句。
双选条件语句
if
语句的嵌套
switch语句
也称开关语句
注意:
- 表达式类型可为byte、char、short、int或enum类型,并且只能与常量进行比较,如过匹配成功则执行case子句后面的语句序列。
- 每个case后面的常量表达式值必须互不相同。
- 一个case后可有多个语句(不必用花括号),程序自动执行case后面所有的语句,一个case后面也可以没有任何语句
- 使用break语句跳出switch语句,终止switch语句执行
- default子句可选,当表达式的值与任何case子句中的常量都不匹配时,程序执行default后面的语句序列。
一些练习
import java.util.Scanner;
public class xunhuan {
/**
* @param args
*/
//输入两个整数a和b,输出其中较大的一个数
// public static void main(String[] args) {
// // TODO Auto-generated method stub
// int a,b,max;
// Scanner sc =new Scanner(System.in);
// System.out.println("请输入第一个整数:");
// a = sc.nextInt();
// System.out.println("请输入第二个整数:");
// b = sc.nextInt();
// max =a;
// if (b>max){
// max = b;
// }
// System.out.println("最大值为:"+max);
// }
//
//}
//输入两个整数a和b,输出其中较大的数
public static void main(String[] args) {
int a,b,max;
Scanner sc =new Scanner(System.in);
System.out.println("请输入第一个整数:");
a = sc.nextInt();
System.out.println("请输入第二个整数:");
b = sc.nextInt();
if(a>b){
max = a;
}else{
max=b;
}
System.out.println("最大值是:"+max);
}
//分段函数
public static void main (String[] args){
int x,y;
Scanner sc = new Scanner(System.in);
System.out.println("请输入x的的值:");
x = sc.nextInt();
if(x<0){
y=x+1;
}else if(x<10){
y=x*x-5;
}else{
y=(int)Math.pow(x, 3);
}
System.out.println("y的值为:"+y);
}
}
//if语句的嵌套
import java.util.Scanner;
public class Eample3_4{
public static void main(String[] args){
int x,y;
Scanner sc =new Scanner(System.in);
System.out.println("请输入x的值:");
x = sc.nextInt();
if(x>=0){
if(x>=10){
y=(int)Math.pow(x,3);
}else{
y = x*x-5;
}
}
System.out.println("y的值为:"+y);
}
}
//求3个整数a,b,c中的最大者,a,b,c由键盘输入
import java.uitl.Scanner;
public class Example3_5{
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
int a,b,c,max;
System.out.println("请输入第一个数:");
a = sc.nextInt();
System.out.println("请输入第二个数:");
b = sc.nextInt();
System.out.println("请输入第三个数:");
c = sc.nextInt();
if(a>b){
if(a>c)
max = a;
else
max = c;
}else{
if(b>c)
max = b;
else
max = c;
}
System.out.println("最大的数是:"+max);
}
}
//根据给定的年月,输出该月的天数
public class Examples3_6{
public static void main(String[] args){
int month = 2;
int year = 2004;
int numDays = 0;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if((year%4 == 0&&year%100!=0)||(year%400==0))
numDays = 29;
else
numDays = 28;
}
System.out.println("Year:"+year+",month:"+month);
System.out.println("Number of Days="+numDays);
}
}
//书上P40:根据购货金额确定好折扣率后,在计算出实付金额
import java.util.Scanner;
public class Example3_7{
public static void main(String[] args){
int m,c;
float d = 0,f;
Scanner sc = new Scanner(System.in);
System.out.println("请输入购货金额:");
m = sc.nextInt();
if(m>=2000)
c = 8;
else
c = m/205;
switch(c){
case 0:
d=0;
break;
case 1:
d=5;
break;
case 2:
case 3:
d =7.5F;
break;
case 4:
case 5:
case 6:
case 7:
d = 10;
break;
case 8:
d =15;
break;
}
f = m*(1-d/100);
System.out.println("实付金额是:"+f);
}
}
循环语句
初始化部分:设置初始条件,一般只执行一次
终止部分:设置终止条件,它应该是一个布尔表达式,每次循环都要求值一次,用以判断是否满足终止条件
循环体部分:被反复执行的语句块
- 当型循环
- 直到型循环
- for循环和forcash循环
当型循环(while)
表达式称为循环表达式,一般为关系表达式或逻辑表达式,必须用()括起来
语句称为循环体,可以是单个或复合语句
do...while
语句
实现“直到型”循环结构
//do...while语句计算S=1+2+3+4+...n
import java.util.Scanner;
public class Example3_9{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int i,n,sum;
System.out.println("请输入一个整数:");
n=sc.nextInt();
sum=0;
i=1;
do{
sum=sum+i;
i++;
}while(i<=n);
System.out.println("和是:"+sum);
}
}
for语句
import java.util.Scanner;
public class Example3_10{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int i,n,sum;
System.out.println("输入一个整数:");
n = sc.nextInt();
sum = 0;
for (i=0;i<=n;i++)
sum+=i;
System.out.println("和是:"+sum);
}
}
break语句
作用:
终止switch语句与单循环语句的执行;
对多重循环语句,可从内循环跳到外循环体
格式:break;
continue语句
作用:
在while或do…while语句中执行到continue语句时,程序不执行continue后的语句,而转向条件表达式处,开始下次循环。
在for语句中执行到continue语句时,程序不执行continue后的语句,而转向for语句中的第3表达式处,开始下一次循环。
格式:continue;
二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
nums = [-1,0,3,5,9,12], target = 9
//来自力扣
class Solution {
public int search(int[] nums, int target) {
//创建数组nums,和整数变量target
int left = 0, right = nums.length - 1;
//二分查找,将一组数分成两边,left为左边为0.right为右边为数组的长度减一。
while(left<=right) {
int mid = left + (right - left) / 2;
//mid = 2,nums[mid]不等于target,nums[mid]=3,left=3.
//3<5,mid = 4,nums[4]=9=target
if(nums[mid] == target) {
return mid;
} else if(nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
}
二分查找是一种基于比较目标值和数组中间元素的教科书式算法。
如果目标值等于中间元素,则找到目标值。
如果目标值较小,继续在左侧搜索。
如果目标值较大,则继续在右侧搜索。