java基础编程练习题及解答

本文提供了一系列Java编程基础练习题及其解答,包括素数判断、水仙花数查找、正整数质因数分解等,旨在帮助初学者巩固基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java基础编程练习题及解答

虽然说这些题目好多人做过,但是也考考自己对编程的解决方法吧,不对的地方希望大家私信我,谢谢!!!

实例1:


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

素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。
*/
import java.util.Arrays;

public class HelloWorld {
    public static void main(String []args) {

        //计算质子个数,与非质子个数
        int indexs = 0;
        int index = 0;
        for(int i=101;i<=200;i++){
            if((i%2!=0)&(i%3!=0)&(i%5!=0)&(i%7!=0)){
                indexs++;                  
    }else{
                index++;
            }
        }
        System.out.println(indexs);
        System.out.println(index);


        int[] nums = new int[indexs];
        int[] num = new int[index];
        int x = 0;
        int y = 0;
        for(int i=101;i<=200;i++){
            if((i%2!=0)&(i%3!=0)&(i%5!=0)&(i%7!=0)){
                nums[x] = i;
                x++;               
    }else{
                num[y] = i;
                y++;
            }
        }

        System.out.println(Arrays.toString(nums));
        System.out.println(Arrays.toString(num));

    }
}

实例2:

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

153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。想当年,做这些题都是网上找答案,如今事过境迁,不会也得会。
package test;

public class demo1 {

    public static void main(String[] args) {

        //定义个位,十位,百位
        int a,b,c;
        int sum,mul;

        for(int i=100;i<=999;i++){
            a = i/100;
            b = (i-a*100)/10;
            c = (i-a*100-b*10);
            sum = a*a*a+b*b*b+c*c*c;
            mul = a*100+b*10+c;
            if(sum == mul){
                System.out.println(a+""+b+""+c);
            }
        }
    }
}

实例3:

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

原谅我,这题我作弊了,哈哈,做的时候有点懵逼啊。但是最后我还是靠自己 又写出一遍来,哈哈。。。

package test;

import java.util.Scanner;

public class demo2 {


    public static void main(String[] args) {

        //匹配数字正则
        String reg = "[1-9]\\d{0,}";
        @SuppressWarnings("resource")

        //创建扫描器对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个正整数:");

        //循环
        while(true){
            String str = scanner.next();

            //String强制转换int
            int num = Integer.parseInt(str);

            //匹配数字
            if(str.matches(reg)){

                System.out.println("合法数字");

                if(num!=1){

                    System.out.print(num + "是有效的被分解数");

                    int index = 2;

                    if(num == 2){

                        System.out.println(num+"分解后的质因数为: 1*"+num);   //如果输入的是最小质数2

                    }else{

                        System.out.print(num+"分解后的质因数为: 1"); //1是所有的正整数的质数   
                          while(num>=index){   //输入的数可以被k整除   
                            if(num%index==0){   
                              System.out.print("*"+index);           //将k添加到结果中   
                              num = num/index;//除以最小质数后重新循环   
                              }else{   
                              index++;   
                              } //if
                            } //while
                    }//if
                }else{
                    System.out.print(num + "是无效的被分解数");
                }//if
            }else{
                System.out.println("非法数字");
            }//if
        }//while
    }
}

实例4:

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

package test;

import java.util.Scanner;

public class demo3 {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);



        while(true){
            System.out.println("请输入成绩");
            int score = scanner.nextInt();
            if((score >= 90)&(score<100)){
                System.out.println("A");
            }else if((score >= 60)&(score<89)){
                System.out.println("B");
            }else if((score >= 0)&(score<59)){
                System.out.println("C");
            }else{
                System.out.println("恭喜你,你的成绩不合理");
            }
        }
    }
}

实例5:

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

方法1:

package test;

import java.util.Scanner;

public class demo4 {

