第四章 循环语句
循环语句:
while适合于循环结束条件已知 但是循环次数未知的情况
for 适合于循环次数已知的情况
for和while之间是可以完全互换的
4.1while循环
- while语句:
1.while(循环继续条件){
需要被循环执行的代码//循环体
}
2.while(true){
循环体
循环间距
if(循环结束条件){
break;
}
} - 猜数字
import java.util.Scanner;
/*
* while循环必备的条件
* 循环初始化
* 循环体
* 循环间距,改变初始化的值
*
* while (true)
* 循环体
* 循环间距
* if
* break*/
public class Demo_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Guess a magic number");
int number=(int)(Math.random()*101);
Scanner sc=new Scanner(System.in);
while(true){
System.out.print("Enter your guess:");
int num=sc.nextInt();
if(num==number){
System.out.print("yes,the number is"+number);
break;
}else if(num<number){
System.out.println("too low");
}else if(num>number){
System.out.println("too high");
}
}
}
}
4.2do_while循环
do-while:先执行 再判断
do{
循环体;//循环初始化 循环间距
}while(循环结束条件)
//依然是猜数字用dowhile实现
import java.util.Scanner;
public class Demo_2 {
public static void main(String[]args){
System.out.println("Guess a magic number");
int number=(int)(Math.random()*101);
Scanner sc=new Scanner(System.in);
int num;
do{
System.out.print("Enter your guess:");
num=sc.nextInt();
if(num<number){
System.out.println("too low");
}else if(num>number){
System.out.println("too high");
}
}while(num!=number);
System.out.print("yes,the number is "+number);
}
}
4.3for循环
- for语句:
for( 循环初始化 ; 循环继续条件 ; 循环间距){
循环体
}
循环初始化->循环继续条件->循环体->循环间距-> - for嵌套语句:嵌套循环是由一个外层循环或多个内层循环组成的。每当重复执行一次外层循环时再次进入内部循环,然后重新开始。
- 示例:最大公约数
import java.util.Scanner;
public class Domo_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("Enter:");
int num1=sc.nextInt();
int num2=sc.nextInt();
int min=Math.min(num1, num2);
for(int i=min;i>=1;i--){
if(num1%i==0&&num2%i==0){
System.out.print(i);
break;
}
}
}
}
4.4嵌套循环
- 打印直角三角形
public class Demo_test {
/*
*
* *
* * *
* * * *
* * * * * */
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){
System.out.print("* ");
}
System.out.println();
}
}
}/
- 打印菱形
public class Demo_test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
*
* *
* * *
* * * *
* * *
* *
*
* */
for(int i=1;i<=8;i++){
for(int k=1;k<=Math.abs(4-i);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&i+j<=8;j++){
System.out.print("*"+" ");
}
System.out.println();
}
}
}
-打印空心菱形
*
* *
* *
* *
* *
* *
*
* */
for(int i=1;i<=8;i++){
for(int k=1;k<=Math.abs(4-i);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&i+j<=8;j++){
if(j==1||j==i||i+j==8){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
4.5break和continue
- break语句
- continue语句
- return语句:仅仅代表结束当前函数 如果有返回值 则在函数结束时 将数据进行返回
- 示例:判断回文串
import java.util.Scanner;
public class Demo_huiwen {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("Enter a number:");
int num=sc.nextInt();
String str="";
int number=num;
while(true){
int n=number%10;
str+=n;
number/=10;
if(number==0){
break;
}
}
if(Integer.parseInt(str)==num){
System.out.print("shi hui wen");
}else{
System.out.print("bu shi hui wen");
}
}
}
- 示例:显示素数
import java.util.Scanner;
public class IsSushu {
//除以一半本身所有的数都除不尽那就是素数
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
boolean flag=true;
for(int i=2;i<=num/2;i++){
if(num%i==0){
flag=false;
break;
}
}
if(flag==false){
System.out.println("bu shi su shu");
}else{
System.out.println("shi su shu");
}
}
}
小结
1.循环语句有三类: while 循环、 do-while 循环和 for 循环。
2.循环中包含重复执行的语句的部分称为循环体。
3.循环体执行一次称为循环的一次迭代。
4.无限循环是指循环语句被无限次执行。
5.在设计循环时, 既需要考虑循环控制结构, 还需要考虑循环体。
6.while 循环首先检査循环继续条件。 如果条件为 true, 则执行循环体; 如果条件为 false, 则循环结
束。
7.do-while 循环与 while 循环类似, 只是 do-while 循环先执行循环体, 然后再检査循环继续条件,
以确定是继续还是终止。
8.while 和 do-while 循环常用于循环次数不确定的情况。
9.标记值是一个特殊的值, 用来标记循环的结束。
10.for 循环一般用在循环体执行次数固定的情况。
11.for 循环控制由三部分组成。 第一部分是初始操作, 通常用于初始化控制变量。 第二部分是循环继
续条件, 决定是否执行循环体。 第三部分是每次迭代后执行的操作, 经常用于调整控制变量。 通常,
在控制结构中初始化和修改循环控制变量。
12.while 循环和 for 循环都称为前测循环( pretest loop), 因为在循环体执行之前, 要检测一下循环
继续条件。
13.do-while 循环称为后测循环( posttest loop), 因为在循环体执行之后, 要检测一下这个条件。
14.在循环中可以使用 break 和 continue 这两个关键字。
15.关键字 break 立即终止包含 break 的最内层循环。
16.关键字 continue 只是终止当前迭代。
代码示例
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=0;
int positivescount=0;
int negativecount=0;
Scanner sc=new Scanner(System.in);
System.out.print("Enter an integer:");
int flag=0;
while(true){
int num=sc.nextInt();
if(num>0){
positivescount++;
}else if(num<0){
negativecount++;
}else{
break;
}
sum=sum+num;
}
double aver=sum/((positivescount+negativecount)*1.0);
System.out.println("The number of positive is"+positivescount);
System.out.println("The number of negative is"+negativecount);
System.out.println("The total of is "+sum);
System.out.println("The average is "+aver);
}
}=======================================
import java.util.Scanner;
public class Demo_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("Enter num");
int num=sc.nextInt();
String firstname="";
int firstscore=0;
String secondname="";
int secondscore=0;
for(int i=0;i<num;i++){
System.out.print("Enter name and grade:");
String name=sc.next();
int score=sc.nextInt();
if(score>=firstscore){
secondscore=firstscore;
secondname=firstname;
firstscore=score;
firstname=name;
}else if(score>secondscore){
secondscore=score;
secondname=name;
}
}
System.out.print("第一名:"+firstname+firstscore);
System.out.print("第二名:"+secondname+secondscore);
}
}=======================================
public class Demo_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=0;
for(int num=100;num<200;num++){
if((num%5==0||num%6==0)&&(num%5==0^num%6==0)){
System.out.print(num+" ");
count++;
if(count%10==0){
System.out.println();
}
}
}
}
=============================================}
public class Demo_4 {
//n^2大于12000的最小整数n
//n^2小于12000的最大整数n
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=1;
while(n*n<12000){
n++;
}
System.out.println(n);
int m=1;
while(m*m<12000){
m++;
}
System.out.println(m-1);
System.out.println((m-1)*(m-1));
}
}=========================================
import java.util.Scanner;
/*120/2=60----0
* 60/2=30----0
* 30/2=15----0
* 15/2=7----1
* 15/3=5----0
* 5/2=2----1
* 5/3=1----2
* 5/4
* 5*/
public class Demo_5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("输入一个数:");
int num=sc.nextInt();
while(true){
boolean flag=false;
for(int i=2;i<num/2;i++){
if(num%i==0){
System.out.print(i+" ");
num/=i;
flag=true;
break;
}
}
if(!flag){
System.out.print(num);
break;
}
}
}
}====================================
import java.util.Scanner;
/*
* 1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
*/
public class Demo_6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
for(int i=1;i<=num;i++){
for(int k=0;k<num-i;k++){
System.out.print(" ");
}
for(int j=-i;j<=i;j++){
if(j!=0&&j!=1){
System.out.print((int)(Math.abs(j))+" ");
}
}
System.out.println();
}
}
}============================================
public class Demo_7 {
/*
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
==========
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
==========
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
==========
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<=6;i++){
for(int j=1;j<=i;j++){
System.out.print(j+" ");
}
System.out.println();
}
System.out.println("==========");
for (int i = 1; i<=6 ; i++) {
for(int j=1;j<=7-i;j++){
System.out.print(j+" ");
}
System.out.println();
}
System.out.println("==========");
for(int i=1;i<=6;i++){
for(int k=1;k<=6-i;k++){
System.out.print(" ");
}
for(int j=i;j>=1;j--){
System.out.print(j+" ");
}
System.out.println();
}
System.out.println("==========");
for(int i=1;i<=6;i++){
for(int k=1;k<i;k++){
System.out.print(" ");
}
for(int j=1;j<=7-i;j++){
System.out.print(j+" ");
}
System.out.println();
}
}
==================================}===============
import java.util.Scanner;
public class Demo_8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("请输入行数:");
int num=sc.nextInt();
for(int i=1;i<=num;i++){
for(int k=1;k<=num-i;k++){
System.out.print(" ");
}
for(int j=-(i-1);j<=(i-1);j++){
if(j<=0){
System.out.printf("%-4d",(int)(Math.pow(2,j+i-1)));
}else{
System.out.printf("%-4d",(int)(Math.pow(2,i-j-1)));
}
}
System.out.println();
}
}
}=======================================
public class Demo_9 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double sum=0;
for(int i=0;i<=48;i++){
sum+=(2*i+1)/((2*i+3)*1.0);
}
System.out.println(sum);
}
}=======================================
public class Demo_10 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double sum=0;
for(int i=1;i<=10000;i++){
sum+=((Math.pow(-1,i+1))/(2*i-1));
}
System.out.print(4*sum);
}
}=======================================
public class Demo_11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double sum=0.0;
double mult=1;
for(int i=1;i<10000;i++){
for(int j=1;j<=i;j++){
mult*=j;
}
sum+=(1.0/mult);
}
System.out.print(sum+1);
}
}=================================
public class Demo_13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=0;
for(int i=101;i<=2100;i++){
if((i%4==0&&i%100!=0)||i%400==0){
System.out.print(i+" ");
count++;
}
if(count%10==0){
System.out.println();
}
}
}
}