翁老師Java基礎(chǔ)課程筆記

1、超級基礎(chǔ)

Hello world

首先使用Eclipse新建項目


New Java Project
hello項目

接著在src下new一個class

new class
Hello Class
第一行代碼Hello world长豁!

tips:alt +/會自動補全

輸入

Scanner


輸入

如果重復(fù)運行了,這里會顯示多個進程


重復(fù)運行中的程序
輸出拼接字符串
變量
package hello;

import java.util.Scanner;

public class Hello {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("你好");
        Scanner in = new Scanner(System.in);
        System.out.println("100-"+in.nextInt()+"="+(100-in.nextInt()));
    }

}

乍一看這么寫是對的征候,實際上這里有問題,就是in.nextInt()被調(diào)用了兩次祟敛,因此疤坝,需要有兩次輸入,顯然不符合要求垒棋。因此卒煞,就要把第一個輸入定義為變量痪宰,然后后面使用這個變量叼架,應(yīng)該如下:

package hello;

import java.util.Scanner;

public class Hello {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("你好");
        Scanner in = new Scanner(System.in);
        int price = in.nextInt();
        System.out.println("100-"+price+"="+(100-price));
    }

}

變量的定義形式:
<類型名稱><變量名稱>;
舉例:
int price;
int price=0;//【初始化】
int amount;
int price,amount;
java是強類型語言,需要定義變量類型衣撬。

賦值

定義變量之后如果不賦值乖订,輸出會報錯的。

package hello;

import java.util.Scanner;

public class Hello {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("你好");
        Scanner in = new Scanner(System.in);
        final int amount =100;//定義常量具练,后面不能再被賦值了
        int price = 0;
        price = in.nextInt();
        System.out.println(amount+"-"+price+"="+(amount-price));
    }

}


System.out.println是輸出加換行乍构,System.out.print是輸出不加換行。

浮點數(shù)

兩個整數(shù)運算的結(jié)果只能是整數(shù)

當(dāng)浮點數(shù)和證書放到一起運算時扛点,java會將證書轉(zhuǎn)換成浮點數(shù)哥遮,然后進行浮點數(shù)的運算。

浮點計算是有誤差的陵究。但是證書可以進行精確計算眠饮,并且比浮點要快。

運算符優(yōu)先級

單目運算符優(yōu)先級最高
單目是從左到右
賦值是從右到左

類型轉(zhuǎn)換

<目標(biāo)變量類型>(<需要變換類型的目標(biāo)值>)
不會改變原有值铜邮,只會轉(zhuǎn)換格式輸出仪召。

2、邏輯判斷

作比較

打印車票最簡單,沒有判斷金額是否滿足>=10

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
//      初始化
        Scanner in = new Scanner(System.in);
        
//      讀取投幣金額
        System.out.println("請投幣:");
        int amount = in.nextInt();
        
//      打印車票
        System.out.println("******************");
        System.out.println("**java城際鐵柱專線**");
        System.out.println("*******堂票************");
        System.out.println("********10元**********");
        System.out.println("******************");
//      計算并打印找零
        System.out.println("找零"+(amount-10));

    }

}

行內(nèi)注釋/**/

可以在打印車票之前做一個判斷

關(guān)系運算

運算符

運算符 意義
== 相等
!= 不相等
> 大于
>= 大于等于
< 小于
<= 小于等于

所有的關(guān)系運算符比算術(shù)運算符低松蒜,但是比賦值運算符優(yōu)先級高扔茅,==和!=比其他比較
優(yōu)先級低。

做判斷
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
//      初始化
        Scanner in = new Scanner(System.in);
        
//      讀取投幣金額
        System.out.println("請投幣:");
        int amount = in.nextInt();
        
//      打印車票
        if (amount >=10) 
{
            System.out.println("******************");
            System.out.println("**java城際鐵柱專線**");
            System.out.println("*******堂票************");
            System.out.println("********10元**********");
            System.out.println("******************");
    //      計算并打印找零
            System.out.println("找零"+(amount-10));
            }
        else
            System.out.println("請輸入大于等于10元的金額");
    }

}
嵌套和級聯(lián)的判斷

if在if里面
else總是和最近的if匹配秸苗,除非有大括號包圍召娜。
級聯(lián)的if
if (xxx)
{
xxx;
}
else if (xx)
{
xxx;
}
else
{
xxx;
}
條件后面不能加分號;