    @SuppressWarnings("unused")
    public static void main(String[] args) {

        //计算字母,空格,数字,其他字符个数
        int abcCount = 0;
        String abcreg = "[a-zA-Z]";
        int spaceCount = 0;
        int numCount = 0;
        String numreg = "[0-9]";
        int otherCount = 0;

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        char[] ch = str.toCharArray();
        for(int i=0;i<ch.length;i++){
            if((""+ch[i]).matches(abcreg)){
                abcCount++;
            }else if((""+ch[i]).matches(abcreg)){
                spaceCount++;
            }else if((""+ch[i]).matches(numreg)){
                numCount++;
            }else{
                otherCount++;
            }
        }

        System.out.println("字母个数:"+abcCount);  
        System.out.println("数字个数:"+numCount);  
        System.out.println("空格个数:"+spaceCount);  
        System.out.println("其他字符个数:"+otherCount); 

    }
}


方法2:
    import java.util.Scanner;  

    public class Example {  
        public static void main(String[] args) {  
            // TODO Auto-generated method stub  
            int abcCount=0;//英文字母个数  
            int spaceCount=0;//空格键个数  
            int numCount=0;//数字个数  
            int otherCount=0;//其他字符个数  
            Scanner scan=new Scanner(System.in);  
            String str=scan.nextLine();  
            char[] ch = str.toCharArray();  
            for(int i=0;i<ch.length;i++){  
            if(Character.isLetter(ch[i])){  
            //判断是否字母  
            abcCount++;  
            }  
            else if(Character.isDigit(ch[i])){  
            //判断是否数字  
            numCount++;  
            }  
            else if(Character.isSpaceChar(ch[i])){  
            //判断是否空格键  
            spaceCount++;  
            }  
            else{  
            //以上都不是则认为是其他字符  
            otherCount++;  
            }  
            }  
            System.out.println("字母个数:"+abcCount);  
            System.out.println("数字个数:"+numCount);  
            System.out.println("空格个数:"+spaceCount);  
            System.out.println("其他字符个数:"+otherCount);  
            }  

    }  

说说我在方法1遇到的困难:
1.一开始ch[i]匹配正则的时候总是给我报错,但是我知道ch[i]是没有错的,我也把它强制转换为String类型,但是各种报错使得我想方法使它能变成String类型,于是在前面加了一个"",会自动编译成String类型。

2.当我匹配空格的时候,发现会自动停止,就是计算不了空格的个数,还会使程序停止,这肯定是不行的,所以我百度了下,原来是出问题在nextInt(),nextLine(),next()获取值上。

next()  以空格作为分隔符
nextLine()  以行作为分隔符

3.完成了方法1后,方法2就简单了,于是就是Character.is...()判断一下就行了。

实例6:

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 

package test;

import java.util.Scanner;

import static java.lang.Math.pow;  

public class demo6 {

    public static void main(String[] args) {

        String reg = "\\d";

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);

        while(true){
            int num = scanner.nextInt();
            int nums = scanner.nextInt();
            if ((""+num).matches(reg)) {
                num = Sum(num,nums);
                System.out.println(num);
            }else{
                System.out.println("请输入一个数字");
            }
        }
    }

//  @SuppressWarnings("unused")
     public static int Sum(int num,int nums){  
        int total = 0;  
        int count=0;  
        int nowData = 0;  
        int lastData = 0;  
        while(count < nums){  
            nowData = num * (int)pow(10,count++) + lastData;  
            total = total + nowData;  
            lastData = nowData;  
            System.out.println(nowData);  
        }  
        return total;  
     }
}

实例7:

package test;

/*
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
*/

public class demo7 {

    public static void main(String[] args) {

        for(int num=1;num<1000;num++){

            int sum = 0;

            for(int i=1;i<num;i++){
                if(num % i == 0){
                    sum = sum+i;
                }
            }
            if(sum == num){
                System.out.println(sum);
            }
        }
    }
}

实例8:

