Java SE 第四章
第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));
}
}
}
}