多路分支

switch(控制表達式){
case 常量:
語句
......
break惊楼;
case 常量:
語句
......
break玖瘸;
default:
語句
......
break吐句;
}
每個條件分支后面要加一個break,不然會繼續(xù)往下運行店读。

3嗦枢、While循環(huán)

while循環(huán)
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
//      初始化
        Scanner in = new Scanner(System.in);
        int balance = 0;
//      讀取投幣金額
        while(true) {
            System.out.println("請投幣:");
            
            int amount = in.nextInt();
            balance = amount + balance;
    //      打印車票
            if (balance >=10) {
                System.out.println("******************");
                System.out.println("**java城際鐵柱專線**");
                System.out.println("*******堂票************");
                System.out.println("********10元**********");
                System.out.println("******************");
        //      計算并打印找零
                System.out.println("找零"+(balance-10));
                balance = 0;
                System.out.println("*******************");
                }
        }
        }

}

數(shù)數(shù)字

對于一個數(shù)字除以10,等到除以10為0時屯断,則獲得了數(shù)字的位數(shù)文虏。

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int number;
        int count = 0;
        
////        初始化
        Scanner in = new Scanner(System.in);
        number = in.nextInt();
        while (number>0)
        {
            number = number /10;
            count = count +1;
        }
        System.out.print(count);
        
    }
}

但是這個語句有問題,因為如果輸入是0的話殖演,那么0是0位數(shù)氧秘。

由此引出do while
進入循環(huán)體的時候不做判斷,循環(huán)體結(jié)束遇到while的時候再做判斷是否執(zhí)行下一步趴久。

do while
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int number;
        int count = 0;
        
////        初始化
        Scanner in = new Scanner(System.in);
        number = in.nextInt();
        do 
        {
            number = number /10;
            count = count +1;
        }
        while (number>0);
        System.out.print(count);
        
    }
}

do while和while的判斷的地方不一樣丸相,并且do while在while結(jié)束的時候需要在后面加一個分號;

到底是用while還是do while呢彼棍,可以先不考慮灭忠,先去想循環(huán)體。

計數(shù)循環(huán)

不知道運算了多少次座硕,可以把其中的count弄成5或者是10試一下

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int count = 100;
        
        
        while (count>0)
    
        {
            System.out.println(count);
            count = count - 1;
            
        }
        ;
        System.out.print(count);
        
    }
}
算平均數(shù)

一個記錄讀入整數(shù)之和的變量
一個記錄計數(shù)值弛作,即數(shù)字的數(shù)量

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入數(shù)字:");
        Scanner in = new Scanner(System.in);
        int count = 0;
        int number;
        int sum=0;
        do {
            number = in.nextInt();
            if(number!=-1) {
            sum = number + sum;
            count = count +1;
                }
        }
        while (number!=-1);
    
        
            System.out.println("平均數(shù)為:"+(double)sum/count);

        
    }
}
猜數(shù)游戲
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入數(shù)字:");
        Scanner in = new Scanner(System.in);
        int ran_num = (int)(Math.random()*100+1);
        int count = 0;
        int number;
        do {
            number = in.nextInt();
            count = count +1;
            if(number>ran_num) 
            {
                System.out.println("偏大");
            }
            else if(number<ran_num) 
            {
                System.out.println("偏小");
            }
        }
        while (number!=ran_num);
    
        
            System.out.println("恭喜你猜對啦!你猜了"+count+"次");

        
    }
}

如果不能在7次之內(nèi)找出正確的數(shù)字华匾,說明你猜數(shù)的方法不對哈哈映琳。

整數(shù)分解/逆序輸出
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        Scanner in = new Scanner(System.in);
        int number;
        int result=0;
        number = in.nextInt();
        do {
            int digit = number % 10;
            number = number/10;
            result = result *10 +digit;
            System.out.print(digit);/*這里是把每一個獲得不換行輸出,但是如果末尾是0的數(shù)字輸出就會有問題*/
        }while(number>0);
        System.out.println();
        System.out.println(result);/*加上result蜘拉,并且把每次的結(jié)果都*10加上所得的余數(shù)*/
        
        
    }
}

4萨西、for循環(huán)

階乘

