Java循环控制

来源:互联网 发布:qt 连接mysql 编辑:程序博客网 时间:2024/05/19 13:09

Key Point

 for 循环的使用

 while循环

 do...while 循环 break 和 continue

练习

 1.  (for 循环)计算 1+2+3+...+100 的和

 

public class TestFor1 {public static void main(String[] args) {          int sum=0;    for(int i=1;i<=100;i++){              sum=sum+i;        }    System.out.println(sum);}}

2.  (for 循环)计算 1+3+5+...+99 的和

public class Test02 {public static void main(String[] args) {int sum=0;for(int num=1;num<=100;num++){if(num%2!=0){       sum=num+sum;      }}System.out.println (sum); //2500   }}


 3.  (while/do…while 循环)把 1、2 两题用 while 循环或 do...while 循环改写

 

public class TestWhile1 {public static void main(String[] args) {          int sum=0;          int i=1;      while(i<=100){              sum=sum+i;              i++;        }    System.out.println(sum);}}public class Test3 {public static void main(String[] args) {int sum=0;int num=1;while(num<=100){if(num%2!=0){       sum=num+sum;    } num++;      } System.out.println (sum); //2500   }}public class Test03 {public static void main(String[] args) {int sum=0;int num=1;do{if(num%2!=0){       sum=num+sum;    } num++;      } while(num<=100);System.out.println (sum); //2500   }}

4.  (for 循环)读入一个小于10 的整数 n,输出它的阶乘 n!

 

import java.util.*;public class Test4 {public static void main(String[] args) {System.out.println("请输入一个小于10的整数:");        Scanner sc = new Scanner(System.in);       int n = sc.nextInt();int sum=1;    for(int i=1;i<=n;i++){sum=sum*i;}System.out.println ("一个10以内数的阶乘:"+sum);}}

5.  (for 循环)求 100以内所有能被 3 整除但不能被 5 整除的数字的和。

 

//例题5:public class Test5 {public static void main(String[] args) {int sum=0;for(int num=1;num<=100;num++){//if(num%2!=0){if(num%3==0&&num%5!=0){       sum=num+sum;      }}System.out.println (sum); //1368   }}

6.  (for 循环)*“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3 文钱可以买 1 只公鸡,2 文钱可以买一只母鸡,1 文钱可以买 3 只小鸡。用 100 文钱买 100只鸡,那么各有公鸡、母鸡、小鸡多少只?

 

public class Test6 {public static void main(String[] args) {int i=0;for(int a=1;a<100/3;a++){  //100/3=33,公鸡小于33只; for(int b=1;b<100/2;b++ ){ // 100/2=50,母鸡少于50;   if((100-3*a-2*b)*3 == (100-a-b)){     i++;System.out.println("第"+i+"方法:"+a+"只公鸡"+b+"只母鸡"+(100-a-b)+"只雏鸡"); System.out.println();}}      }    }}

7.  (for 循环)*搬砖问题:36 块砖,36 人搬,男搬 4,女搬 3,两个小孩抬 1 砖,要求一次全搬完,问男、女和小孩各若干?

 

public class Test7 {public static void main(String[] args) {int s=0;for( int x=0;x<=9;x++) {   for( int y=0;y<=12;y++){        for( int z=0;z<=36;z++) {          if(z%2==0 && (x+y+z)==36 && (x*4+y*3+z/2)==36)               {                  s++;                   System.out.println("第"+s+"种方法: "+x+"男"+y+"女"+z+"小孩子");                 }              }           }        }}}//第1种方法:    3男3女30小孩子

8.  (for 循环)*编程找出四位整数 abcd 中满足下述关系的数。

 (ab+cd)(ab+cd)=abcd

 

public class Test8 {public static void main(String[] args) {for(int i=1000;i<10000;i++){int ab=i/100;int cd=i%100;if((ab+cd)*(ab+cd)==(ab*100+cd)){System.out.println("四位数是"+i);}}}}//2025//3025//9801

9. (循环)*读入一个整数 n,输出如下图形

 

n = 4

 

     *

   ***

  *****

 ******

思路:读入的整数 n,就是外层循环的循环次数。