package test;

/*
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多
少米?第10次反弹多高?

因为最后的高度小于1,所以把int类型改为double类型
*/

public class demo8{

    public static void main(String[] args) {

        //球的高度
        double height = 100;

        //经历的距离
        double sum = 0;

        for(int index = 1;index<=10;index++){
            sum += height;
            System.out.println("第"+index+"次落地高度" + height + "米经过"+sum+"米");
            height = height/2;
            sum += height;
            System.out.println("第"+index+"次落地后反跳回" + height + "米经过"+sum+"米");
        }
    }
}

实例9:

package test;
/*
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 
*/
public class demo9 {

    public static void main(String[] args) {

        for(int i=1;i<5;i++){
            for(int j=1;j<5;j++){
                for(int k=1;k<5;k++){
                    for(int l=1;l<5;l++){
                        if((i!=j)&(i!=k)&(i!=l)&(j!=k)&(j!=l)&(k!=l)){
                            System.out.println(i+""+j+""+k+""+l);
                        }
                    }
                }
            }
        }   
    }
}

实例9:

package test;

import java.util.Scanner;

/*
题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
 */

public class demo10 {

    public static void main(String[] args){  
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);  
        double profit = scanner.nextDouble();  
        double money = 0;  
        if(profit <= 100000){  
            money = profit * 0.1;  
        }else if(profit < 200000){  
            money = 100000 * 0.1 + (profit - 100000) * 0.075;  
        }else if(profit < 400000){  
            money = 200000 * 0.1 + (profit - 200000) * 0.05;  
        }else if(profit < 600000){  
            money = 400000 * 0.1 +(profit - 400000) * 0.03;  
        }else if(profit < 1000000){  
            money = 600000 * 0.1 +(profit - 600000) * 0.15;  
        }else{
            money = 1000000 * 0.1 +(profit - 1000000) * 0.01;  
        }
        System.out.println(money);  
    }  
}

实例10:

package test;

import java.util.Scanner;

/*
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少

 sqrt(156+100)=16
 sqrt(156+1168)=18
 */  

public class demo11 {

    public static void main(String[] args) {

        @SuppressWarnings({ "resource", "unused" })
        Scanner scanner = new Scanner(System.in);
        int num=0;
        System.out.println(Math.sqrt(156+100));
        System.out.println(Math.sqrt(156+168));
        while(true){
            if((Sqrt(num+100) == true)&&(Sqrt(num+168) == true)){
                System.out.println(num);
                break;
            }
            num++;
        }
    }

    public static boolean Sqrt(int num){

        if((int)Math.sqrt(num)*(int)Math.sqrt(num)==num){
            return true;
        }else{
            return false;
        }

    }

}

实例11:

package test;

import java.util.Scanner;

/*
题目:输入三个整数x,y,z,请把这三个数由小到大输出。 
*/

public class demo12 {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        while(true){
            int temo = 0;
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            int z = scanner.nextInt();
            if(x>y){
                temo=x;
                x=y;
                y=temo;
            }
            if(x>z){
                temo=x;
                x=z;
                z=temo;
            }
            if(y>z){
                temo=y;
                y=z;
                z=temo;
            }

System.out.println(x+""+y+""+z);
        }
    }
}

实例12:

package test;

import javax.security.auth.Subject;

/*
题目:输出9*9口诀。 
*/

public class demo13 {

    public static void main(String[] args) {
        int i,j,Sub;
        for(i=1;i<10;i++){
            for(j=1;j<10;j++){
                Sub = i*j;
                System.out.print(i+"*"+j+"="+Sub+"\t");
            }
            System.out.println("");
        }
    }
}

实例13:

package test;

import java.util.Scanner;

/*
题目:输入某年某月某日,判断这一天是这一年的第几天? 
*/

public class demo14 {