幾乎所有的for循環(huán)都可以改寫為while

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        Scanner in = new Scanner(System.in);
        int number;
        int factor=1;
//      int count = 1;
        number = in.nextInt();
//      while(count<=number)
//      {
//          factor = factor*count;
//          count = count +1;
//          
//      }
        for(int i=1;i<=number;i++) 
        {
            factor = factor*i;
        }
        System.out.println(factor);
        
    }
}

tips for loops
如果有固定的次數(shù),用for
如果必須執(zhí)行一次旭旭,用do while
其他情況用while

復(fù)合賦值

a = a +6 => a + = 6
a * = b +6 => a = a * (b +6)
i++ => i = +1
++i => i = i + 1
a = i ++ 后綴谎脯,a是原來的值,i做加操作
a = ++i 前綴您机,a和i都是加操作穿肄,數(shù)據(jù)一致。

循環(huán)控制

素數(shù)际看,只能被1和被自己整除的數(shù)咸产,且不包括1

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入一個數(shù)");
        Scanner in = new Scanner(System.in);
        int number = in.nextInt();
        int isPrime = 1;
        for(int i=2;i<number;i++) 
        {
            if(number%i==0)
            {   
                isPrime = 0;
                System.out.println(number+"不是素數(shù),可以被"+i+"整除");
                break;
            }
        }
        if(isPrime==1) {
        System.out.println(number+"是素數(shù)");
        }
        
    }
}

break仲闽,跳出循環(huán)
continue脑溢,跳過本環(huán)節(jié),繼續(xù)循環(huán)
老師舉例是聽一群學(xué)生唱歌,continue是跳過這個學(xué)生聽下一個屑彻,
break則是沒耐心了验庙,后面的學(xué)生也不想聽了,直接跳過社牲。

多重循環(huán)/嵌套循環(huán)

求100以內(nèi)的所有素數(shù)

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        for(int i =2;i<100;i++)
        {
            int isPrime = 1;
            for (int j=2;j<i;j++)
            {
                if(i%j==0)
                {
                    isPrime=0;
                    break;                  
                }
            }
            if(isPrime==1)
            {
            System.out.print(i+" ");
            }
        }


    }
}

求前50個素數(shù)粪薛,這里用for循環(huán)不合適

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int count=0;
        int number=2;
        while(count<50)
        {
            int isPrime=1;
            for(int i=2;i<number;i++)
            {
                if(number%i==0)
                {
                    isPrime=0;/*如果被小于其的數(shù)整除則不是素數(shù),跳出循環(huán)*/
                    break;
                }
            }
            if(isPrime==1)
            {
                count+=1;/*如果是素數(shù)搏恤,記個數(shù)违寿,然后輸出*/
                System.out.print(number+" ");
            }
            number+=1;
            
        }


    }
}

湊硬幣問題,如何使用1角熟空、2角藤巢、5角湊出10元以下的金額,枚舉息罗、窮舉比較適合掂咒。

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入金額(元)");
        Scanner in = new Scanner(System.in);
        int number = in.nextInt();
        OUT:/*這里的OUT是個label,用于地下的break迈喉,或者continue*/
        for(int i=0;i<=number*5;++i) 
        {
            for(int j=0;j<=number*2;++j)
            {
                for(int k=0;k<=number*10;++k)
                    if(i*0.5+j*0.2+k*0.1==number)
                        {
                            System.out.println(i+"張5角"+j+"張2角"+k+"張1角");
                            break OUT;
                        }
            }
        }

    }
}

標(biāo)號問題绍刮,在循環(huán)前可以放一個標(biāo)號來標(biāo)識循環(huán),即label弊添,帶標(biāo)號的break和continue對那個循環(huán)起作用

邏輯類型

boolean布爾類型
可以在判斷中把i(isPrime=1)改為if(isPrime)

運算符 意義
!
&&
II

優(yōu)先級

優(yōu)先級 運算符 結(jié)合性
1 () 從左到右
2 ! + - ++ -- 從右到左
3 * / % 從左到右
4 + - 從左到右
5 < <= > >= 從左到右
6 == != 從左到右
7 && 從左到右
8 II 從左到右
9 = += -= *= /= %= 從右到左
求和

1 + 1/2 + 1/3 + 1/4 + ..+ 1/n

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入一個數(shù)");
        int number = in.nextInt();
        double sum=0;
        for(int i =1;i<=number;i++)
        {
            sum = sum + 1.0/i;

        }
        System.out.println("和為"+sum);
    }
}

