java编程题50道

您所在的位置:网站首页 java面向对象简单例子有哪些题目 java编程题50道

java编程题50道

2023-12-20 16:25| 来源: 网络整理| 查看: 265

JAVA基础编程练习50题

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

【程序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)如果nk,但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(); }

}

【程序6】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

程序分析:利用辗除法。

*这里有一个知识点要记住的,最大公约数和最小公倍数的求法

*1、先求最大公约数bigDivisor

*2、就可以很方便获得最小公倍数multiple=input1*input2/bigDIvisor

*这里最重要的就是求最大公约数:求法如下

*(1)用大的数对小的数求余

*(2)把小的数赋值给大的数,把求余获得的结果赋值给小的数,

*(3)循环上一步的操作,直到求余的结果为零

*(4)上一步被求余的数就是我们要的最大公约数,不信的话,你可以动手试试

public class Programme6 {

public static void main(String[] args) { int bigDivisor=0;//定义最大公约数 int multiple=0;//定义最小公倍数 System.out.println("请输入两个整数:"); Scanner scanner = new Scanner(System.in); int input1 = scanner.nextInt();//获取第一个数 int input2 = scanner.nextInt();//获取第二个数 multiple=input1*input2;//这个值保存,求公约数后,方便求得最小公倍数 int temp =1;// 交换用的中间数 if (input2 >input1) {//确保第一个数不小于第二个数 temp=input1; input1=input2; input2=temp; } while (temp!=0) { //求余结果不等于零,就一直循环 temp=input1%input2;//求余结果 input1=input2;//大的数已经没用了,用小的数替代 input2=temp;//把求余的结果赋值给小的数 } bigDivisor=input1;//最后一次求余结果为零时,被求余的数 multiple=multiple/bigDivisor; System.out.println("最大公约数是:"+bigDivisor ); System.out.println("最小公倍数是:"+multiple); scanner.close(); }

}

【程序7】

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

程序分析:

这里的需要的知识点: 1、获取一行字符串,nextLine() 2、把字符串的每一个字符赋值到一个数值中 3、对比每一个数值在ASK码的范围,就可以确定它符号的类别 4、char字符ASK码的范围 (1)数字0到9: 48~57 (2)字母A到Z:65到90 a到z:97到122 (3)空格是32

public class Programme7 {

public static void main(String[] args) { int num=0;//数字的个数 int letter=0;//字母的个数 int space=0;//空格的个数 int others=0;//其他的个数 System.out.println("请输入一串字符:"); Scanner scanner=new Scanner(System.in); String string=scanner.nextLine();//获取一行字符串 //把字符串里面的值赋值给一个字符型数组 char[]arr=string.toCharArray(); //遍历字符串里面的所有值 for (inti = 0; i < arr.length; i++) { if (arr[i]>=48&&arr[i]=65&&arr[i]=97&&arr[i]

public static void main(String[] args) { System.out.println("1000以内的因数有:"); for (inti = 1; i

public static void main(String[] args) { int sum=0; for (intbite = 1; bite < 5;bite++) { for (intten = 1; ten < 5;ten++) { for (inthundred = 1; hundred < 5;hundred++) { if (bite!=ten&&bite!=hundred&&ten!=hundred) {//符合条件的数字 System.out.print((hundred*100+ten*10+bite)+" "); sum++;//计算个数 if (sum%10==0) {//十个一行 System.out.println(); } } } } } System.out.println("\n总共有:"+sum+"个这样的数"); }

}

【程序12】

题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?

程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

超过 10万 20万 40万 60万 100万 10*0.1 10*0.075 20*0.05 20*0.03 40*0.015 0.01 1 1.75 2.75 3.35 3.95

public class Programme12 {

public static void main(String[] args) { System.out.println("请输入你创造的利润(单位:万元):"); Scanner scanner=new Scanner(System.in); while (!scanner.hasNextDouble()) { System.out.println("请输入金额数字:"); scanner.next(); } doubleprofit=scanner.nextDouble(); doublebonus=0; if (profit

public static void main(String[] args) { System.out.println("请输入年月日(用空格隔开):"); Scanner scanner=new Scanner(System.in); int year=scanner.nextInt();//获取年份 int month=scanner.nextInt();//获取月份 int day=scanner.nextInt();//获取天数 int sum=0;//天数总和 //创建一个包含月份天数的数组,先按小年计算,如果是闰年,并且在三月以后再加1 int[] arr={31,28,31,30,31,30,31,31,30,31,30,31}; sum=day;//输入的天数肯定是要加的 for (inti = 1; i < month; i++) { //加上包含的月份天数 sum+=arr[i]; } //最后判断是否是闰年,如果是的话再加1,否则sum就是结果了,条件比较长,我就抽出来写了 booleanisRight=(((year%4==0)&&(year%100!=0))||(year%400==0))&&(month>2); if (isRight) { sum+=1; } System.out.println(year+"年"+month+"月"+day+"日,是这年的第"+sum+"天"); }

}

【程序15】

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

程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

最后两个数也使z>y就可以了

public class Programme15 {

public static void main(String[] args) { System.out.println("三个整数:"); Scanner scanner=new Scanner(System.in); int num1=scanner.nextInt();//获取整数 int num2=scanner.nextInt(); int num3=scanner.nextInt(); int temp=0;//最为一个交换数 if (num1>num2) {//保证num2>num1 temp=num1; num1=num2; num2=temp; } if (num1>num3) {//保证num3>num1 temp=num1; num1=num3; num3=temp; } if (num2>num3) {//保证num3>num2 temp=num2; num2=num3; num3=temp; } System.out.println("这三个数从小到大排列:"+num1+" "+num2+" "+num3); scanner.close(); }

}

【程序16】

题目:输出9*9口诀。

程序分析:分行与列考虑,共9行9列,i控制行,jC列。

表达式: i+”*”+j+”=”+i*j,这里要用两个for循环控制输出和换行

public class Programme16 {

public static void main(String[] args) { for (inti = 1; i

public static void main(String[] args) { String a = null,b=null,c=null;//甲队成员 String[] racer = {"x","y","z"};//乙队成员 for(inti=0;i

public static void main(String[] args) { float up=2;//分子 float down=1;//分母 float fraction=up/down;//分数 float temp=0;//交换数 float sum=0;//总和 for (inti = 0; i

public static void main(String[] args) { System.out.println(Fact(5));//输出结果值 } //递归方法求阶乘的具体代码 private static int Fact(inti) { if (i==1) {//1的阶乘为1 return 1; } returni*Fact(i-1);//不断回调 }

}

【程序23】

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

程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

public class Programme23 {

public static void main(String[] args) { System.out.println("第五个人的岁数:"+GetAge(5,2)); } //递归方法求第五个人的岁数 private static int GetAge(intnum, intageMore) { if (num==1) {//第一个人岁数为10 return 10; } returnGetAge(num-1, ageMore)+ageMore;//每上一个人岁数加2 }

}

【程序24】

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

程序分析:创建一个五位数数的数组,把输入数字的每位数的值赋值到数组里面

* 把输入 数字从个位起获取,并且每获取一次之后/10,这样就能分别获取十位百位千位了 * 把数字打印出来就是题目所求了

public class Programme24 {

public static void main(String[] args) { System.out.println("请输入一个不大于5位数的数字:"); Scanner scanner=new Scanner(System.in); int num=scanner.nextInt();//获取输入 int[] arr=new int[5];//创建5位数的数组 int i=0; //循环取位 do{ arr[i]=num%10; num=num/10; i++; }while (num!=0);//只剩下一位时,说明获取完毕,跳出循环 System.out.println("输入数字串的是"+i+"位数的"); System.out.println("逆序输出:"); //打印出数组 for (intj = 0; j < i;j++) { System.out.print(arr[j]+" "); } scanner.close(); }

}

【程序25】

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

这个程序跟上一个程序类似。

* 创建一个五位数的数组 * 逐次取位 * 组后判断条件就可以了

public class Programme25 {

public static void main(String[] args) { System.out.println("请输入一个五位数:"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt();//获取输入的数字 int arr[]=new int[5];//创建一个大小为5的数组 int i=4; do {//逐次取位 arr[i]=input%10; input/=10; i--; } while (i>=0);//这里的结束条件写input!=0也是可以的 //System.out.println(Arrays.toString(arr)); if (arr[0]==arr[4]&&arr[1]==arr[3]) { System.out.println("输入的数是回文数字!"); }else { System.out.println("输入的数不是回文数字!"); } scanner.close(); }

}

【程序26】

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

public class Programme26 {

public static void main(String[] args) { System.out.println("请输入第一个英文字母:"); Scanner scanner=new Scanner(System.in); String input=scanner.next(); String input2=""; switch (input) { case"m": System.out.println("Monday"); break; case"t": System.out.println("请输入第二个字母:"); input2=scanner.next(); if (input2.equals("u")) { System.out.println("Tuesday"); }else if (input2.equals("h")) { System.out.println("Thursday"); } else { System.out.println("你输入的字母有误!"); } break; case"w": System.out.println("Wednesday"); break; case"f": System.out.println("Friday"); break; case"s": System.out.println("请输入第二个字母:"); input2=scanner.next(); if (input2.equals("u")) { System.out.println("Sunday"); }else if (input2.equals("a")) { System.out.println("Saturday"); } else { System.out.println("你输入的字母有误!"); } break; default: System.out.println("你输入的字母不正确!"); break; } scanner.close(); }

}

【程序27】

题目:求100之内的素数

素数的判断方法:这个数除以2到比它本身少1的数都不能整除,那么这个数就是素数了!

public class Programme27 {

public static void main(String[] args) { int sum=0; for (inti = 2; i < 100;i++) { if (IsRight(i)) {//如果是素数就打印出来 System.out.print(i+" "); sum++; if (sum%10==0) {//十个一行 System.out.println(); } } } System.out.println("\n共有素数:"+sum+"个"); } //判断该数是不是素数 private static boolean IsRight(inti) { for (intj = 2; j < Math.sqrt(i);j++) { if (i%j==0) { return false;//不是素数的话,马上返回false } } return true; }

}

【程序28】

题目:对10个数进行排序

程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

最后打印出来的数组就是从小到大排列的数组了

public class Programme28 {

public static void main(String[] args) { System.out.println("请输入10个数(用空格隔开):"); int[] arr=new int[10]; Scanner scanner=new Scanner(System.in); for (inti = 0; i < 10;i++) { arr[i]=scanner.nextInt(); } //对数组进行排序 int temp=0;//交换数 for (inti = 0; i < 9;i++) { for (intj = i+1; j < arr.length;j++) { if (arr[i]>arr[j]) { //如果第一个数比后面的数大就交换 temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } System.out.println("排列后的数组:"+Arrays.toString(arr));//Arrays类的包装方法! }

}

【程序29】

题目:求一个3*3矩阵对角线元素之和

程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

public class Programme29 {

public static void main(String[] args) { System.out.println("请输入九个数字:"); Scanner scanner=new Scanner(System.in); int[][]arr=newint[3][3]; //获取矩阵数字 for (inti = 0; i arrA[arrA.length-1]) { for (inti = 0; i < arrA.length; i++) { arrB[i]=arrA[i]; } arrB[arrB.length-1]=num; }else { for (inti = 0; i < arrA.length; i++) { if (num

System.out.println("输入一个十个数的组数:"); Scanner scanner=new Scanner(System.in); int n=10; int[]arrA=newint[n]; for (inti = 0; i < n; i++) { arrA[i]=scanner.nextInt();//获取十个数组 } System.out.println("没移动前的数组:"+Arrays.toString(arrA)); System.out.println("请输入要往后移动的个数:"); int m=scanner.nextInt();//获取输入往后退的个数 m%=n;//十个相当于循环 int[]arrB=newint[n];//创建和数组A大小一样的数组B int k=m;//创建一个可变的变量 for (inti = m; i < arrA.length;i++) { arrB[i]=arrA[i-m]; } for (inti = 0; i

public static void main(String[] args) { System.out.println(Peach(1));; } private static int Peach(inti) { if (i==5) { return 6; } returnPeach(i+1)*5+1; }

}

【程序42】

题目:809*??=800*??+9*??+1

其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

程序解析:for循环的使用

public class Programme42 {

public static void main(String[] args) { String result=""; for (inti = 100; i < 1000;i++) { if (809*i==800*i+9*i+1) { result=i+" "; } } if (result.equals("")) { System.out.println("没有合适的数"); }else { System.out.println("合适的数有:"+result); } }

}

【程序43】

题目:求0—7所能组成的奇数个数。

*程序分析:最少也是1位数,最多能组成8位的数字

第一位不能为零,最后一位不能是偶数

0到7有四个奇数

这里用累加求和

public class Programme43 {

public static void main(String[] args) { int n = 8;//位数 int sum = 0;//总和 // 1位数情况 sum += n / 2; // 2位数情况 sum += (n-1)*n / 2; // 3位数情况 sum += (n-1)*n*n / 2; // 4位数情况 sum += (n-1)*n*n*n / 2; // 5位数情况 sum += (n-1)*n*n*n*n / 2; // 6位数情况 sum += (n-1)*n*n*n*n*n / 2; // 7位数情况 sum += (n-1)*n*n*n*n*n*n / 2; // 8位数情况 sum += (n-1)*n*n*n*n*n*n*n / 2; System.out.println("0到7能组成的奇数个数:"+sum); }

}

【程序44】

题目:一个偶数总能表示为两个素数之和。

程序分析:判断两个加数是不是素数

* 素数的判断前面做过很多了,不说了!

import java.util.Scanner;

public class Programme44 {

public static void main(String[] args) { System.out.println("请输入一个偶数:"); Scanner scanner =new Scanner(System.in); int input=scanner.nextInt(); while (input%2!=0) { System.out.println("你输入的不是偶数,请重新输入:"); input=scanner.nextInt(); } for (inti = 2; i < input; i++) { if (isRightNum(i)&&isRightNum(input-i)) {//两个加数同时是素数 System.out.println(input+"="+i+"+"+(input-i)); break; } } scanner.close(); } //判断这个数是不是素数的具体方法: private static boolean isRightNum(inti) { for (intj = 2; j < Math.sqrt(i+1);j++) { if (i%j==0) {//确定是素数 return false; } } return true; }

}

【程序45】

题目:判断一个素数能被几个9整除

程序分析:这个题目也不知道是哪个傻瓜想出来的,我只能说垃圾,不知道它想问什么的?

下面是网上下的答案,我不想做! 我猜它是判断输入的数比9 的多少次方大?而且跟素数有毛关系??

import java.util.Scanner;

public class Prog45{

public static void main(String[] args){ System.out.print("请输入一个数:"); Scanner scan = new Scanner(System.in); long l = scan.nextLong(); long n = l; scan.close(); int count = 0; while(n>8){ n /= 9; count++; } System.out.println(l+"能被"+count+"个9整除。"); }

}

【程序46】

题目:两个字符串连接程序

程序分析:考察程序的基本常识吗?

public class Prog46{

public static void main(String[] args){ String str1 = "lao lee"; String str2 = "牛刀"; String str = str1+str2; System.out.println(str); }

}

【程序47】

题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

程序分析:简单方法的调用而已!

import java.util.Scanner;

public class Prog47{

public static void main(String[] args){ System.out.print("请输入7个整数(1-50):"); Scanner scan = new Scanner(System.in); int n1 = scan.nextInt(); int n2 = scan.nextInt(); int n3 = scan.nextInt(); int n4 = scan.nextInt(); int n5 = scan.nextInt(); int n6 = scan.nextInt(); int n7 = scan.nextInt(); scan.close(); printStar(n1); printStar(n2); printStar(n3); printStar(n4); printStar(n5); printStar(n6); printStar(n7); } static void printStar(int m){ System.out.print(m); for(int i=0;i

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3