1. 程式人生 > >整理筆記--Java基礎(數組)

整理筆記--Java基礎(數組)

app lin 元素 st2 system har 出現 n) tin

int[ ]arr = new int[3]==>動態初始化。

int[ ]arr = {1,2,3}==>靜態初始化。

Java沒有多維數組,二維數組實際上是一維數組的一維數組。

例子1:

/*分析以下需求,並用代碼實現:

(1)打印由7,8,9三個數組組成的三位數,要求該三位數中任意兩位數字不能相同

(2)打印格式最後的三位數字以空格分隔,如789 798 879 897 978 987

提示: 考慮使用for循環的嵌套

*/

public class Test1 {

public static void main(String[] args) {

//這種方法最簡單

for
(int i=789;i<=987;i++){ String s = String.valueOf(i); if(s.contains("7")&&s.contains("8")&&s.contains("9")){ System.out.println(s); /*char[] ch = { ‘7‘, ‘8‘, ‘9‘ }; StringBuffer sb = new StringBuffer(); // 要是比較四個數 就多加一個for循環 把比較條件添加上就行了 for (int i = 0; i < ch.length; i++) { for (int j = 0; j < ch.length; j++) { for (int j2 = 0; j2 < ch.length; j2++) { if (i != j && j != j2 && i != j2) { sb.append(ch[i]).append(ch[j]).append(ch[j2]).append(" "); }}}} System.out.println(sb);
*/ }}}}

例子2:

/*數組去重問題

存在該數組: int[] arr = { 16, 23, 9, 6, 1, 23, 6, 7, 8, 23 };

去除上面定義的數組中的重復元素,把去重復後的元素存入新數組中,並打印新數組中的元素*/