Java里的printf是有格式的輸出录淡,例如想輸出保留兩位小數(shù)的浮點數(shù)據(jù):
System.out.printf("%.2f",12.0)
即可輸出12.00

1 - 1/2 + 1/3 -1/4 + ... + 1/n [這個目前老師演示的是至少可以有兩種辦法捌木,并且在for循環(huán)中油坝,第三個表達式可以有多個,并且之間可以使用逗號分割刨裆,也可以啥也沒有直接把i++拉下來]

//方法一
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入一個數(shù)");
        int number = in.nextInt();
        double sum=0;
        int sign = 1;
        for(int i =1;i<=number;i++,sign = -sign)
        {
            sum = sum + 1.0/i*sign;/*上面的sign和-sign其實也可以拿下來*/
        }
        System.out.printf("和為"+"%.2f",sum);
    }
}
//方法二
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入一個數(shù)");
        int number = in.nextInt();
        double sum=0;
        for(int i =1;i<=number;i++)
        {
            if(i%2==0)
                sum = sum -1.0/i;
            else
                sum = sum+1.0/i;
        }
        System.out.printf("和為"+"%.2f",sum);
    }
}
最大公約數(shù)

可以有兩種方法澈圈,第一種是最笨的枚舉法,第二種是輾轉(zhuǎn)相除法/歐幾里得法則帆啃。

//方法一
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入兩個數(shù)");
        int a = in.nextInt();
        int b = in.nextInt();
        int gcd=1;
        for(int i =1;i<=a&&i<=b;i++)
        {
            if(a%i==0&&b%i==0)
                gcd=i;
        }
        System.out.printf(a+"和"+b+"的最大公約數(shù)為"+gcd);
    }
}

輾轉(zhuǎn)相除法/歐幾里得法則 求最大公約數(shù)
1瞬女、如果b=0,計算結(jié)束努潘,a就是最大公約數(shù)诽偷,
2、否則計算a%b疯坤,讓a等于b报慕,b等于余數(shù)
3、回到第1步

//方法二
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入兩個數(shù)");
        int a = in.nextInt();
        int b = in.nextInt();
        int ca = a;/*將輸入的數(shù)據(jù)進行按照歐幾里得法則進行判斷*/
        int cb = b;/*將輸入的數(shù)據(jù)進行按照歐幾里得法則進行判斷*/
        while(cb!=0)
        {
            int r;
            r =  ca%cb;
            ca = cb;
            cb = r;
            
        }   
        System.out.printf(a+"和"+b+"的最大公約數(shù)為"+ca);
    }
}

5压怠、數(shù)組

初試數(shù)組

以上面的求平均數(shù)為例眠冈,在這里依然是求所有輸入的平均數(shù),并且輸出所有大于平均數(shù)的值菌瘫,這里就需要存儲所有輸入的值了蜗顽。

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        System.out.println("請輸入數(shù)字");
        int[] numbers = new int[100];
        int cnt = 1;
        numbers[cnt]=in.nextInt();
        double sum=0.0;
        while(numbers[cnt]!=-1)
        {
            sum = sum + numbers[cnt];
            cnt++;
            numbers[cnt]=in.nextInt();
                    
        }
        double average = sum/(cnt-1);
        System.out.println("平均數(shù)為"+average);
        for(int i =1;i<cnt;i++)
        {
            if(numbers[i]>average)
            {
                System.out.println(numbers[i]+"是大于平均數(shù)"+average+"的");
            }
        }
    }
}
//老師說這個程序有危險性布卡,因為可能會存在數(shù)據(jù)越界的問題。
創(chuàng)建數(shù)組
數(shù)組的特點

是一種數(shù)據(jù)結(jié)構(gòu)雇盖,能夠記錄同一種類型的多個數(shù)據(jù)忿等;
數(shù)組中的每個數(shù)據(jù)叫做元素,所有的元素具有相同的數(shù)據(jù)類型崔挖。

定義數(shù)組變量

<類型> [] <名字> = new <類型>[元素個數(shù)]
int [] grades = new int[100];
double [] averages = new double[20]

元素個數(shù)必須是整數(shù)
元素個數(shù)必須給出
元素個數(shù)可以是變量