 对于每一行,要做的事情:1. 输出若干个空格;2. 输出若干个星;3. 换行。提示:输出不换行,用System.out.print()

 

import java.util.*; class  TestFor9{public static void main(String[] args){Scanner sc = new Scanner(System.in);System.out.println("打印几行:");int n = sc.nextInt();for(int i=1;i<=n;i++){   //打印列  for(int k=1;k<=n-i;k++){                      System.out.print(" ");                     }   //打印每行的空格   for(int j=1;j<=2*i-1;j++){                     System.out.print("*");                        } //打印每行的*System.out.println();}}}

10.  (循环)*输出 99 乘法表

 

public class For10 {/*需求: 在控制台上打印一个正立的直角三角形 。*/public static void main(String[] args) {for(int i = 1 ; i< 9 ; i++){for(int j = 1 ; j<=i ; j++){ //控制列数 System.out.print(i+"*"+j+"="+i*j+"\t ");}System.out.println();}}}

11.  (循环)**求水仙花数。所谓水仙花数,是指一个三位数 abc,如果满足 a3+b3+c3=abc,则 abc 是水仙花数。

 

//例题public class Test11 {public static void main(String[] args) {    int z=0;for(int i=1;i<=9;i++){    for(int n=0;n<=9;n++){      for(int y=0;y<=9;y++){        int s=(i*100)+(n*10)+y;              int b=(i*i*i+n*n*n+y*y*y);            if(b==s)             {               z++;                System.out.println("第"+z+"种方法:"+s);                 }              }           }          }}}

12.  (循环)**输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)

 

//例题public class Test12 {public static void main(String[] args) {     Scanner sc = new Scanner(System.in);     System.out.print("请输入一个整数:");        int a = sc.nextInt();        int sum=0;        for(int i=0;a>0;i++){         sum+=a%10;                 a/=10;               }System.out.println("sum=:"+sum);}}

13.  (循环)**输入一整数 A,判断它是否质数

 

提示 1:若从 2 到 A 的平方根的范围内,没有一个数能整除 A,则 A 是质数。提示 2:在 java 中计算 n 的平方根可以使用 Math.sqrt(n)

 

//例题import java.util.*;public class Example13 {public static void main(String args[]){Scanner sc=new Scanner(System.in);System.out.println("请输入一个数:");int a=sc.nextInt();if(a<2){System.out.println("a是一个质数");}//判断该数最小公因子      for(int i=2;Math.sqrt(a)>=i;i++)  {if(a%i==0){System.out.println("该数不是质数");} }      System.out.println("该数是质数");}}

14.

(循环)**如果一个数等于其所有因子之和,我们就称这个数为"完数",例如 6  的因子为

1,2,3    6=1+2+36 就是一个完数.请编程打印出 1000 以内所有的完数

//例题14:求1000内的完数public class Test14 {public static void main(String args[]){//int sum=0;for(int i=2;i<=1000;i++){int sum=0; for(int j=1;j<i;j++){      if(i%j==0){    sum+=j;        }}             if(sum==i){        System.out.println(+i);       // }    }}}}//4966 28



15*计算圆周率

中国古代数学家研究出了计算圆周率最简单的办法:

 PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......

 这个算式的结果会无限接近于圆周率的值, 我国古代数学家祖冲之计算出, 圆周率在 3.1415926和 3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运算?

 

public class Test15{public static void main(String[] args){double PI =0;int a=0;int b=0;double d =1.0;while(PI<3.1415926||PI>3.1415927){if((int)d%2!=0){PI =PI+ 4.0/(2*d-1);}else{PI =PI- 4.0/(2*d-1);b++;}d=d+1;a++;}System.out.println("运算的总次数:"+a);System.out.println("减法的总次数:"+b);}}

16.  (循环)**已知:faibonacci(费波那契)数列的前几个数分别为 0,1,1,2,3,5,……。从第 3 项开始,每一项都等于前两项的和。

//例题16:数:0,1,1,2,3,5.......import java.util.Scanner;public class Test16 {public static void main(String[] args) {Scanner sc = new Scanner (System.in);System.out.print("请输入一个整数:");  int n=sc.nextInt(); int sum=0; int  a=0; int b=1; for(int i=1;i<=n;i++) { if(i==1){ sum=0; }else if(i==2){ sum=1; }else{ sum=a+b; a=b; b=sum; } System.out.println(sum);} }}


 17.  (循环,操作符)**一个 int 类型的整数由 32 个二进制位组成,每个二进制位的值要么为 0 要么为 1。要求读入一个 int 类型的整数 n,计算它的 32 个二进制位中总共有多少位为

1?

 

import java.util.Scanner;public class Test171 {public static void main(String args[]){Scanner sc = new Scanner (System.in);System.out.print("请输入一个二进制数:"); int k=0;int n=sc.nextInt();for(int i=0;i<32;i++){int t=n>>i;    if((t & 1)==1){    k++;    }}System.out.println(k);}}

18.  (循环)***打渔还是晒网

 中国有句老话叫“三天打渔,两天晒网”。假设有一个人从 2000 年 1 月 1 日开始“三天打渔两天晒网”,读入三个整数,分别表示年份、月份、日期,问这三个整数所表示的那天这个人在打渔还是在晒网?

//例题18:打渔晒网import java.util.Scanner;public class Test18 {private static Scanner sc;public static void main(String args[]){     int sum=0;sc = new Scanner (System.in);System.out.print("请输入一个年份:");         int y=sc.nextInt();        System.out.print("请输入一个月份:");         int m=sc.nextInt();       System.out.print("请输入一个日期:");         int d=sc.nextInt();        for(int i=2000;i<y;i++){        sum=sum+365;        if(y%4==0&&y%100!=0 ||y%400==0&&y%100==0){        sum++;        }        for(int j=0;j<m-1;j++){        switch(j){        case 1:        case 3:            case 5:        case 7:        case 8:        case 10:        case 12:              sum+=31;         break;        case 4:        case 6:        case 9:        case 11:           sum+=30;           break;           default:           sum+=28;        }         }                }                sum=sum+d;        if(sum%5==1||sum%5==2||sum%5==3){        System.out.println("这天打渔");        }else{        System.out.println("这天晒网");        }              }        }