程式流程式控制制 順序結構 分支結構:if else,switch case 迴圈結構:while,do while,for if else三種格式 //列印九九乘法表 for(int i = 1;i 費時太多,需要優化,首先在flag底下加break,然後將flag==false改為!flag,再將j ...
程式流程式控制制
- 順序結構
- 分支結構:if-else,switch-case
- 迴圈結構:while,do-while,for
if-else三種格式
1.
if(true){
執行代碼塊;
}
2.
if(){
}else{
}
3.
if(){
}else if(){
}
...
else{
}
if-else的練習
//輸入小明的成績,並輸出相應成績對應的獎勵
//創建一個Scanner類的對象
Scanner sc=new Scanner(System.in);
System.out.println("請輸入小明的期末成績");
//調用此對象響應的方法,完成鍵盤輸入的值得獲取
int score=sc.nextInt();
if(score>100||score<0){
System.out.println("你輸入的數值有誤,請重新輸入");
}else if(score==100){
System.out.println("獎勵一倆BMW");
}else if(80<score&&score<=99){
System.out.println("獎勵一部iphone6s");
}else if(60<score&&score<=80){
System.out.println("獎勵一本參考書");
}else{
System.out.println("什麼都不獎勵");
}
sc.close();
switch的用法
switch(變數){
case 值1:
case 值2:
case 值3:
default:
}
- 根據變數的值,選擇相應的case去判斷,一旦滿足case條件,就執行case的相應語句,如果沒有break語句,會繼續執行其下的case語句。
- default:是可選的,而且位置是靈活的。
- 變數可以是哪些類型?char,byte,short,int,枚舉,String。
- case條件:其中條件只能是值,不能是取值範圍。switch-case不能對區間進行判斷。
for迴圈
- for迴圈結構
- 1.初始化條件
- 2.迴圈條件
- 3.迭代條件
- 4.迴圈體
public static void main(String[] args) {
int j=1;
for(System.out.println('a');j<3;System.out.println('b'),j++){
System.out.println('c');//acbcb
}
//輸出100以內所有偶數 並計算其和 並說出其偶數的個數
int sum=0;
int count=0;
for(int i=1;i<=100;i++){
if(i%2==0){
System.out.println(i);
sum+=i;
count++;
}
}
System.out.println("總和為"+sum);//2550
System.out.println("100以內偶數的個數為"+count);//50
}
//編寫程式,從1迴圈到150在每行列印一個值,併在3的倍數後邊列印foo,
//5的倍數後邊列印biz,7的倍數後邊列印baz
for(int a=1;a<=150;a++){
System.out.print(a);
if(a%3==0){
System.out.print("foo ");
}
if(a%5==0){
System.out.print("biz ");
}
if(a%7==0){
System.out.println("baz");
}
System.out.println();
}
水仙花數
//輸出一個水仙花數,水仙花數就是一個3位數,
//其各個位上的數字立方和其本身
//例如:153=1*1*1+5*5*5+3*3*3
for(int i=100;i<=999;i++){//遍歷所有的三位數 456
int j1=i/100;//百位
int j2=(i-j1*100)/10;//十位
int j3=i%10;//個位
if(i==j1*j1*j1+j2*j2*j2+j3*j3*j3){
System.out.print(i+" ");//153 370 371 407
}
}
while迴圈
- 1.初始化條件
- 2.迴圈條件
- 3.迭代條件
4.迴圈體
初始化條件 while(迴圈條件){ 迴圈體 迭代條件 }
- for迴圈與while迴圈可以相互轉換。
while與for的區別:while的初始化條件定義在外邊,for定義在內部,初始化條件在執行完迴圈以後還可以用,而for不可以用。
// 100以內的偶數的輸出,以及它們的和 int i = 1; int sum = 0; while (i <= 100) { if (i % 2 == 0) { System.out.println(i); sum += i; } i++; } System.out.println(sum);
do-while(用的少)
- 1.初始化條件
- 2.迴圈條件
- 3.迭代條件
- 4.迴圈體
初始化條件
do{
迴圈體
迭代條件
}while(迴圈條件);
- do-while與while的區別:do-while迴圈至少會執行一次
迴圈練習
//從鍵盤讀入個數為10個的整數,並判斷讀入的正數和負數的個數
Scanner s = new Scanner(System.in);
int a = 0;//記錄正數的個數
int b = 0;//記錄負數的個數
int c = 0;//記錄0的個數
for(int i = 1;i <= 10;i++){
System.out.println("請輸入第"+i+"個整數");
int num = s.nextInt();
if(num > 0){
a++;
}else if(num < 0){
b++;
}else if(num == 0){
c++;
}
}
System.out.println("正數的個數為"+a);
System.out.println("負數的個數為"+b);
System.out.println("0的個數為"+c);
s.close();
//從鍵盤輸入個數不確定的數,並判斷讀入的正數和負數的個數,輸入0時結束程式
Scanner s = new Scanner(System.in);
int a = 0;//記錄正數的個數
int b = 0;//記錄負數的個數
for(;;){
System.out.println("請輸入一個整數:");
int num = s.nextInt();
if(num > 0){
a++;
}else if(num < 0){
b++;
}else{
break;
}
}
System.out.println("正數的個數為:"+ a);
System.out.println("負數的個數為:"+ b);
s.close();
- 無限迴圈for(;; ) while(true)
- 一般情況下,在無限迴圈的內部要有程式終止的語句,break,若沒有就是死迴圈了。
迴圈的嵌套使用
/*
*****
*****
*****
*/
for (int j = 1; j <= 4; j++) {// 外層迴圈控制行數
for (int i = 1; i <= 5; i++) {// 內層迴圈控制列數
System.out.print("*");
}
System.out.println();
}
/*
*
**
***
****
*/
for (int j = 1; j <= 4; j++) {
for(int i = 1;i<=j;i++){
System.out.print("*");
}
System.out.println();
}
/*
****
***
**
*
*/
for (int j = 1; j <= 4; j++) {
for(int i = 4;i>=j;i--){
System.out.print("*");
}
System.out.println();
}
/*
----*
---* *
--* * *
-* * * *
* * * * *
-* * * *
--* * *
---* *
----*
*/
//上半部分
for(int i = 1;i <= 5;i++){
for(int j = 4;j >= i;j--){
System.out.print(" ");
}
for(int k = 1;k <= i;k++){
System.out.print("* ");
}
System.out.println();
}
//下半部分
for(int i = 1;i <= 4;i++){
for(int j = 1;j <= i;j++){
System.out.print(" ");
}
for(int k = 4;k >= i;k--){
System.out.print("* ");
}
System.out.println();
}
//列印九九乘法表
for(int i = 1;i <= 9;i++){
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + j*i + "\t");
}
System.out.println();
}
列印100以內所有的質數
//打數印100以內所有質數
//質數:除了1和他本身以外不能再被其他數整除
boolean flag = false;
for(int i = 2;i <= 100;i++){//實現100以內自然數遍歷
for(int j = 2;j < i;j++){
if(i % j == 0){
flag = true;
}
}
if(flag == false){
System.out.println(i);
}
flag = false;
}
測試完成求 1-10w 所有質數 所用的毫秒數
long start = System.currentTimeMillis();
boolean flag = false;
for(int i = 2;i <= 100000;i++){//實現100以內自然數遍歷
for(int j = 2;j < i;j++){
if(i % j == 0){
flag = true;
}
}
if(flag == false){
System.out.println(i);
}
flag = false;
}
long end = System.currentTimeMillis();
System.out.println("完成操作所用的毫秒數為:"+ (end-start));//51305
費時太多,需要優化,首先在flag底下加break,然後將flag==false改為!flag,再將j<i變為j<Math.sqrt(i) 根號i;
long start = System.currentTimeMillis();
boolean flag = false;
for(int i = 2;i <= 100000;i++){//實現100以內自然數遍歷
for(int j = 2;j <= Math.sqrt(i);j++){//判斷根號i
if(i % j == 0){
flag = true;
break;
}
}
if(!flag){
System.out.println(i);
}
flag = false;
}
long end = System.currentTimeMillis();
System.out.println("完成操作所用的毫秒數為:"+ (end-start));//51305
//加上break之後,4796,使用Math.sqrt()之後,270毫秒
break與continue
/*
* break:結束"當前"迴圈。
* continue:跳出"本次"迴圈,繼續下一次迴圈。
*/
for (int i = 1; i <= 10; i++) {
if(i % 4 == 0){
//break;//1,2,3
continue;//1,2,3,5,6,7,9,10
}
System.out.println(i);
}
- break和continue語句之後不能再添加其他語句,因為不可能被執行。