數(shù)組的元素

每個元素都是那種類型的變量这弧,索引或者下標(biāo)都是從0開始的,最大是元素個數(shù)-1虚汛。如果超過了元素個數(shù)-1或者小于0了匾浪,則為越界。

因此卷哩,上面那個求平均數(shù)的程序就是有問題的蛋辈,會存在越界的問題。

//此方法確實不會越界将谊,并且定義了多大的長度冷溶,就得輸入多少的值
package heIIo;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入數(shù)組的數(shù)量");
        Scanner in = new Scanner(System.in);
        int cnt = in.nextInt();
        int [] numbers = new int[cnt];
        int sum = 0;
        for(int i=0;i<cnt;i++)
        {
            numbers[i] = in.nextInt();
            sum = sum + numbers[i];
        }
        int average = sum/cnt;
        System.out.println("平均數(shù)為"+average);
        System.out.print("其中大于平均數(shù)的有: ");
        for (int i =0;i<numbers.length;i++)
        {
            if(numbers[i]>average)
            {
                System.out.print(numbers[i]+" ");
            }
        }
        

    }

}

投票統(tǒng)計

寫一個程序,輸入數(shù)量不確定的[0,9]范圍內(nèi)的整數(shù)尊浓,統(tǒng)計每一個數(shù)字出現(xiàn)的次數(shù)逞频,輸入-1時表示輸入完畢。

//這個算法真的秒栋齿,想半天才想明白
package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner in = new Scanner(System.in);
        int x;/*記錄輸入的數(shù)字*/
        int [] numbers = new int [10];/*用數(shù)組記錄每個數(shù)字出現(xiàn)的次數(shù)*/
        x = in.nextInt();
        while(x!=-1)
        {
            if(x>=0&&x<=9)
            {
                numbers[x]++;/*如果在0-9之內(nèi)苗胀,那么數(shù)組變量計數(shù)加一*/
            }
            x = in.nextInt();
        }
        for(int i=0;i<numbers.length;i++)
        {
            System.out.println(i+"出現(xiàn)了"+numbers[i]+"次");
        }
    }
}
數(shù)組變量
直接初始化數(shù)組

new 創(chuàng)建的數(shù)組內(nèi)的值都是0
int [] scores = {}

數(shù)組變量賦值

普通變量是所有者,數(shù)組變量是管理者
int [] a ={1,2,5,10};
int [] b = a;
b[0] = 10;
此時a[0]也是10

數(shù)組變量之間的比較是判斷是否管理同一個數(shù)組瓦堵。

例如:
int [] a ={1,2,3}
int [] b ={1,2,3}
System.out.println(a==b);
是false

遍歷數(shù)組

定義一個數(shù)組基协,里面有幾個數(shù),然后讀取屏幕輸入的一個數(shù)菇用,計算此數(shù)是否在定義的數(shù)組內(nèi)澜驮,并且讀出是第幾個:

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print("請輸入數(shù)字:");
        Scanner in = new Scanner(System.in);
        int[] data = {4,6,10,3};
        int num = in.nextInt();
        int loc = -1;
        for(int i = 0;i<data.length;i++)
        {
            if(num == data[i]) {
                loc = i+1;
                System.out.print("此數(shù)字是數(shù)組中的第"+loc+"個");
                break;
            }
        }
        if(loc==-1)
            System.out.println("您輸入的數(shù)字不在數(shù)組中!");
    }
}
for each循環(huán)

for(<類型><變量>:<數(shù)組>)
{
...
}

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print("請輸入數(shù)字:");
        Scanner in = new Scanner(System.in);
        int[] data = {4,6,10,3};
        int num = in.nextInt();
        boolean isExist = false;
        for(int k:data)
        {
            if(num == k) {
                isExist = true;
                System.out.println("您輸入的數(shù)字在此數(shù)組中~");
                break;
            }
        }
        if(!isExist)
            System.out.println("您輸入的數(shù)字不在數(shù)組中惋鸥!");
    }
}
利用數(shù)組找素數(shù)

實際上杂穷,對于for循環(huán)來說,找一個素數(shù)卦绣,可以不用找到n-1耐量,找到次數(shù)的開方就可以了,然后步進為2.
還有一種辦法是通過已知的素數(shù)迎卤,新的數(shù)不能被已知的素數(shù)整除也是素數(shù)拴鸵。
構(gòu)建前50個素數(shù)表:

