java基礎學習之十二:控制流

趙明威發表於2016-06-08

一、Java基礎回顧

我們現在知道:

  • 物件:物件是類的一個例項,有狀態和行為。例如,一條狗是一個物件,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
  • 類:類是一個模板,它描述一類物件的行為和狀態。

在java語言裡,物件要通過一個類來封裝 . 類就像一個袋子一樣把一條?狗的屬性和行為都給裝了起來. 再稍微深入一些層次講,類對物件的封裝,就好像手機殼對手機各個零部件的封裝,沒有這個外殼,就算有零件這個手機也是不完整的.有了手機外殼也能忽悠人呢..哈哈.程式設計好壞也和做手機一樣,精工細作.

一個入門例項:

入門例項

程式中包括Java的一些基本特徵:

類(class):上面程式定義了一個類HelloWorld,該類的名字與.java檔案的名字相同。

方法(method):類的內部定義了該類的一個方法main。

語句(statement):真正的“列印”功能由一個語句實現,即: System.out.println("Hello World!");

二、Java控制流

下面兩點有關Java的書寫方式:

Java中的語句要以;結尾 (與C/C++相同)。

用花括號{}來整合語句,形成程式塊。通過程式塊,我們可以知道程式的不同部分的範圍,比如類從哪裡開始,到哪裡結束。

A.函式:

   函式在程式中就像,手機的廣播一樣發揮著特定的功能,一個好的函式(或成為方法) 只做一件事,一件事做到極致也是不容易的.  

B.引數:

函式還可以有引數:引數就像是製造手機所用的原料一樣有用.當然一個函式也可以沒有引數,可以在函式內部定義變數,自產原料.

寫法格式:

修飾符 函式名(資料型別 引數名1,資料型別 引數名2, .....){
    其他功能
}

C.控制結構:

   控制結構就更加接近我們的邏輯了:比如:今天吃飯或者不吃去哪吃,吃什麼都是由選擇構成的,if  肚子很餓,就吃statements1,else if 稍微餓就吃staetments2,最後else 上面條件都不滿足,就吃statements3抽象出來就是:

選擇結構 (if):

if (conditon1) {
           statements1;
           ...
       }
       else if (condition2) {
           statements2;
           ...
       }
       else {
           statements3;
           ...
       }

選擇 (switch):就像是if 選擇的特殊情況,對於條件確定的,不是表示連續範圍的可以用,注意expression位置是數字型別或者char,再或者string(java8)

switch(expression) {
        case 1:
            statements;
            break;
        case 2:
            statements;
            break;
            ...
        default:
            statements;
            break;
    }

接下來就是比較像流水作業一樣的東西了:

比如工廠用同一個 流水線生產工件,如果機器停了整個流水線就停了,while(條件),如果生產出來廢物 就扔掉繼續( continue),如果流水線有一處有故障就停了,(break)

while迴圈 :

語法

 while (condition) {
        if(次品){
            continue; //除去下面步驟,繼續迴圈
        }
        if(流水線壞了){
            break;//整個過程結束
        }
       statements;  //工序
}

do{工序}while(條件),至少做一次,才判斷條件是否成立,成立繼續做,否則結束.

for迴圈: 就是工件個數固定的流水線和while基本相似.

語法

    for (initial; condition; update) {
        statements;
    }

在迴圈中,可以使用

break; // 跳出迴圈

continue; // 直接進入下一環

三、出個題目 ,並列出答案

題目為:

地址連結

題目:密西西比河岸某處陸地因為河水侵蝕,每年陸地面積都在減少,每年減少50平方英里,減少的陸地面積呈半圓形,即該半圓形面積以每年50平方英里的速度增長。在第一年初時,該半圓形面積為0,半圓形的圓心座標為(0,0),現在的任務是給定一個座標,求出該座標在哪一年年底會被河水侵蝕。假設給定的座標到圓心的距離不會等於半圓的半徑。 輸入:第一行輸入座標個數,第二行開始輸入座標,每個座標佔一行,每個座標由橫座標和縱座標組成,座標值為浮點數,單位為英里。 輸出:輸出該座標會在哪一年年底開始被河水侵蝕。對應每個座標輸出一行,輸出結束後輸出 “END OF OUTPUT.”

