第四章 循环语句
4.1 while循环
- while语句:
- 示例:猜数字
import java.util.*;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int random = (int) (Math.random() * 101);
while (true) {
System.out.println("请输入一个数字");
int n = sc.nextInt();
if (n > random) {
System.out.println("输入的值太大,重新输入");
} else if (n < random) {
System.out.println("太小,请重新输入");
} else {
System.out.println("相同");
break;
}
}
}
}
4.2 do-while循环
- do-while语句:
- 示例:用do-while语句猜数字
import java.util.Scanner;
public class Test4_1dowhile {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
int number = (int) (Math.random() * 101);
int num = 0;
do {
System.out.println("请输入你的猜测");
num = sc.nextInt();
if (num > number) {
System.out.println("输入的值过大");
} else if (num < number) {
System.out.println("输入的值太小");
}
} while (num != number);
System.out.println("对了,电脑产生的数是" + number);
}
}
4.3for循环
- for语句:
- for嵌套语句:
- 示例:最大公约数
import java.util.*;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入n");
int n=sc.nextInt();
System.out.println("请输入m");
int m=sc.nextInt();
int min=n>m?m:n;
int temp=1;
for(int k=min;k>=1;k--) {
if(n%k==0&&m%k==0) {
System.out.println("这个数是"+k);
break;
}
}
}
}
- 示例:预测未来学费
import java.util.Scanner;
public class Test4_2xuefe {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
int year=0;
double xuefei=10000;
while(xuefei<20000) {
xuefei*=1.07;
year++;
}
System.out.println("第"+year+"年的学费是10000的两倍");
}
}
import java.util.Scanner;
public class Test4_2zhuanhuan {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a number:");
int number=scanner.nextInt();
String str="";
while(number!=0){//123 7
int num=number%16;//11 7
if(num<10){
str=num+str;//"7B" B
}else{
switch(num){
case 10:
str="A"+str;
break;
case 11:
str="B"+str;
break;
case 12:
str="C"+str;
break;
case 13:
str="D"+str;
break;
case 14:
str="E"+str;
break;
case 15:
str="F"+str;
break;
}
}
//str B
number/=16;//7 0
}
System.out.println("0X"+str);//7B
}
}
4.4 嵌套循环
- 示例:打印直角三角形
import java.util.*;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入n");
int n = sc.nextInt();
printf(n);
}
private static void printf(int n) {
// TODO 自动生成的方法存根
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
- 示例:打印菱形
- `import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“请输入n”);
int n = sc.nextInt();
printf(n);
}
private static void printf(int n) {
// TODO 自动生成的方法存根
for (int i = 1; i <= n; i++) {
for (int k = 1; k <= Math.abs(i - 5); k++) {
System.out.print(" ");
}
for (int j = 1; j <= i && j + i <= 10; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
- 打印空心菱形`
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入n");
int n = sc.nextInt();
printf(n);
}
private static void printf(int n) {
// TODO 自动生成的方法存根
for(int i=1;i<=n;i++) {
for(int k=1;k<=Math.abs(i-5);k++) {
System.out.print(" ");
}
for(int j=1;j<=i&&i+j<=10;j++) {
if(i==j||j==1||i+j==10) {
System.out.print("* ");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
4.5 breakh和continue
- break语句
- continue语句
- return语句
- 示例:判断回文串
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入回文");
String s = sc.nextLine();
judge(s);
}
private static void judge(String s) {
// TODO 自动生成的方法存根
for (int i = 0; i < s.length() / 2; i++) {
if (s.charAt(i) != s.charAt(s.length() - 1 - i)) {
System.out.println("不是回文!");
return;
}
}
System.out.println("是回文");
}
}
- 显示素数
public class haha {
public static void main(String[] args) {
int count = 0;
int num = 1;
while (count <= 50) {
boolean flag = true;
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
flag = false;
break;
}
}
if (flag) {
count++;
System.out.print(num + " ");
if (count % 10 == 0) {
System.out.println();
}
}
num++;
}
}
}
本章小结
- 循环语句有三类:while循环、do-while循环和for循环。
- 循环中包含重复执行的语句称为循环体。
- 循环体执行一次称为循环的一次迭代。
- 无限循环是指循环语句被无限次执行。
- 在设计循环时,既需要考虑循环控制结构,还需要考虑循环体。
- while循环首先检查循环继续条件。如果条件为true,则执行循环体;如果条件为false,则循环结束。
- do-while循环和while循环类似,只是do-while先执行循环体,再检查循环继续条件,以确定是否继续。
- while和do-while常用于循环次数不确定的情况。
- for循环一般用于在循环次数固定的情况。
- for循环由三部分组成。第一部分是初始操作,通常用于初始化控制变量。第二部分是循环继续条件,决定是否执行循环体。第三部分是每次迭代后执行的操作,经常用于调整控制变量。通常,在控制结构中初始化和修改循环控制变量。
- 在循环中可以使用break和continue这两个关键字。
- 关键字break立即终止包含break 的最内层循环。
- 关键字continue只是终止当前迭代。
编程练习题
4.1
import java.util.Scanner;
public class Demo4_1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
int countz=0;
int countf=0;
int sum=0;
while(true) {
System.out.println("请输入整数");
int num=sc.nextInt();
if(num>0) {
countz++;
}else if(num<0) {
countf++;
}else {
break;
}
sum+=num;
}
System.out.println("正数为"+countz+"个");
System.out.println("负数为"+countf+"个");
System.out.println("总和为"+sum);
System.out.println("平均数为"+(double)sum/(countz+countf));
}
}
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=0;
String firstname="";
String secondname="";
int firstscore=0;
int secondscora=0;
System.out.println("请输入学生的个数");
int stdnum=sc.nextInt();
while(count<stdnum) {
System.out.println("请输入学生的名字和成绩");
String name=sc.next();
int score=sc.nextInt();
if(score>firstscore) {
secondscora=firstscore;
secondname=firstname;
firstscore=score;
firstname=name;
}else {
secondscora=score;
secondname=name;
}
count++;
}
System.out.println("最高分"+firstscore+" 姓名"+firstname);
System.out.println("第二最高分"+secondscora+" 姓名"+secondname);
}
}
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
int count=0;
for(int i=100;i<=200;i++) {
if(i%5==0||i%6==0^i%6==0&&i%5==0) {
System.out.print(i+" ");
}
count++;
if(count%10==0) {
System.out.println();
}
}
}
}
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入");
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.println(num);
break;
}
}
}
}
import java.util.Scanner;
public class haha {
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=-i;j<=i;j++) {
if(j!=0&&j!=1) {
System.out.print(Math.abs(j)+" ");
}
}System.out.println();
}
}
}
public class Demo4_8 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
/*
* 0 1 2 3 2 1 0
* -3-2-1 0 1 2 3 j
* j+i-1 i-1-j
*/
for(int i=1;i<=8;i++) {
for(int k=0;k<8-i;k++) {
System.out.print(" ");
}
for(int j=1-i;j<i;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-1-j));
}
}
System.out.println();
}
}
}
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入");
int n=sc.nextInt();
double pi=4.0;
int flag=1;
double sum=0;
for(int i=1;i<=n;i++) {
sum+=(flag*1.0)/(2*i-1);
flag=-flag;
}
System.out.println(pi*sum);
}
}
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
for(int i=1;i<=10000;i++) {
int sum=0;
for(int j=1;j<=i/2;j++) {
if(i%j==0) {
sum+=j;
}
}
if(i==sum) {
System.out.print(i+" ");
}
}
}
}
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个二进制数");
int number=sc.nextInt();
String str="";
/*
*10%2=0~5 10/2=5
*
*5%2=1~2 5/2=2
*
*2%2=0~1 2/2=1
*
*1%2=1 ~0 1/2=0
*
*/
while(true) {
int a=number%2;
str=a+str;//
number/=2;
if(number==0) {
break;
}
}
System.out.print(str);
}
}
import java.util.Scanner;
public class Demo4_19 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
int a[]=new int[5];
System.out.println("请输入5个数");
for(int i=0;i<a.length;i++) {
a[i]=sc.nextInt();
}
// int a[]= {3,5,2,5,5,5,0};
int max = 0;
int count = 0;
for (int i = 0; i < a.length - 1; i++) {
if (a[i]== 0) {
break;
}else {
max = a[i + 1] > a[i] ? a[i + 1] : a[i];
}
}
for (int i = 0; i < a.length; i++) {
if (a[i] == max) {
count++;
}
}
System.out.println("最大值是" + max);
System.out.println("最大值出现的次数是" + count);
}
}