    @SuppressWarnings("unused")
    public static void main(String[] args) {

        int year,month,day;

        int[] data = {31,28,31,30,31,30,31,31,30,31,30,31};
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        year = scanner.nextInt();
        System.out.print("请输入月份:");
        month = scanner.nextInt();
        System.out.print("请输入几号:");
        day = scanner.nextInt();
        int sum = 0;
        for(int i=0;i<month-1;i++){
            sum += data[i];
        }
        if ((year%400==0||(year%4==0&&year%100!=0))&&(month>2)){
            sum += 1;
        }
        System.out.println(sum+day);
    }
}

实例14:

package test;

/*
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩
下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

*/

public class demo15 {

    public static void main(String[] args) {

        int amount;//总数
        int num = 0;//定义每天剩下的桃子数
        ;//天数

        for(int day=10;day>0;day--){
            if(day==10){
                num=1;
                amount = num;
                System.out.println("第"+day+"天有"+amount+"个桃子");
            }else{
                amount = (num+1)*2;
                num = amount;
                System.out.println("第"+day+"天有"+amount+"个桃子");
            }
        }
    }
}
/*
规律:(最后一天的桃子+1)*2 = 前一天剩下的桃子
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   46/2-1=22
amount=(amount/2 - 1)   22/2-1=10
amount=(amount/2 - 1)   10/2-1=4
amount=(amount/2 - 1)   4/2-1=1
amount=110天有1个桃子
第9天有4个桃子
第8天有10个桃子
第7天有22个桃子
第6天有46个桃子
第5天有94个桃子
第4天有190个桃子
第3天有382个桃子
第2天有766个桃子
第1天有1534个桃子
*/

实例15:

package test;

/*
题目:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,
请编程序找出三队赛手的名单。

*/

public class demo16 {

    public static void main(String[] args) {
        for(char i ='x';i<='z';i++){
            for(char j ='x';j<='z';j++){
                if(i!=j)//这里放一个判断,比赛队员不能重复比赛,判断写在外面又可以减少循环次数
                    for(char k = 'x';k<='z';k++){
                        if(i!=k&&j!=k)//同上,排除相同
                            if(i!='x'&&k!='x'&&k!='z')//这里根据题意排除掉不符合的名单
                                System.out.println("a和"+i+"\n"+"b和"+j+"\n"+"c和"+k+"\n");
                    }
            }
        }
    }

}

实例16:

package test;

/*
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...
求出这个数列的前20项之和。
*/

public class demo17 {

    public static void main(String[] args) {
        double[] a = new double[20];
        double up=2;
        double down=1;
        double time = 0;
        for(int i=0;i<20;i++){
            a[i] = up/down;
            time = down;
            down=up;
            up=time+down;
            System.out.println(a[i]);
        }
     }
}

实例17:

package test;

import java.util.Scanner;

/*
题目:求1+2!+3!+...+20!的和 
*/

public class demo18 {

    public static void main(String[] args) {

        //计算总值
        int amount = 0;

        //阶乘数
        int sum = 0;

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入阶乘数:");
        int num = scanner.nextInt();

        for(int i=1;i<=num;i++){
            sum = jiecheng(i);
            if(i<num){
                System.out.print(i+"!+");
            }else{
                System.out.print(i+"!=");
            }
            amount += sum;
        }
        System.out.println(amount);
    }

    //处于每个阶乘返回的值
    public static int jiecheng(int num){
        int sum = 1;
        for(int i=1;i<=num;i++){
            sum *= i;
        }
        return sum;
    }
}

实例18:

package test;

/*
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问
第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
人多大? 

1:  10
2:  说比第一个人大两岁
3:  又说比第2人大两岁
4:  他说比第3个人大2岁
5:  他说比第4个人大2岁

*/

public class demo19 {

    public static void main(String[] args) {

        System.out.println(getAge(2));

    }

    public static int getAge(int num){
        if(num==1){
            return 10;
        }else{
            return getAge(num-1)+2;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值