\\方法一:傳統(tǒng)方法
package hello;



public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [] primes = new int[50];
        primes[0] = 2;
        int cnt = 1;/*后面的primes從1開始,現(xiàn)在數(shù)組中也只有一個素數(shù)*/
        MAIN_LOOP:
        for(int x=3;cnt<50;x++)
        {
            //已有的素數(shù)能否整除
            for(int i=0;i<cnt;i++)
            {
                if(x%primes[i]==0)
                {
                    continue MAIN_LOOP;/*如果不是素數(shù),則直接跳出小循環(huán)劲藐,但是還是繼續(xù)大循環(huán)*/
                }
            }
            primes[cnt++]=x;/*如果x在上面的小循環(huán)內(nèi)沒有被數(shù)組內(nèi)的現(xiàn)有值整除八堡,那么則是素數(shù),記錄下來聘芜,同時cnt加1兄渺,所獲得的素數(shù)加一個*/
        }
        for(int k:primes)
        {
            System.out.print(k+" ");
        }
    }
}

欲構(gòu)造n以內(nèi)的素數(shù)表:
1、令x為2汰现;
2挂谍、將2x、3x瞎饲、4x直至ax<n的數(shù)標(biāo)記為非素數(shù)
3口叙、令x為下一個沒有被標(biāo)記為非素數(shù)的數(shù),重復(fù)2嗅战;直至到所有的書都已經(jīng)嘗試完畢妄田。

算法描述:
1、創(chuàng)建prime為boolean[n]驮捍,初始化其所有元素為true疟呐,prime[x]為true表示x是素數(shù)
2、令x=2
3东且、如果x是素數(shù)启具,則對于(i=2;xi<n;i++)令prime[ix]=false
4、令x++珊泳,如果x<n鲁冯,重復(fù)3,否則結(jié)束旨椒。
計算機的算法不一定要和人的思考方式相同晓褪。

package hello;



public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        boolean [] primes = new boolean[100];
        for (int i=0;i<primes.length;i++)
        {
            primes[i] = true;
        }
        for(int i =2;i<primes.length;i++)/*這里表示從2到99開始試*/
        {
            if(primes[i])
            {
                for(int k=2;k*i<primes.length;k++)/*這里表示從2開始,作為i的倍數(shù)综慎,如果i為素數(shù),那么其倍數(shù)都不是*/
                {
                    primes[k*i]=false;
                }
            }
        }
        for (int i=2;i<primes.length;i++)
        {
            if(primes[i])
                System.out.print(i+" ");;
        }
    }
}
二維數(shù)組

int[][] a = new int [3][5]
遍歷:
for (int i=0;i<3;i++){
for(int j =0;j<5;j++){
a[i][j] = i*j;
}
}
a[i,j]并不存在

二維數(shù)組的初始化
int[][] a = {
{1,2,3,4},
{1,2,3}
};
上面這個數(shù)組a,a[1][3]則越界了勤庐。

tic-tac-toe游戲

讀入一個3x3的矩陣示惊,矩陣中的數(shù)字為1表示該位置上有一個X,為0則表示為O
程序判斷這個矩陣中是否有獲勝的一方愉镰,輸出表示獲勝的一方的字符是X或O米罚,或輸出無人獲勝。
這個還沒想好怎么寫丈探。

6录择、字符/字符串

字符類型

單個的字符:char
使用單引號表示,Java使用Unicode來表示字符,可以表達包括漢字在內(nèi)的多種文字隘竭。

字符可以計算
會以Unicode編碼表中的編碼值來計算塘秦。計算結(jié)果是數(shù)值型的。

逃逸字符

用來表達無法印出來的控制字符或特殊字符动看,由反斜杠""開頭尊剔,后面跟上另一個字符,合起來組成一個字符菱皆。
\b回退一格
\t到下一個表格位
\n換行
\n回車
"雙引號
'單引號
\反斜杠本身

包裹類型

每種基礎(chǔ)類型都有對應(yīng)的包裹類型

基礎(chǔ)類型 包裹類型
boolean Boolean
char Character
int Integer
double Double
包裹類型的用處

獲得該類型的最大最小值
Integer.MIN_VALUE
Integer.MAX_VALUE

.運算符
Character.isDigit()

字符串變量

