循环控制语句
1. for:自带计数器的操作(适合已知次数的循环)
- 结构:
for(初始化(1); 布尔表达式(1); 更新(4)) { //循环体(3) }
- 注:
i. 按照1、2、3、4的顺序执行,并且1只执行一次。
ii.1、2、3、4皆可省略且不报错for(;;);
,写在他后面的代码不可达。
iii.1、2、4可对多个变量进行操作,但初始化的变量只能是同一类型。
栗子:for (int i=0,j=0;i<7&&j<8;i++,j++)
2. while:事前判断+事后判断 (当型,适合未知次数的循环)
- 结构:
while( 布尔表达式 ) { //循环内容 }
- 注:使用while循环时,尽量保证循环条件有false到时候,否则循环就成了死循环。
- 考:求100以内可被3整除的数的和。
public int sum3_while() { int sum = 0,i = 0; while(i<=100) { if(i%3==0) { sum+=i; } i++; } return sum; }
- 考:猴子第一天摘下若千个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
public int re_tao() { int day=10; int tao=1 ; while(day>1) { tao = (tao+1)*2; day--; } return tao; }
3. do while:直到型(无论循环条件是否成立,do中循环体都会执行一次)
- 结构:
do { //循环体 }while(布尔表达式);
4. for、while、do while转换
//for循环 public int sum3_for() { int sum = 0; for(int i=0;i<=100;i++) { if(i%3==0) { sum+=i; } } return sum; } //while public int sum3_while() { int sum = 0,i = 1; while(i<=100) { if(i%3==0) { sum+=i; } i++; } return sum; } //do while public int sum3_do() { int sum = 0,i = 0; do { if(i%3==0) { sum+=i; } i++; }while(i<=100); return sum; }
条件控制语句
1. if:事前判断
- 结构:
if(布尔表达式){ //如果布尔表达式为true将执行的语句 } //双分支使用 if(布尔表达式){ //如果布尔表达式的值为true则执行这里的代码 }else{ //如果布尔表达式的值为false则执行这里的代码 } //嵌套使用 if(布尔表达式 1){ //如果布尔表达式 1的值为true执行代码 }else if(布尔表达式 2){ //如果布尔表达式 2的值为true执行代码 }else if(布尔表达式 3){ //如果布尔表达式 3的值为true执行代码 }else { //如果以上布尔表达式都不为true执行代码 }
考:
class Example { public static void main(String args[]){ boolean flag = false; if (flag = true){ System.out.println("true"); }else{ System.out.println("false"); } } }
答案:打印输出:true,仅限布尔变量的赋值。
switch case:判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
- 结构:
switch(变量或表达式){ case 值1 : 可执行语句; break; case 值2 : 可执行语句; break; defult : 可执行语句; break; }
- 关于成绩的栗子
public String re_grade_rank(int grade) { String rank ; if(grade<=100&&grade>=0) { switch (grade/10) { case 10: case 9: rank = "A"; break; case 8: rank = "B"; break; case 7: rank = "C"; break; case 6: rank = "D"; break; default : rank = "E"; break; } }else { rank = "请输入0-100的成绩!"; } return rank; }
- 效率高,逻辑简单,但是毕竟死板。
跳出关键字
continue:跳过本次循环。
break:break跳出离他最近的循环块或switch(跳过本轮循环)。
return:结束当前函数。
- 栗子
for(int i=0;i<5;i++) { if(i==3) { break; } System.out.println(i); } //0 1 2 for(int i=0;i<5;i++) { if(i==3) { break; } System.out.println(i); } //0 1 2 3 4
练习题
- 输入一个数字,判断是一个奇数还是偶数(知识点:条件语句)
public String re_jiou(int a) {
String temp=null;
if(a%2==0) {
temp = "偶数";
}else {
temp = "奇数";
}
return temp;
}
- 输入一个年份,判断这个年份是否是闰年(知识点:条件、循环语句)[必做题]
public String runian(int a) {
String temp=null ;
if(a%4==0&&a%100!=0) {
temp = "闰年!";
}else {
temp = "非闰年!";
}
return temp;
}
- 编写一个程序,找出大于200的最小的质数[选做题]
public void re_zhishu(int temp) {
int j;
for (int i = temp;i <= 1000; i++) // 1不是素数bai,所以直接du从2开始循环
{
j = 2;
while (i % j != 0) {
j++; // 测试2至i的数字是zhi否能被i整除,dao如不能就自加
}
if (j == i) {
System.out.println(i); // 如果是就打印出数字
return;
}
}
}
- 打印出所有的”水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个”水仙花数",因为153=1的三次方+5的三次方+3的三次方
程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。
public void test3(int a) {
int sum = 0;
int i=1;
for(;i<=a;i++) {
int j=i;
while(j!=0) {
sum+=((j%10)*(j%10)*(j%10));
j/=10;
}
if(i==sum) {
System.out.println(i);
}
sum = 0;
}
}
- 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
public static void test6(int m,int n) {
int maxGys = 0;
int minGbs = 0;
for(int i=1;i<=(m>n?m:n);i++) {
if(m%i==0&&n%i==0) {
maxGys = i;
}
}
for(int j=(m>n?m:n);j>0;j++) {
if(j%m==0&&j%n==0) {
minGbs = j;
break;
}
}
System.out.println("最大公约数是:"+maxGys+",最小公倍数是:"+minGbs);
}
- 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
public void test_9() {
int sum ;
for(int i=1; i<=1000; i++) {
sum = 0;
for(int j=1; j<i ;j++) {
if(i%j==0) {
sum +=j;
}
}
if(i==sum) {
System.out.println(i+"是一个非常完美的数啊!");
}
}
}
- 有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前20项之和。
public void test_20() {
double sum = 0;
double [] zi = new double[20];
double [] mu = new double[20];
zi[0] = 2;
zi[1] = 3;
mu[0] = 1;
mu[1] = 2;
for (int i = 2; i < 20; i++) {
zi[i] = zi[i-1]+zi[i-2];
mu[i] = mu[i-1]+mu[i-2];
}
for (int i = 0; i < 10; i++) {
sum+=zi[i]/mu[i];
}
System.out.println(sum);
}
- 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n.
public void test_39(int a) {
double sum = 0;
if(a%2==0) {
for (int i = 1; i <=(int)a*0.5+1 ; i++) {
sum+=1.0/(i*2);
}
}else {
for (int i = 1; i <=(int)(a+1)*0.5 ; i++) {
sum += 1.0/((i*2)-1);
}
}
System.out.println(sum);
}
- 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的。
加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
public void test_48(int a) {
int []b = new int[4];
int temp;
for (int i = 0; i < 4; i++) {
b[i]=(a%10)+5%10;
a/=10;
}
for (int i = 0; i < b.length/2; i++) {
temp = b[i];
b[i] = b[b.length-i-1];
b[b.length-i-1] = temp;
}
for (int i : b) {
System.out.println(i);
}
}
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21。(斐波那契数列)
public void test1(int a) {
int tu1 = 1;
int tu2 = 1;
int tu = 0;
for(int i=1;i<a;i++) {
if(i<3) {
System.out.println(tu1);
}else {
tu = tu1+tu2;
tu1 = tu2;
tu2 = tu;
System.out.println(tu);
}
}
}
网友评论