例項答案:

package POJSoft;

import java.util.Scanner;

/**
 * Created by zhaomingwei on 16/3/31.
 */
public class Main1005 {
    public static double PI = 3.14;
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int num = scanner.nextInt();
    //通過for迴圈獲得每次的讀數
    for (int i = 1;i <= num; i++){
        double xAxis = scanner.nextDouble();
        double yAyis = scanner.nextDouble();
        //Java7,8
        //System.out.printf("Property %d: This property will begin eroding in year 
        //%d.",i,getLeftYears(xAxis,yAyis));
       System.out.println("Property " + i + ": This property will begin eroding in year " + 
         getLeftYears(xAxis, yAyis) + ".");
    }
    System.out.println("END OF OUTPUT.");
}

public static int getLeftYears(double x,double y){

    int n = 1;
    //多用於計算不確定次數的情況
    while(n<=(x*x+y*y)*PI/100){
        n++;
    }

    return n;
    }
}

練一練控制結構:

if 選擇:

 public class TryAssertions {
 public static void main(String args[]) {
    int daysInMonth = 32;
    if(daysInMonth == 30) {  //false
        System.out.println("Month is April, June, September, or November");

    } else if(daysInMonth == 31) {  //false
        System.out.println(
                "Month is January, March, May, July, August, October, or December.");

    } else if(daysInMonth == 28 || daysInMonth == 29) {  //false
        System.out.println("Month is February.");

    } else {
        assert false;    //最後會走到這個地方,上面因為if(false)不會執行了
    }
}
}

switch 選擇:

public class TrySwitch {
enum WashChoice {cotton, linen, wool, synthetic}  // 列舉型別Define enumeration type

public static void main(String[] args) {
    WashChoice wash = WashChoice.cotton;   // Variable to define the choice of wash

    // The clothes variable specifies the clothes to be washed by an integer value
    // 1:shirts   2:sweaters  3:socks  4:sheets 5:pants
    int clothes = 3;
    switch(clothes) {
        case 1:
            System.out.println("Washing shirts.");
            wash = WashChoice.cotton;
            break;                      //如果沒有break的話,語句依然往下執行.
        case 2:
            System.out.println("Washing sweaters.");
            wash = WashChoice.wool;
            break;
        case 3:
            System.out.println("Washing socks.");
            wash = WashChoice.wool;
            break;
        case 4:
            System.out.println("Washing sheets.");
            wash = WashChoice.linen;
            break;
        case 5:
            System.out.println("Washing pants.");
            wash = WashChoice.synthetic;
            break;
        default:
            System.out.println("Unknown washing - default synthetic.");
            wash = WashChoice.synthetic;
            break;
    }

}
}

while迴圈:

public class WhileLoop {
public static void main(String[] args) {
    int limit = 20;
    int sum = 0;
    int i = 1;
    //while的()括號裡面必須是boolean型別的,true的時候執行,false的時候結束
    while(i <= limit) { //當i <= limit 時候(true)  即是 i<=20的時候執行,
        sum += i++;     //特別注意臨界點當i++ = 21的時候,進行下次迴圈的時候
                        // i<=limit = false ,while 迴圈結束
    }
    System.out.println("sum = " + sum); //進行了1+2+3+...+20 = 210
}
}

for迴圈:

與上面的while類似不過,for迴圈的次數是確定的.

public class ForLoop {
public static void main(String[] args) {
    int limit = 20;                     // Sum from 1 to this value
    int sum = 0;                        // Accumulate sum in this variable

    // 從 1 開始到 limit 20 , i每次加 1
    for(int i = 1; i <= limit; i++) {
        sum += i;                        
    }
    System.out.println("sum = " + sum);
}
}

最近申請了微信公眾號,希望大家來看看,專門為程式設計師而生,做最好的程式設計

高斯程式設計

相關文章