50个高质量Java练习题分享 【经典·基础 】含答案

文摘   2024-12-15 10:33   山西  

本文对50道经典的java程序题进行详细解说,对于初学者可以跳过一些逻辑性太强的题目,比如第一题用到了方法的递归,初学者可能不理解,最好先看那些有if、for、while可以简单解决的程序题!但是,对于比较深入学习过的同学,还是希望可以一口气就看完,这是比较全面思维锻炼!

PDF文末领取

【程序1】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

          做这种题目,最好的做法就是找出规律,跟高中的数列一样

          本题有:a[n]=a[n-1]+a[n-1],而第一第二项都知道了,后面的值也可以求得

public class Programme1 {

    public static void main(String[] args) {

       System.out.print("请输入你想知道的兔子数量的月份:");

       Scanner scanner=new Scanner(System.in);

       int n=scanner.nextInt();//获取输入的整数

       System.out.println("第"+n+"个月兔子总数为"+fun(n));

       scanner.close();

    }

    //求得所需月份的兔子的数量,返回值为兔子的数量

    private static int fun(intn){

       if(n==1 ||n==2)

          return 1;

       else

          returnfun(n-1)+fun(n-2);

           }

}

 


【程序2】

题目:判断101-200之间有多少个素数,并输出所有素数。

程序分析:

    * 素数是:只能被1或本身整除的数,如:3,5,7,11,131...

      *判断素数的方法:用一个数分别去除2到sqrt(这个数),

      *其实用这个数分别去除2到他本身少1的数也可以,但是运算时间增加了

      *如果能被整除,则表明此数不是素数,反之是素数。

public class Programme2 {

 

    public static void main(String[] args) {

       int sum=0;

        for (inti = 100; i < 200;i++) {

           if (IsRightNum(i)) { //判断这个数是不是素数

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

              sum++;

              if (sum%10==0) { //十个一行

                  System.out.println();

              }

           }

       }

        System.out.println("素数的整数:"+sum);

        

    }

   

    //判断这个数是不是素数的具体代码

    private static boolean IsRightNum(inti) {

       for (intj = 2; j < Math.sqrt(i);j++) {

           if (i%j==0) { //如果能整除,就说明不是素数,可以马上中断,继续对下一个数判断

              return false;

           }

       }     

        

       return true;

    }

 

}

 


【程序3】

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

public class Programme3 {

 

    public static void main(String[] args) {

       int sum=0;//水仙花的总数

       for (inti = 100; i < 1000;i++) {

           intbite=i%10;     //求得个位

           intten=i/10%10;  //求得十位

           inthundred=i/100;//求得百位

           //如果符合水仙花条件的数打印出来

           if (i==(bite*bite*bite)+

(ten*ten*ten)+(hundred*hundred*hundred)) {

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

              sum++;

           }

          

       }

       System.out.println("总共有水仙花个数:"+sum);     

    }

}

 


【程序4】

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public class Programme4 {

 

    public static void main(String[] args) {

       System.out.print("请输入一个你要分解的正整数:");

       Scanner scanner=new Scanner(System.in);

       int input=scanner.nextInt();//获取输入的数字

       System.out.println();

       System.out.print(input+"=");

       for (inti = 2; i < input+1; i++) {             

          

           while(input%i==0&&input!=i) {

              input=input/i;

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

           }  

           if(input==i){//上面的都不能整除,说明这是一个质数

              System.out.print(i);

              break;

           }         

       }         

       scanner.close();

    }  

}

 

 


【程序5】

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

程序分析:(a>b)?a:b这是条件运算符的基本例子。

public class Programme5 {

 

    public static void main(String[] args) {

       System.out.println("请输入你的分数:");

       Scanner scanner=new Scanner(System.in);

        int input=scanner.nextInt();//获取输入

//等级判断

       String belong=input>=90?"A":(input>=60?"B":"c");

       System.out.println(input+"分属于:"+belong);

       scanner.close();    

    }

}

...

【程序48】

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

程序分析:1、数字取位,个十百千位分别求出

      *         2、按要求替换

      *         3、按要求交换

public class Programme48 {

    public static void main(String[] args) {

       int[] num=new int[4];//存放四位数的个十百千位

       System.out.println("请输入一个四位数:");

       Scanner scanner=new Scanner(System.in);

       int input=scanner.nextInt();

      

       for (inti = 0; i < 4;i++) {//逐次取位,从个位开始,并按要求替换

           num[i]=(input%10+5)%10;

           input/=10;

       }

       //按要求替换,交换1、4位

       int temp=0;//交换数

       temp=num[0];

       num[0]=num[3];

       num[3]=temp;

       //交换2、3位

       temp=num[1];

       num[1]=num[2];

       num[2]=temp;

       System.out.println("加密后的结果:"+num[3]+num[2]+num[1]+num[0]);

       scanner.close();

    }

}

 

 


【程序49】

题目:计算字符串中子串出现的次数

程序分析:把string类型的字符串的每个元素,转换为char数组里面的每个数组的值string.toCharArray()

      *       判断char数组中是否存在空格,存在的话子字符串数量加1

public class Programme49 {

    public static void main(String[] args) {

       String string="aa bb df 23 d 3 df32 d";

       int num=1;//子字符的数量

       char[]c=string.toCharArray();

       for (inti = 0; i < c.length; i++) {

           if (c[i]==' ') {

              num++;

           }

       }

       System.out.println(string+"有子字符串:"+num +" 个");

    }

}

 


【程序50】

题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

最后这题涉及文件存储,输入输出流

import java.io.*;

public class Prog50{

     //定义学生模型

     String[] number = new String[5];

     String[] name = new String[5];

     float[][] grade = new float[5][3];

     float[] sum = new float[5];

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

         Prog50 stud = new Prog50();

         stud.input();

         stud.output();

     }

     //输入学号、姓名、成绩

     void input() throws IOException{

         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

         //录入状态标识

         boolean isRecord = true;

         while(isRecord){

              try{

                for(int i=0;i<5;i++){

                     System.out.print("请输入学号:");

                     number[i] = br.readLine();

                     System.out.print("请输入姓名:");

                     name[i] = br.readLine();

                     for(int j=0;j<3;j++){

                         System.out.print("请输入第"+(j+1)+"门课成绩:");

                         grade[i][j] = Integer.parseInt(br.readLine());

                     }

                     System.out.println();

                     sum[i] = grade[i][0]+grade[i][1]+grade[i][2];

                }

                  isRecord = false;

             }catch(NumberFormatException e){

                   System.out.println("请输入一个数字!");

           }

         }

     }

     //输出文件

     void output() throws IOException{

         FileWriter fw = new FileWriter("E://java50//stud.txt");

         BufferedWriter bw = new BufferedWriter(fw);   

         bw.write("No.  "+"Name  "+"grade1  "+"grade2  "+"grade3  "+"average");

         bw.newLine();

         for(int i=0;i<5;i++){

           bw.write(number[i]);

           bw.write("  "+name[i]);

           for(int j=0;j<3;j++)

             bw.write("  "+grade[i][j]);

           bw.write("  "+(sum[i]/5));

           bw.newLine();

         }

         bw.close();

     }

}


获取方式

1、点赞+在看

2、公众号后台回复Java练习题



小黄鸭编程
分享Python、Java、前端、大数据、人工智能等程序员必备资料,在这里可以获得最全的编程资料。
 最新文章