String须误,它不是基礎(chǔ)類型,二是一個類
像數(shù)組遍歷是數(shù)組的管理者一樣仇轻,String變量是對象的管理者而非所有者京痢。

String s = new String("a string");
創(chuàng)建了一個String對象,用a string初始化這個對象篷店,創(chuàng)建管理這個對象的變量s历造,讓s管理這個對象。

字符串連接:+
如果一個是字符串另一個不是船庇,那么會自動將非字符串變?yōu)樽址筮B接吭产。

輸入字符串
in.next();讀入一個單詞,單詞分隔的標(biāo)志是空格
空格包括空格鸭轮、tab和換行
in.nextLine()讀入一整行

比較字符串
如果使用==臣淤,是判斷兩個字符串是不是同一個,即管理同一個內(nèi)存變量窃爷,
而.equals才是比較內(nèi)容是否相同邑蒋。

字符串操作

.操作

比較大小
s1.compareTo(s2);

長度
s1.length();

訪問字符串指定位置的字符【字符串是不可以使用for each的】
.charAt(index)

獲得子串
s.substring(n)
得到從n號到末尾的全部內(nèi)容
s.substring(b,e)
得到從b號到e號之前的內(nèi)容,不包含e按厘。

查找字符
s.indexOf(c)找到c字符/字符串(字符串使用""包圍)在字符串s的位置医吊,找不到返回-1
s.indexOf(c,n)從n號位置開始尋找c字符,返回的是實際index值
s.lastIndexOf(c)從右邊開始找
s.lastIndexOf(c,n)從右邊開始找

其他String操作
startWith(t)
endsWith(t)
trim() 跳過空格
replace(a,b)
toLowerCase()
toUpperCase()

但是這些操作都不會改變字符串本身逮京,而是制作出新的字符串卿堂。

switch case也可以使用String類型

Math類

abs
round
pow
sqrt
...

7、函數(shù)

對象的操作

String s = "hello";
int i = s.length();
System.out.println(s+"bye");

這些都是對象在執(zhí)行函數(shù)

原來計算兩個值之間的素數(shù)數(shù)量懒棉,并求和是這樣做的

package hello;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入兩個數(shù)");
        Scanner in = new Scanner (System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        if(m==1)m=2;
        int cnt = 0;
        int sum = 0;
        for(int i =m;i<n;i++)
        {
            boolean isPrime=true;
            for(int j=2;j<i;j++)
            {
                if(i%j==0) {
                    isPrime = false;
                    break;
                }
            }
            if(isPrime) {
                cnt++;
                sum = sum+i;
            }
        }
        
        System.out.println("在"+m+"和"+n+"之間有"+cnt+"個素數(shù)草描,且和為"+sum);
    }
}

可以把下面的判斷,作為函數(shù)寫到上面

package hello;

import java.util.Scanner;

