第4章 循环语句
4.1 while循环
示例:猜数字
import java.util.Scanner;
public class Test4_1 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int number=(int)Math.random()*101;
while(true){
System.out.print("请输入一个数字(在0~100之间,包含0和100):");
int n=scanner.nextInt();
if(n>number){
System.out.println("太大了");
}else if(n<number){
System.out.println("太小了");
}else{
System.out.println("恭喜你,猜对了!答案就是"+number);
return;
}
}
}
}
4.2 do-while循环
4.3 for循环
※ for语句
※ for嵌套语句
※ 示例:最大公约数
import java.util.Scanner;
public class Test4_3 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入两个数:");
int m=scanner.nextInt();
int n=scanner.nextInt();
int Thesmall=Math.min(m, n);
for(int i=Thesmall;i>=1;i--){
if(m%Thesmall==0&&n%Thesmall==0){
System.out.println("这两个数的最大公约数是:"+Thesmall);
return;
}
}
}
}
示例:预测未来学费
public class Test4_4 {
public static void main(String[] args){
int year=0;
double Allmoney=10000;
while(true){
Allmoney*=1.07;
year++;
if(Allmoney>=20000){
System.out.println(year);
System.out.println(Allmoney);
return;
}
}
}
}
示例:将十进制转换为十六进制
import java.util.Scanner;
public class Test4_5 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个正整数:");
int number=scanner.nextInt();
String str="";
while(number!=0){
int num=number%16;
if(num<10){
str=num+str;
}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;
}
}
number/=16;
}
System.out.println("OX"+str);
}
}
4.4 嵌套循环
※ 示例:打印直角三角形
public class Test5_1 {
public static void main(String[] args){
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
※ 示例:打印菱形
public class Test5_1 {
public static void main(String[] args){
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
※ 示例:打印空心菱形
public class Test4_5 {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j<=Math.abs(i-5);j++){
System.out.print(" ");
}
for(int k=1;k<=i&&k+i<=10;k++){
if(k==1||k==i||k+i==10){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
4.5 break和continue
※ break语句
break语句有三种用法,第一种是用于终止switch语句中的语句序列,第二种是用于退出循环,然而第三种是用作goto语句的“文明”形式!
※ continue语句
continue语句只能使用在循环语句内部,功能是跳过该次循环,继续执行下一次循环结构。在while 和 do while语句中continue语句跳转到循环条件处开始继续执行,而在for语句中continue语句跳转到迭代语句处开始继续执行。
int i= 0;
while(i<4){
i ++;
if(i == 2){
continue;
}
systerm.out.println(i);
}
运行结果:1 3 4
※ return语句
Java中return用于方法,两个作用:
(1)返回方法指定类型的值(这个值总是确定的),也可以是对象
(2)方法的结束
两种形式:(1)有返回类型 例如:return i;
(2)无返回类型 return;
一般方法前有void代表无返回值,没有void有返回值。
※ 示例:判断回文串
public class Test4_6 {
public static void main(String[] args) {
boolean flag=true;
String s="上海自来水来自海上";
for(int m=0,n=s.length()-1;m<s.length()/2&&n>s.length()/2;m++,n--){
if(s.charAt(m)!=s.charAt(n)){
flag=false;
break;
}
}
if(flag){
System.out.println("是回文数字");
}else{
System.out.println("不是回文数字");
}
}
}
※ 显示素数
public class Test4_7 {
public static void main(String[] args) {
int count=0;
int number=1;
while(count<=50){
boolean flag=true;
for(int i=2;i<=number/2;i++){
if(number%i==0){
flag=false;
break;
}
}
if(flag){
System.out.print(number+" ");
count++;
if(count%10==0){
System.out.println();
}
}
number++;
}
}
}
本章小结
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 Demo4_1 {
public static void main(String[] args) {
int positivenumber=0;
int positivesum=0;
int negativesum=0;
int negativenumber=0;
Scanner scanner=new Scanner(System.in);
System.out.print("Enter an integer ,the input ends if it is o:");
while(true){
int integer=scanner.nextInt();
if(integer>0){
positivenumber++;
positivesum+=integer;
}else if(integer<0){
negativenumber++;
negativesum+=integer;
}else{
break;
}
}
int sum=positivesum+negativesum;
double average=1.0*sum/(positivenumber+negativenumber);
System.out.println("The number of positive is:"+positivenumber);
System.out.println("The number of negative is:"+negativenumber);
System.out.println("The total is:"+sum);
System.out.println("The average is:"+average);
}
}
import java.util.Scanner;
public class Demo4_2 {
public static void main(String[] args) {
double firstScore=0.0;
double secondScore=0.0;
String firstName="";
String secondName="";
Scanner scanner=new Scanner(System.in);
System.out.print("请输入学生的个数:");
int sum=scanner.nextInt();
for(int n=1;n<=sum;n++){
System.out.print("请输入分数:");
double score=scanner.nextDouble();
System.out.print("请输入姓名:");
String name=scanner.next();
if(score>=firstScore){
secondScore=firstScore;
secondName=firstName;
firstScore=score;
firstName=name;
}else{
if(score>secondScore){
secondScore=score;
secondName=name;
}
}
}
System.out.println("第一高分是:"+firstScore+"姓名是:"+firstName);
System.out.println("第二高分是:"+secondScore+"姓名是:"+secondName);
}
}
public class Demo4_3 {
public static void main(String[] args) {
int count=0;
for(int n=100;n<=200;n++){
if(n%5==0&&n%6!=0||n%6==0&&n%5!=0){
System.out.print(n+" ");
count++;
if(count%10==0){
System.out.println();
}
}
}
}
}
public class Demo4_4 {
public static void main(String[] args) {
int n=1;
while(n*n<=12000){
n++;
}
System.out.println(109*109);
System.out.println(n);//110
n=1;
while(n*n*n<=12000){
n++;
}
System.out.println(n*n*n);
System.out.println(n-1);
System.out.println(22*22*22);
}
}
import java.util.Scanner;
public class Demo4_5 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a number:");
int number=scanner.nextInt();
while(true){
boolean flag=false;
for(int i=2;i<=number/2;i++){
if(number%i==0){
System.out.print(i+" ");
number/=i;
flag=true;
break;
}
}
if(!flag){
System.out.print(number);
break;
}
}
}
}
public class Demo4_6 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the line:");
int line=scanner.nextInt();
for(int i=1;i<=line;i++){//行数
for(int k=1;k<=line-i;k++){
System.out.print(" ");
}
//-1
//-2 -1 2
for(int j=-i;j<=i;j++){
if(j!=0&&j!=1){
// System.out.print(Math.abs(j)+"\t");
System.out.printf("%-3d",Math.abs(j));
//3d " 1" " 12" "123"
//-3d "1 " "12 " "123"
}
}
System.out.println();
}
}
}
public class demo4_7 {
public static void main(String[] args) {
// for(int i=1;i<=6;i++){
// for(int j=1;j<=i;j++){
// System.out.print(j);
// }
// 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();
// }
// for(int i=1;i<=6;i++){
// for(int j=1;j<=6-i;j++){
// System.out.print(" ");
// }
// for(int k=i;k>=1;k--){
// System.out.print(k);
// }
// System.out.println();
// }
for(int i=1;i<=6;i++){
for(int j=1;j<=i-1;j++){
System.out.print(" ");
}
for(int k=1;k<=7-i;k++){
System.out.print(k);
}
System.out.println();
}
}
}
import java.util.Scanner;
public class Demo4_8 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入行数:");
int line=scanner.nextInt();
for(int i=1;i<=line;i++){
for(int j=1;j<=line-i;j++){
System.out.print(" ");
}
for(int k=-(i-1);k<=i-1;k++){
if(k<=0){
System.out.printf("%-4d",(int)Math.pow(2,k+i-1));
}else{
System.out.printf("%-4d",(int)Math.pow(2,-k+i-1));
}
}
System.out.println();
}
}
}
public class Demo4_9 {
public static void main(String[] args) {
double num=0;
for(int n=1;n<=49;n++){
num+=1.0*(2*n-1)/(2*n+1);
}
System.out.println(num);
}
}
public class Demo4_10 {
public static void main(String[] args) {
double flag=1.0;
double sum=0.0;
for(int i=1;i<=10000;i++){
sum+=1.0*flag/(2*i-1);
flag=-flag;
}
System.out.println(4*sum);
}
}
public class Demo4_11 {
public static void main(String[] args) {
double e=1;
for(int i=1;i<=10000;i++){
double multi=1.0;
//i=5
for(int j=1;j<=i;j++){
multi=multi*j;
}
e=e+1/multi;
}
System.out.println(e);
}
}
public class Demo4_12 {
public static void main(String[] args) {
int count=0;
for(int n=101;n<=2100;n++){
if(n%4==0&&n%100!=0||n%400==0){
System.out.print(n+" ");
count++;
if(count%10==0){
System.out.println();
}
}
}
}
}
import java.util.Scanner;
public class Demo4_13 {
public static void main(String[] args) {
//输入年份 星期
//输出每个月的第一天是星期几
//1.1 2.1 3.1...12.1
int year;
int week;
Scanner scanner=new Scanner(System.in);
System.out.print("Enter year and week:");
year=scanner.nextInt();//2013
week=scanner.nextInt();
int m=0,y=0,k=0,j=0,h=0;
String monthStr="";
String weekStr="";
for(int month=1;month<=12;month++){
m=month;
y=year;//2013
if(m==1||m==2){
m+=12;
y--;
}
k=y%100;
j=y/100;
h=(1+26*(month+1)/10+k+k/4+j/4+5*j)%7;
switch (month) {
case 1:
monthStr="January";
break;
case 2:
monthStr="February";
break;
case 3:
monthStr="March";
break;
case 4:
monthStr="April";
break;
case 5:
monthStr="May";
break;
case 6:
monthStr="June";
break;
case 7:
monthStr="July";
break;
case 8:
monthStr="August";
break;
case 9:
monthStr="September";
break;
case 10:
monthStr="October";
break;
case 11:
monthStr="November";
break;
case 12:
monthStr="December";
break;
}
switch (h) {
case 0:
weekStr="Saturday";
break;
case 1:
weekStr="Sunday";
break;
case 2:
weekStr="Monday";
break;
case 3:
weekStr="Tuesday";
break;
case 4:
weekStr="Wednesday";
break;
case 5:
weekStr="Thursday";
break;
case 6:
weekStr="Friday";
break;
}
System.out.println(monthStr+" 1,"+year+" is "+weekStr);
}
}
}
public class Demo4_15 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=10000;i++){
for(int n=1;n<=i/2;n++){
if(i%n==0){
sum+=n;
}
}
if(sum==i){
System.out.println(i);
}
sum=0;
}
}
}
import java.util.Scanner;
public class Demo4_16 {
public static void main(String[] args) {
//定义两个计数器 分别记录电脑赢得次数和玩家赢得次数
//cCount pCount;
int cCount=0;
int pCount=0;
Scanner scanner=new Scanner(System.in);
while(true){
System.out.print("请输入 0剪刀 1石头 2布:");
int p=scanner.nextInt();
int c=(int) (Math.random()*3);
if(p==c){
System.out.println("平局,请继续!");
}
if(p==0&&c==1){
System.out.println("玩家剪刀,电脑石头,电脑赢!");
cCount++;
}
if(p==0&&c==2){
System.out.println("玩家剪刀,电脑布,玩家赢!");
pCount++;
}
if(p==1&&c==0){
System.out.println("玩家石头,电脑剪刀,玩家赢!");
pCount++;
}
if(p==1&&c==2){
System.out.println("玩家石头,电脑布,电脑赢!");
cCount++;
}
if(p==2&&c==0){
System.out.println("玩家布,电脑剪刀,电脑赢!");
cCount++;
}
if(p==2&&c==1){
System.out.println("玩家布,电脑石头,玩家赢!");
pCount++;
}
if(cCount==2||pCount==2){
break;
}
}
if(cCount==2){
System.out.println("最终 电脑获胜");
}else{
System.out.println("最终 玩家获胜");
}
}
}
public class Demo4_17 {
public static void main(String[] args) {
double sum=0.0;
for(int i=1;i<=624;i++){
sum+=1.0/(Math.sqrt(i)+Math.sqrt(i+1));
}
System.out.println(sum);
}
}
import java.util.Scanner;
public class Demo4_18 {
public static void main(String[] args) {
String s="";
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个十进制数字:");
int number=scanner.nextInt();
while(true){
int n=number%2;
s=n+s;
number/=2;
if(number==0){
break;
}
}
System.out.println("0"+s);
}
}
import java.util.Scanner;
public class Demo4_18 {
public static void main(String[] args) {
String s="";
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个八进制数字:");
int number=scanner.nextInt();
while(true){
int n=number%8;
s=n+s;
number/=8;
if(number==0){
break;
}
}
System.out.println("0"+s);
}
}
import java.util.Scanner;
public class Demo4_19 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int max=0;
int count=0;
System.out.print("请输入一串数字,并且以0结束输入:");
while(true){
int number=scanner.nextInt();
if(number>max){
max=number;
count=1;
}else if(number==max){
count++;
}else if(number==0){
break;
}
}
System.out.println("最大的数字为:"+max);
System.out.println("出现的次数为:"+count);
}
}
public class Demo4_20 {
public static void main(String[] args) {
int count=0;
for(int n=1;n<=7;n++){
for(int m=n+1;m<=7;m++){
System.out.println(n+":"+m);
count++;
}
}
System.out.println(count);
}
}
import java.util.Scanner;
public class Demo4_21 {
public static void main(String[] args) {
//总和 sum 所有数字的和
//平方和 powSum 所有数字的平方的和
Scanner scanner=new Scanner(System.in);
double sum=0;
double powSum=0;
System.out.print("Enter 10 numbers:");
for(int i=1;i<=10;i++){
double num=scanner.nextDouble();
sum+=num;
powSum+=num*num;
}
double mean=sum/10;
double sd=Math.sqrt( (powSum-sum*sum/10)/9 );
System.out.println("mean ="+mean);
System.out.println("sd ="+sd);
}
}
import java.util.Scanner;
public class Demo4_21 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入第一个字符串:");
String s1=scanner.nextLine();
System.out.print("请输入第二个字符串:");
String s2=scanner.nextLine();
int min=Math.min(s1.length(), s2.length());
for(int i=0;i<=min-1;i++){
if(s1.charAt(i)==s2.charAt(i)){
System.out.print(s1.charAt(i));
}else if(s1.charAt(i)!=s2.charAt(i)){
break;
}
}
}
}
import java.util.Scanner;
public class Demo4_23 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a string:");
String str=scanner.nextLine();
int count=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)>=65&&str.charAt(i)<=90){
count++;
}
}
System.out.println(count);
}
}
import java.util.Scanner;
public class Demo4_23 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个字符串:");
String s=scanner.nextLine();
int n=s.length()-1;
for(int i=0;i<=n;i++){
if(i%2==0){
System.out.print(s.charAt(i));
}
}
}
}