1.选择结构if:
a.why: 在实际生活中,有些场合需要满足一定条件才能继续往下进行?
b.语法:
if(条件){ //条件是 boolean 或者 boolean结果的表达式
执行代码;
}
c.eg:
@Test
public void TestA(){
//1. 简单的if条件结构
int a =10;
int b =5;
if(a>b){ //()括号里面放入的是关系表达式或者逻辑表达式
System.out.println("a的值比b的值大!");
}
}
2、选择结构if…else…
if(条件){ //条件是 boolean 或者boolean结果的表达式,如果条件为true执行代码1,如果为false,执行代码2;
执行代码1;
}else{
执行代码2;
}
@Test
public void TestB(){
//2. if...else条件结构
int a =10;
int b =15;
if(a>b){
System.out.println("a的值比b的值大!");
}else{
System.out.println("a的值比b的值小!");
}
}
3、练习
问题1:分段的条件如何实现?优、良、中、及格 ?
多重选择结构 if…else
a.why:
在实际生活中,有些场合满足一定范围条件进行相关操作,满足其他范围进行其他操作?
b.语法:
if(条件1){
执行代码1
}else if(条件2){
执行代码2
}
...
else{
最终执行代码
}
@Test
public void TestC(){
//3. if..else if if...else if else
//多重if结构 分区间问题
int score = 89; //定义某一个学生分数
if(score>=90){
System.out.println("成绩优秀!");
}else if(score>=80){
System.out.println("成绩良好!");
}else if(score>=70){
System.out.println("成绩良好!");
}else if(score>=60){
System.out.println("成绩合格!");
}else {
System.out.println("成绩不合格!");
}
}
}
条件: 是 boolean 或者boolean结果的表达式,如果满足条件1执行代码1,满足条件N执行代码N,else中可以省略。
重点: 多重条件选择注意区间段的书写
问题2:在判定一定条件的时候,需要提前对数据进行判定处理?
4.嵌套选择结构:
a.why: 在实际生活中,我们有些判定需要放入到其他的判定内部,有着先后顺序?
b.语法:
if(条件1){
if(条件1.1){
}else{
}
}else{
}
条件:是boolean或者boolean结果的表达式,内容同基本选择机构一致
5、switch选择结构:
问题: 是否有其他的选择结构?如果条件特别多,并且条件不是范围而是固定值?
a.why:
在实际生活中,有些场合需要使用多重选择结构,并且多重选择结构中的条件是确定值,确定值判定有很多?
b.语法:
switch(表达式){
case 常量1:
执行代码1;
break;
case 常量2:
执行代码2;
break;
...
default:
执行代码;
break;
}
表达式可以是byte,short,int,char,Enum(枚举),JDK1.7以前不能使用String,1.7及1.7以后可以使用String
重点: g,float,double是不能使用的表达式类型
break和default模块可以省略不写;
break表示结束判定,如果省略了会继续执行之后的指令,省略需谨慎;
常量后的":"是不允许省略的;
default模块可以放置在前方
注意执行顺序和break的结合使用的问题
重点: switch和if比较:
相同点:
- 都是多分支比较结构
不同点:
- switch只用于等值判定条件;
- if没有条件限制,但是一般用于区间判定
c.举例说明
eg:输入月份,根据月份输出该月份的天数
eg:综合例子:输入年份,月份,分别将该年月的天数输出
eg:
public static void main(String[] args) {
int a = 2;
switch(a){
case 1:
System.out.println("周一");
break;
case 2:
System.out.println("周二");
break;
case 3:
System.out.println("周三");
break;
default:
System.out.println("超出范围");
}
}
输出结果:周二
注意:switch语句也是可以支持嵌套的。
6、while循环结构
a.why: 在实际生活中,一些重复冗余的操作–如何优化?
b.语法:
初始值int i=1;
while(条件i<=100){
执行代码;
迭代条件i++;
}
public static void main(String[] args) {
int a = 1; // 定义用来计数的变量
double sum = 10000; //定义一个 存放本金的变量
while (a <= 5) { //计算5 年后的本金
sum += sum * 0.003;
a++;
}
System.out.println(sum);
}
初始值,循环条件,循环内容,迭代条件
7、debug调试:
最基本的操作是:
- 首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类后--> Run
当程序走到断点处就会转到debug视图下。 - F5键与F6键均为单步调试,F5是step into,也就是进入本行代码中执行,F6是step over,
也就是执行本行代码,跳到下一行, - F7是跳出函数
- F8是执行到最后。
- Step Into (also F5) 跳入
- Step Over (also F6) 跳过
- Step Return (also F7) 执行完当前method,然后return跳出此method
- step Filter 逐步过滤 一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering)
- resume 重新开始执行debug,一直运行直到遇到breakpoint
- hit count 设置执行次数 适合程序中的for循环(设置 breakpoint view-右键hit count)
- inspect 检查 运算。执行一个表达式显示执行值
- watch 实时地监视变量的变化
- 我们常说的断点(breakpoints)是指line breakpoints,除了line breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method breakpoint,exception breakpoint.
- field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂
- 添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint)
- 添加Exception breakpoint 捕抓到Execption时暂挂(待续…)
- variables 视图里的变量可以改变变量值,在variables 视图选择变量点击右键–change value.一次来进行快速调试。
- debug 过程中修改了某些code后–〉save&build–>resume–>重新暂挂于断点
断点属性:
- hit count 执行多少次数后暂挂 用于循环
- enable condition 遇到符合你输入条件(为ture\改变时)就暂挂
- suspend thread 多线程时暂挂此线程
- suspend VM 暂挂虚拟机
8、do…while循环
a.why:
实际操作中,需要先执行了以后再进行判定是否需要继续?
b.语法:
初始值
do{
重复执行代码;
迭代内容;
}while(循环判定条件);
public static void main(String[] args) {
int i = 1;// 初始化语句
do {
System.out.println("我想看,复仇者联盟4");// 循环体
i++;// 步进语句
} while (i <= 10);// 条件判断
}
重点: 最后的分号一定不要省略
while与do…while循环总结:
- 相同点:
都是循环结构;
内容都是含有四个部分:初始值,循环条件,循环内容,迭代条件; - 区别:
语法不同;
执行顺序不同:
while先判定再执行,do…while先执行再判定;
执行次数:while执行是0或多次;do…while执行是1或多次;
9、循环结构for:
a.why: 解决实际问题中重复操作
b.语法:
for(表达式1;表达式2;表达式3){
执行代码4;
}
表达式1为循环参数的初始值;表达式2为循环判定(结束)条件;表达式3为循环迭代条件执行代码为需要重复的操作执行的顺序:1-2-4-3-1-2-4-3…
10、for循环变形:
a.for(){};
初始值等含有多个同时操作
b. 正常执行:
int i=0;
for(;i<10;i++){
执行代码
}
初始变量放在外部,不再做一个for循环的局部变量;
c. 死循环
for(int i=0;;i++){
执行代码;
}
语法没有问题,但是缺少结束条件,死循环
语法没有问题,但是缺少迭代条件,死循环;
for(int i=0;;){}
for(;;)
public static void main(String[] args){
int run = 1;
for(;run<=5;run++){
System.out.println("跑第: " + run + "次");
}
System.out.println("run: "+run);
}
重点: for、if结构中如果只有一行指令的时候可以省略{},但是建议大家不要省略;
11.break:
在循环体中表示结束整个循环,一般同判定结合使用;
12.continue:
在循环体中表示结束当前层循环,进入下一层循环;
13.return:
结束方法体;
14.break、continue、return比较:
使用场合
break
常用于switch
结构和循环结构中
continue
一般用于循环结构中
作用(循环结构中)
break语句终止某个循环,程序跳转到循环块外的下一条语句
continue跳出本次循环,进入下一次循环
return:结束当前方法的执行并退出,返回到调用该方法的语句处
15、循环总结:(while,do…while,for)
相同点:
需要多次重复执行一个或多个任务的问题考虑使用循环来解决;
无论哪一种循环结构,都有4个必不可少的部分:初始部分、循环条件、循环体、迭代部分
区别:
语法;
执行顺序:
while 循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
适用场合:
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while或do-while循环
知识点补充:
1、Math.random()获取随机数字
范围是0.0 <= Math.random() < 1.0
int randow = (int)(Math.randow()*10);
重点:Math的API使用
2、转义字符:
\ 转义符号
\n 表示在字符串中回车
\t Tab效果
\r\n IO流需要在文本中换行,需要使用特殊处理
\\ 转义字符本身
练习题
1、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
2、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
3、有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?分析:兔子的规律为数列,1,1,2,3,5,8,13,21
4、任意输入一个整数(小于10位),输出它一共有多少位。
5、计算1000以内所有不能被7整除的整数之和
6、本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是
7、计算 1+2-3+4-5+6-7…+100的结果//注意审题
8、一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)
9、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 54321
10、你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数