public class Main {
    public static boolean isPrime(int i)
    {
        boolean isPrime=true;
        for(int j=2;j<i;j++)
        {
            if(i%j==0) {
                isPrime = false;
                break;
            }
        }

        return isPrime;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入兩個數(shù)");
        Scanner in = new Scanner (System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        if(m==1)m=2;
        int cnt = 0;
        int sum = 0;

        for(int i =m;i<n;i++)
        {
            if(isPrime(i)) {
                cnt++;
                sum = sum+i;
            }
        }
        System.out.println("在"+m+"和"+n+"之間有"+cnt+"個素數(shù)策严,且和為"+sum);
    }
}

函數(shù)是一塊代碼穗慕,接受零個或多個參數(shù),做一件事情妻导,并返回零個或一個值逛绵。

函數(shù)定義:
函數(shù)頭:
public static void【這個是返回類型】 func_name【這個是函數(shù)名】(int a,int b【a和b是參數(shù)表】)
void表示無返回值的函數(shù)
public和static在后面進階課會說

調(diào)用函數(shù)

函數(shù)名(參數(shù)值)
()起到了表示函數(shù)調(diào)用的重要作用怀各,即使沒有參數(shù)也需要()

debug 三個功能【只是大概,不準(zhǔn)確】
step into 進入函數(shù)
step over直接進行下一步术浪,不會進入函數(shù)瓢对,會跳出
step return直接把返回值帶出,不會進入函數(shù)

參數(shù)傳遞

類型不匹配怎么辦
當(dāng)函數(shù)期望的參數(shù)類型比調(diào)用函數(shù)時給的值得類型寬添吗,編譯器可以將類型悄悄轉(zhuǎn)換好沥曹;
當(dāng)函數(shù)期望的參數(shù)類型比調(diào)用函數(shù)時給的值得類型窄的時候,需要強制類型轉(zhuǎn)換碟联,例如(int)5.0妓美;
當(dāng)函數(shù)期望的參數(shù)類型與調(diào)用函數(shù)時給的值得類型之間無法轉(zhuǎn)換的時候,那就沒辦法了鲤孵,例如boolean類型無法轉(zhuǎn)換為整型壶栋。

java在調(diào)用函數(shù)時,傳遞的永遠是值普监,二人不是變量本身贵试。例如,
public static void swap(int a,int b)
{
int t;
t =a;
a = b;
b = t;
}
public static void main(String[] args){
int a = 5;
int b = 6;
swap(a,b);
System.out.println(a,b);
}
這里打印出來的結(jié)果是a和b還是原來的值凯正。

每個函數(shù)有自己的變量空間毙玻,參數(shù)也位于這個獨立的空間中,和其他函數(shù)沒有關(guān)系廊散。

過去桑滩,對于函數(shù)參數(shù)表中的參數(shù),叫做"形式參數(shù)"允睹,調(diào)用函數(shù)時給的值运准,叫做"實際參數(shù)"。

由于容易讓初學(xué)者誤認為十實際參數(shù)就行實際在函數(shù)中進行計算的參數(shù)缭受,誤會了調(diào)用函數(shù)的時候把變量而不是值傳進去胁澳,所以不建議繼續(xù)用這種古老的方式來稱呼,而叫做參數(shù)和值的關(guān)系米者。

本地變量

函數(shù)的每次運行韭畸,就產(chǎn)生了一個獨立的變量空間,在這個空間中的變量塘雳,是函數(shù)的這次運行所獨有的陆盘,稱作本地變量。
定義在函數(shù)內(nèi)部的變量就是本地變量败明。
參數(shù)也是本地變量。

變量的生存期和作用域太防,都是在大括號【塊】內(nèi)妻顶。

本地變量的規(guī)則:
本地變量定義在塊內(nèi)的酸员;
可以定義在函數(shù)的塊內(nèi);
可以定義在語句的塊內(nèi)讳嘱;
甚至可以隨便拉一對大擴招定義變量幔嗦。
程序在進入這個塊之前,其中的變量不存在沥潭,離開這個塊邀泉,其中的變量就消失了。

在塊外面定義的變量钝鸽,在里面仍然有效汇恤;
不能在一個塊內(nèi)定義同盟的變量,也不能定義塊外面定義過的變量拔恰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末因谎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子颜懊,更是在濱河造成了極大的恐慌财岔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件河爹,死亡現(xiàn)場離奇詭異匠璧,居然都是意外死亡,警方通過查閱死者的電腦和手機咸这,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門夷恍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炊苫,你說我怎么就攤上這事裁厅。” “怎么了侨艾?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵冀瓦,是天一觀的道長刑枝。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么谴轮? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮破喻,結(jié)果婚禮上职祷,老公的妹妹穿的比我還像新娘。我一直安慰自己蚁鳖,他們只是感情好磺芭,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著醉箕,像睡著了一般钾腺。 火紅的嫁衣襯著肌膚如雪徙垫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天放棒,我揣著相機與錄音姻报,去河邊找鬼。 笑死间螟,一個胖子當(dāng)著我的面吹牛吴旋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厢破,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荣瑟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了溉奕?” 一聲冷哼從身側(cè)響起褂傀,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎加勤,沒想到半個月后仙辟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鳄梅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年叠国,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戴尸。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粟焊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孙蒙,到底是詐尸還是另有隱情项棠,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布挎峦,位于F島的核電站香追,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坦胶。R本人自食惡果不足惜透典,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顿苇。 院中可真熱鬧峭咒,春花似錦、人聲如沸纪岁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幔翰。三九已至顽决,卻和暖如春短条,著一層夾襖步出監(jiān)牢的瞬間导匣,已是汗流浹背才菠。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贡定,地道東北人赋访。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像缓待,于是被迫代替她去往敵國和親蚓耽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354