JavaSE習題練習

Home22
(倒排一個字符串)編寫-一個程序,提示用戶輸人一個字符串,然後以反序顯示該字符串。
在這裏插入圖片描述

import java.util.Scanner;
class Home{
	public static void main(String[] args){
		Scanner scanner =new Scanner(System.in);
		System.out.print("請輸入字符串");
		String a=scanner.nextLine();
		String b="";
		char c[]=a.toCharArray();
		for(int i=c.length-1;i>=0;i--){
			b=b+c[i];
		}
		System.out.print(b);
	}
}

Home23
(對大寫字母計數)編寫一個程序,提示用戶輸入一個字符串,然後顯示該字符串中大寫字母的數目。
在這裏插入圖片描述

import java.util.Scanner;
class Home23{
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        System.out.print("Enter a string:");
        String str=scanner.nextLine();
        int sum=0;
        char c[]=str.toCharArray();
        for(int i=0;i<str.length();i++){
            if(c[i]<='Z'&&c[i]>='A'){
                sum++;
            }
        }
        System.out.println("the number is uppercase letter is "+sum);
    }
}

Home24
(反向顯示一個整數)使用下面的方法頭編寫方法,反向顯示一個整數:
public static void reverse(int number)
例如: reverse(3456) 返回6543。編寫一個測試程序,提示用戶輸入一個整數,然後顯示它的反向數。

import java.util.Scanner;
class Home24{
    public static long sum=0;
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        System.out.print("Enter a number:");
        long n=scanner.nextLong();
        reverse(n);
        System.out.println(sum);
    }
    public static void reverse(long n){
        while(true){
            sum=sum*10+n%10;
            n/=10;
            if(n==0){
                break;
            }
        }
    }
}

Home25
(指定字符的出現次數)使用下面的方法頭編寫-一個方法,找到一個字符串中指定字符的出現次數。
public static int count(String str, char a)
例如,count(“Welcome”,‘e’) 返回2.編寫一個測試程序,提示用戶輸人一個字符串以及一個字符,顯示該字符在字符串中出現的次數。

import java.util.Scanner;
class Home25{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("輸入字符串:");
        String str=scanner.nextLine();
        System.out.print("輸入查找元素:");
        String ch=scanner.next();
        int num=count(str,ch);
        System.out.println(ch+"出現次數爲"+num);
    }
    public static int count(String str,String ch){
        
        int num=0;
        while(str.indexOf(ch)!=-1){
            str=str.substring(str.indexOf(ch)+1);
            System.out.println(str.indexOf(ch));
            num++;
        }
        return num;
        
        /*
        這裏爲另外一種方法
        int num=0;
        for(int i=0;i<str.length();i++){
            if((str.charAt(i)+"").equals(ch)){
                num++;
            }
        }
        return num;
        */
    }
}

Home26

(迴文素數)迴文素數是指一個數同時爲素數和迴文數。例如: 131 是一個素數,同時也是一個迴文素數。數字313和757也是如此。編寫程序,顯示前100個迴文素數。每行顯示10個數並且準確對齊,數字中間用空格隔開。如下所示:
2 3 5 7 11 101 131 151 181 191

313 353 373 383 727 757 787 797 919 929

import java.util.Scanner;
class Home26{
    public static void main(String[] args) {
        //1.數字初始化
        int num=initDate();
        //2.判斷該數是不是迴文素數
        if(isHWSS(num)){
            System.out.println("yes");
        }else{
            System.out.println("no");
        }
    }
    public static int initDate(){
        Scanner scanner =new Scanner(System.in);
        System.out.print("enter a number:");
        return scanner.nextInt();
    }public static boolean isHWSS(int num){
        //3.判斷是否滿足迴文和素數
        return isHuiWen(num)&&isSuShu(num);
    }
    public static boolean isHuiWen(int num){
        //4.計算翻轉數字
        int a=reverse(num);
        return a==num;
    } 
    public static int reverse(int num){
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                break;
            }
        }
        return sum;
    }
    public static boolean isSuShu(int num){
        //5.判斷素數
        boolean flag=true;
        for(int i=2;i<=num/2;i++){
            if(num%i==0){
                flag=false;
                break;
            }
        }
        return flag;
    }
}