public class Test2 {

public static void main(String[] args) {

int[] arr = { 16, 0, 23, 0, 9, 6, 0, 1, 23, 6, 0, 7, 8, 23 };

// 1.創建新數組

int[] newArr = new int[arr.length];

int count = step1(arr, newArr);

print(newArr);

int[] newArr2 = new int[count]; step2(newArr, newArr2, count); print(newArr2); } public static void step2(int[] newArr, int[] newArr2, int count) { for (int i = 0; i < count; i++) { newArr2[i] = newArr[i]; }} public static int step1(int[] arr, int[] newArr) { int count = 0; for (int i = 0; i < arr.length; i++) { boolean b = true; for (int j = 0; j < count; j++) {//這一步 把j if (arr[i] == newArr[j]) { b = false; break; }} if (b) { newArr[count] = arr[i];//要出現重復的元素 就必須是兩個以上 所以進入上面判斷的時候 count就起碼等於1 循環成立 count++; }} return count; } public static void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); }}

例子4:

/*請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母

思路:

1.定義以星期的字母開頭的數組 String[] arr = { "", "M", "Tu", "W", "Th", "F", "Sa", "Su" };

2.定義漢字數組    String[] arrWeek = { "", "一", "二", "三", "四", "五", "六", "日" };

3.死循環.

當鍵盤錄入M,W等唯一的字母時, 直接打印對應的星期

當鍵盤錄入T,S時, 繼續錄入第二個字母進行判斷

當錄入其他字母時, 直接要求繼續錄入*/

public class Test4 {

public static void main(String[] args) {

/*String[] arr = { "", "M", "Tu", "W", "Th", "F", "Sa", "Su" };

String[] arrWeek = { "", "一", "二", "三", "四", "五", "六", "日" };

Scanner sc = new Scanner(System.in);

while(true){

System.out.println("請輸入第一個字母:");

String s1 = sc.nextLine();

for (int i = 0; i < arr.length; i++) {

if(arr[i].toUpperCase().equals(s1.toUpperCase())){

System.out.println("星期"+arrWeek[i]);

return;

}

if(arr[i].toUpperCase().startsWith(s1.toUpperCase())){

System.out.println("請輸入第二個字母");

String s2 = sc.nextLine();

s1+=s2;

//i--;//很重要!!!

}}

System.out.println("未查找到對應星期, 請重新輸入");

}*/

Scanner sc = new Scanner(System.in);

System.out.println("請輸入對應的星期");

while (true) {

String line = sc.nextLine();

if ("M".equals(line) || "W".equals(line) || "F".equals(line) || "".equals(line)) {

print(line);

break;

} else if ("T".equals(line)) {

String line2 = sc.nextLine();

if ("u".equals(line2) || "h".equals(line2)) {

print(line + line2);

// 這裏要傳入兩次判斷的字符串 即T+h或者T+u 只傳入單一的line不能匹配

break;

}

} else if ("S".equals(line)) {

String line3 = sc.nextLine();

if ("a".equals(line3) || "u".equals(line3)) {

print(line3);

break;

}

} else {

System.out.println("請繼續錄入");

}}}

// 打印方法

private static void print(String line) {

int index = getIndex(line);

System.out.println(index);

String st = getWeek(index);

System.out.println("星期" + st);

}

// 找到索引後 進入這個查找對應的星期

private static String getWeek(int index) {

String[] arrWeek = { "", "一", "二", "三", "四", "五", "六", "日" };

String s = "";

for (int i = 0; i < arrWeek.length; i++) {

if (index == i) {

s = arrWeek[i];

}}

return s;

}

// 當用戶輸入字母的時候 進入這個方法查詢對應的索引

public static int getIndex(String line) {

String[] arr = { "", "M", "Tu", "W", "Th", "F", "Sa", "Su" };

int index = -1;

for (int i = 0; i < arr.length; i++) {

if (line.equals(arr[i])) {

index = i;

}}

return index;

}}

例子5:

public class Test5 {

public static void main(String[] args) throws IOException {

Scanner xx = new Scanner(System.in);

System.out.println("請輸入行數:");

int row = xx.nextInt();

System.out.println("請輸入列數:");

int coulumn = xx.nextInt();

pdd(row,coulumn);

}

public static void pdd(int a,int b){

for(int x=1;x<=a;x++){

for(int y=1;y<=x && y<=b;y++){

System.out.print(y+"*"+x+"="+y*x+"\t");

}

System.out.println();

}}}

例子6:

public class Test6 {

public static void main(String[] args) {

int i,j;

for(i=1;i<=5;i++){

for(j=2;j<=6-i;j++){

System.out.print(" ");

}

for(j=2;j<=i*2;j++){

System.out.print("*");

}

System.out.println();

}

for(i=6;i<=9;i++){

for(j=1;j<=i-5;j++){

System.out.print(" ");

}

for(j=1;j<=(10-i)*2-1;j++){

System.out.print("*");

}

System.out.println();

}}}

例子7:

/**

* 打印1-100之間的所有素數及個數 提示: 大於1的且只能被1和其本身整除的數叫素數 如:2 3 5 7 11

*/

public class Test7 {

public static void main(String[] args) {

// 1.遍歷1~100

for (int i = 2; i <= 100; i++) {

// 2.調用判斷素數的方法

if (isPrime(i)) {

System.out.print(i + " ");

}}}

/*返回值類型: boolean 方法名: isPrime 參數列表: int x 當該方法返回值為true時是素數

*/

private static boolean isPrime(int x) {

// 1.定義布爾類型的標識符b

boolean b = true;

// 2.從2開始遍歷一直到x-1

for (int i = 2; i < x; i++) {// 這裏可以試數進行驗證

// 3.只要滿足對i取模等於0,則證明不是素數,此時將b置為false,並結束循環

if (x % i == 0) {

b = false;

break;

}}

// 4.將值返回

return b;

}}

例子8:

public class Test08 {
    /*二維數組問題
    假如2019CBA賽季要開始了,每個人會有三個單場籃球比賽,博彩公司預測一下幾個人的單場得分分別是:
    姚明:22,33,44
    易建聯:12,8,14
    王治郅:33,45,65
    朱芳雨:11,66,99
    (1)求四個人的總得分之和
    (2)求四個人中單場得分最高分
    (3)求去掉單場最高分和最低分,四個人的得分總和的平均分*/
    static int i,j;
    static int count;
    public static void main(String[] args) {
        int[][]arr={{22,33,44},{12,8,14},{33,45,65},{11,66,99}};
        int a=getZongFen(arr);
        System.out.println("總分為"+a);
        int b=getZhongChang(arr);
        System.out.println("四人中場最高分是"+b);
        int max = getZuiMax(arr);
        int min = getZuiMin(arr);
        System.out.println("四人總和的平均分是"+1.0*(a-max-min)/(count-2));
    }
    //4.求單場最低分
    private static int getZuiMin(int[][] arr) {
        int min=arr[0][0];
        for (i = 0; i < arr.length; i++) {
            for (j = 0; j < arr[i].length; j++) {
                if(min>arr[i][j]){
                    min=arr[i][j];
                }
            }
        }
        return min;
    }
    //3.求單場最高分
    private static int getZuiMax(int[][] arr) {
        int max=arr[0][0];
        for (i = 0; i < arr.length; i++) {
            for (j = 0; j < arr[i].length; j++) {
                if(max<arr[i][j]){
                    max=arr[i][j];
                }
            }
        }
        return max;
        
    }
    //2.求中場得分最高的
    private static int getZhongChang(int[][] arr) {
        int max=arr[0][1];
        for (i = 0; i < arr.length; i++) {
            for (j = 1; j < arr[i].length-1; j++) {
                if(max<arr[i][j]){
                    max=arr[i][j];
                }
            }
        }
        return max;
    }
    //1.求總分
    private static int getZongFen(int[][]arr) {
        int sum=0;
        for (i = 0; i < arr.length; i++) {
            for (j = 0; j < arr[i].length; j++) {
                sum+=arr[i][j];
                count++;
            }
        }
        return sum;

    }
}

例子9:

/**

* 打印1到100之內的整數,但數字中包含9的要跳過

每行輸出5個滿足條件的數,之間用空格分隔

*/

public class Test9 {

public static void main(String[] args) {

int count = 0;

for (int i = 1; i <= 100; i++) {

int ge = i % 10;

int shi = i / 10;

if (ge == 9 || shi == 9) {

continue;

}

System.out.print(i + "\t");

count++;

if (count % 5 == 0) {

System.out.println();

}}}}

整理筆記--Java基礎(數組)