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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章