Home27
(遊戲:雙骰兒賭博)擲雙骰子游戲是賭場中非常流行的骰子游戲。編寫程序,玩這個遊戲的一個變種,如下所示:

  擲兩個骰子。每個骰子有六個面,分別表示值1, 2, ... 6。檢查這兩個骰子的和。如果和爲2、3或12 (稱爲擲骰子(craps),你就輸了;如果和是7或者11 (稱作自然( natural)),你就贏了;但如果和是其他數字(例如: 4、5、 6、8、9或者10),就確定了一個點。繼續擲骰子,直到擲出一個7或者擲出和剛纔相同的點數。如果擲出的是7,你就輸了。如果擲出的點數和你前一次擲出的點數相同,你就贏了。

程序扮演一個獨立的玩家。下面是一些運行示例。
在這裏插入圖片描述

import java.util.Random;
class Home27{
    public static void main(String[] args) {
        Random random=new Random();
        //隨機兩個數模擬搖轂子
        int a =random.nextInt(6)+1;
        int b =random.nextInt(6)+1; 
        //int a=(int)(Math.random()*6+1);
        //int b=(int)(Math.random()*6+1);
        int c=a+b;
        System.out.printf("You rolled %d + %d = %d \n",a,b,c);
        if (c==2||c==3||c==12){//如果兩數加起來是這三個值則輸
            System.out.println("you lose");
        }else if(c==7||c==11){//如果兩數加起來是這三個值則輸
            System.out.println("you win");
        }else{
            while(true){
                //對這兩個值進行重新賦值
                a=(int)(Math.random()*6+1);
                b=(int)(Math.random()*6+1);
                int d=a+b;
                System.out.printf("You rolled %d + %d = %d \n",a,b,d);
                if(d==c){//如果和上一個值相同則贏
                    System.out.println("you win");
                    break;
                }else if(d==7){//如果搖出來7則輸
                    System.out.println("you lose");
                    break;
                }else{
                    //搖出來其他值,將該值賦給c,進行下一輪循環
                    c=d;
                }
            }
        }
    }
}

Home28
(打印不同的數)編寫-一個程序,讀人10個數並且顯示互不相同的數(即-一個數出現多次,但僅顯示一次)。(提示,讀人一個數,如果它是一個新數,則將它存儲在數組中。如果該數已經在數組中,則忽略它。)輸人之後,數組包含的都是不同的數。下面是這個程序的運行示例:
在這裏插入圖片描述
Home32

(合併兩個有序列表)編寫下面的方法,將兩個有序列表合併成-一個新的有序列表。

  public static int[] merge(int[] 1ist1, int[] 1ist2)

只進行1ist1. length+1ist2. 1ength次比較來實現該方法。編寫-一個測試程序,提示用戶輸人兩個有序列表,然後顯示合併的列表。下面是- 一個運行示例。注意,輸人的第-一個數字表示列表中元素的個數。該數字不是列表的一部分。
在這裏插入圖片描述

import java.util.*;
class Home32{
    /*
    1.提示用戶輸入第一個數組長度和元素
    2.提示用戶輸入第二個數組長度和元素
    2.創建數組等於二者之和
    4.有序倒到第三個
    */
    public static void main(String[] args) {
        int[] list1={1,3,5,7,9};
        int[] list2={2,4,6,8,10};
        int p1=0;
        int p2=0;
        int[] list3=new int[list1.length+list2.length];
        for(int i=0;i<list3.length;i++){
            if(p1>=list1.length){
                list3[i]=list2[p2++];
            }else if(p2>=list3.length){
                list2[i]=list1[p1++];
            }else if(list1[p1]<=list2[p2]){
                list3[i]=list1[p1++];
            }else{
                list3[i]=list2[p2++];
            }
        }
        System.out.print(Arrays.toString(list3));
    }
}

(代數方面:兩個矩陣相乘)編寫兩個矩陣相乘的方法。方法頭如下:

public static double[][] multiplyMatrix(double[][] a, double[][] b)
爲了使矩陣a能夠和矩陣b相乘,矩陣a的列數必須與矩陣b的行數相同,並且兩個矩陣的元素要具有相同或兼容的數據類型。假設矩陣c是相乘的結果,而a的列數是n,那麼每個元素Cy就是anX by+axb.+…+agxbyo例如,對於兩個3x3的矩陣a和b, c就有:
在這裏插入圖片描述
這裏的Cij=Ai1B1j+Ai2B2j+Ai3*B3j.

編寫一個測試程序,提示用戶輸人兩個3x3的矩陣,然後顯示它們的乘積。下面是一個運行示例:

在這裏插入圖片描述

class Home33{
    public static void main(String[] args) {
        double A[][]={
            {1,2,3},
            {4,5,6},
            {7,8,9}
        };
        double B[][]={
            {0,2.0,4.0},
            {1,4.5,2.2},
            {1.1,4.3,2.2} 
        };
        double[][] C=new double[A.length][B[0].length];
        for(int i=0;i<C.length;i++){
            for(int j=0;j<C[i].length;j++){
                C[i][j]=getSum(A,B,i,j);
                System.out.print(C[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static double getSum(double[][] A,double[][] B,int i,int j){
        double sum=0;
        //Cij=Ai1*B1j+Ai2*B2j+Ai3*B3j
        for(int k=0;k<B.length;k++){
            sum+=A[i][k]*B[k][j];
        }
        return sum;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章