【摘要】 JAVA小白编程题练习
可能有很多刚入门的小白不知道自己如何能快速提升编程技巧与熟练度
其实大佬进阶之路只有一个~ 那就是疯狂码代码!!!实践出真知!!!
所以为了大家能够想练习的时候有素材,泡泡给大家整理了一些练习题
由于平时比较忙,所以我在不定时努力更新中,欢迎监督~
500是立的Flag啊哈哈哈哈,我们共同努力吧,先出个100道,希望能给大家带来帮助~ …
JAVA小白编程题练习
可能有很多刚入门的小白不知道自己如何能快速提升编程技巧与熟练度
其实大佬进阶之路只有一个~ 那就是疯狂码代码!!!实践出真知!!!
所以为了大家能够想练习的时候有素材,泡泡给大家整理了一些练习题
由于平时比较忙,所以我在不定时努力更新中,欢迎监督~
500是立的Flag啊哈哈哈哈,我们共同努力吧,先出个100道,希望能给大家带来帮助~
???
练习题1:接收用户输入的3个整数,并将它们的最大值作为结果输出
package cn.cxy.exec;
import java.util.Scanner;
public class GetMaxNumber { public static void main(String[] args) { //1.提示并接收用户输入的三个整数,并交由变量a b c来保存 System.out.println("请输入第一个整数:"); int a = new Scanner(System.in).nextInt(); System.out.println("请输入第二个整数:"); int b = new Scanner(System.in).nextInt(); System.out.println("请输入第三个整数:"); int c = new Scanner(System.in).nextInt(); //2.对接收到的三个值进行比较 /**三元运算符 1 ? 2 : 3 * 如果1号位置的表达式结果为true,结果就取2号位置的值,反之,就取3号位置的值*/ //2.1定义变量max来保存a和b中的最大值 int max = a>b ? a : b; //2.2比较max与c谁最大,并将最大值交由max来保存 max = max>c ? max : c; /**解决方案二:*/ //int max = a>b?(a>c?a:c):(b>c?b:c); //3.输出结果 System.out.println("三个数的最大值是:"+max); }
}
练习题2: BMI 指数测试 BMI = 体重 (kg) / 身高² (m)
接收用户输入的身高和体重,将判断结果输出
过轻:低于18.5
正常:18.5 ~ 22.9
偏胖:23 ~ 24.9
肥胖:25 ~ 29.9
重度肥胖:高于30
极度肥胖:高于40
package cn.cxy.exec;
import java.util.Scanner;
public class TestBMI { public static void main(String[] args) { //1.提示并接收用户输入的身高与体重信息 System.out.print("请输入您的身高(单位为m):"); double height = new Scanner(System.in).nextDouble(); System.out.print("请输入您的体重(单位为kg):"); double weight = new Scanner(System.in).nextDouble(); //2.调用getBMI()方法,根据身高和体重信息,输出结果 getBMI(height, weight); } public static void getBMI(double h, double w) { //求出BMI指数 double bmi = w / (h * h); //定义一个变量r来保存最终结果 String r = ""; //根据 bmi 指数范围,来给r重新赋值 if (bmi < 18.5) { r = "过轻"; } else if (bmi <= 22.9) { r = "正常"; } else if (bmi <= 24.9) { r = "偏胖"; } else if (bmi <= 29.9) { r = "肥胖"; } else if (bmi <= 40) { r = "重度肥胖"; } else { r = "极度肥胖"; } //打印最终结果 System.out.println("您的BMI指数:" + bmi); System.out.println("您的体重属于:" + r); }
}
练习题3: 手机选号:根据用户输入的手机号来确认用户实际支付的价格
如果尾数为8,需支付办卡费50元
如果尾数为4,需支付办卡费用0元
如果是其他尾号,需支付办卡费用20元
package cn.cxy.exec;
import java.util.Scanner;
public class PayCard { public static void main(String[] args) { //1.提示并接收用户输入的手机号 System.out.println("请输入您预选的手机号:"); String tel = new Scanner(System.in).nextLine();//注意String类型数据一般用nextLine() //2.调用getPrice()方法,来计算价格,注意需要把手机号tel作为参数传入方法中 getPrice(tel); } //3.创建getPrice() public static void getPrice(String tel) { //3.1 手机号tel的长度,必须是11位的正确手机号--提前校验,提高程序健壮性 if(tel.length() != 11) { System.out.println("号码格式错误"); return;//结束方法,返回到调用位置再继续执行 } /*比如我们拿到的手机号是tel="2313123123",想要拿到尾数,也就是最后一个字符 * 需要用到 char c = tel.charAt(10) * 注意:由于下标也是从0开始,所以取第11个字符,它的下标位置是10 */ //3.2获取手机号的尾数 char c = tel.charAt(10); //3.2定义用来保存最终结果的变量price,初始值为0 int price = 0; //3.3根据c字符的值,来为price重新赋值 switch(c) { case '8': price=50; break;//尾数为8支付50 case '4': price=0; break;//尾数为4免费 default: price=20;//其他情况需支付20 } //3.4显示结果 System.out.println("您实际应支付的价格为:"+price); }
}
练习题4 : 分别通过for循环/While循环/do-While循环写一个死循环
package cn.cxy.exec;
public class DeadCycle { public static void main(String[] args) { //for循环的死循环
// for (int i = 1; ; i++){
// System.out.println("欢迎学习泡泡的分享,继续加油哦~");
// } //while循环的死循环
// while(true){
// System.out.println("都到这里啦?奥利给~");
// } //do-while循环的死循环 do{ System.out.println("相信我们可以的~"); }while(true); }
}
练习题5:鸡兔同笼问题(穷举法)
已知:鸡兔共35只,共94只脚,那么鸡和兔各几只?
package cn.cxy.exec;
//穷举法
//鸡 兔
//0 35
//1 34
//2 33
//3 32
//...
//23 12
//...
//35 0
public class SameCage { public static void main(String[] args) { //循环变量j,控制小鸡的个数: 0到35递增 //循环变量t,控制兔子的个数: 35到0递减 for(int j=0,t=35; j<=35; j++,t--) {//如果有多个小条件,用逗号隔开 //保证脚的数量是94 if(j*2 + t*4 == 94) { System.out.println("鸡:"+j+", 兔:"+t); } } }
}
练习题6:求数字阶乘(for循环版)
需求:接收用户输入的数字,计算该数字的阶乘结果
已知:负数不可以有阶乘,0的阶乘结果是1,
5 ! = 5 x 4 x 3 x 2 x 1
package cn.cxy.exec;
import java.util.Scanner;
public class Factorial { public static void main(String[] args) { System.out.print("输入整数,求阶乘:"); int n = new Scanner(System.in).nextInt(); //调用f()方法,把n的值传递到f()方法,求阶乘 f(n); } public static void f(int n) { if(n<0) { System.out.println("负数不可以求阶乘"); return;//方法结束,返回到调用位置继续执行 } if(n == 0) { System.out.println("0的阶乘是1"); return; } /* * r = 5 * i * 4, r=r*i * 3, r=r*i * 2, r=r*i * 1, r=r*i */ long r = n; for(int i=n-1; i>=1; i--) { r *= i; } System.out.println(n+"的阶乘:"+r); }
}
/**其实我们还可以通过递归思想解决这个问题,感兴趣的可以研究一下~*/
练习题7:多次生成随机数,并打印第一次出现大于0.999 时的次数与生成的随机数
package cn.cxy.exec;
public class ForBreak { public static void main(String[] args) { // Math.random()可以产生[0,1)的随机浮点数 // >0.999 //写一个死循环, i变量用来计次 for(int i=1; ;i++) { double d = Math.random(); if(d>0.999) { System.out.println("第"+i+"次产生了目标值,值为:"+d); break; } } }
}
练习题8:打印100以内除了尾数为3,5,7的所有数
package cn.cxy.exec;
public class ForContinue { public static void main(String[] args) { for(int i=1;i<=100;i++) { int y = i%10;//100以内的数,通过取余求出尾数 if(y==3 || y==5 || y==7) { continue;//如果尾数为3 5 7 ,则跳过后面的打印,进行下一轮循环 } System.out.println(i); } }
}
练习题9:求质数:接收用户输入的数字,判断是否为质数
质数的概念:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数
规定:1既不是质数,也不是合数
package cn.cxy.exec;
import java.util.Scanner;
public class PrimeNumber { public static void main(String[] args) { System.out.print("请输入要判断的自然数:"); int n = new Scanner(System.in).nextInt(); //调用getPrimeNumber()方法,判断n是否为质数 getPrimeNumber(n); } public static void getPrimeNumber(int n) { if(n<2) {//此范围内的数均不为质数 System.out.println(n+"不是质数"); return;//结束程序 } if(n == 2) { System.out.println("2是质数"); return; } //在 2到 1+n开方范围(数学理论),找能把n整除的值(这个值也称作因子) //如果找到可以把n整除的第三个数,那n就不是质数,反之,n为质数 double max = 1+ Math.sqrt(n);//max保存的是查找因子的范围 //依次遍历范围内的所有数,验证是否存在n的因子 for(int i=2; i<max; i++) { //判断n能不能被i整除,如果有,说明不是质数 if(n%i == 0) { System.out.println(n+"不是质数"); return; } } //如果判断了范围内的所有值,没有能整除的,则说明n是质数 System.out.println(n+"是质数"); }
}
练习题10:接收用户输入的数字,判断在此范围内质数的个数
package cn.cxy.exec;
import java.util.Scanner;
public class CountPrimeNumber { public static void main(String[] args) { System.out.println("输入整数n,求n内质数的数量"); int n = new Scanner(System.in).nextInt(); count(n); } public static void count(int n) { if(n<2) { System.out.println("没有质数"); return; } if(n==2) { System.out.println("有1个质数"); return; } //定义计数变量 int count = 1;//已知有一个质数 outer: //从3到n寻找质数 for(int i=3; i<=n ;i++) { //判断i是否是质数 double max = 1+ Math.sqrt(i); for(int j=2; j<max; j++) {//在2到<max,找能把i整除的数 if(i%j == 0) {//i被j整除,i不是质数 //跳到i++,继续判断下一个i值 continue outer;//跳到外部outer的位置 } } //内层j循环结束,i是质数 count++; } System.out.println(n+"内质数的数量:"+count); }
}
练习题11:生成一个顺序数组,将这个数组的元素打乱顺序后输出
package cn.cxy.exec;
import java.util.Arrays;
import java.util.Random;
public class ShuffleArray { public static void main(String[] args) { //调用f()方法,从方法获取一个int[]数组 int[] a = f(); //遍历打印数组数据 for(int i=0; i<a.length; i++) { System.out.println(a[i]); } System.out.println("\n\n----------------"); //把a数组,传递到 shuffle() 方法打乱顺序 shuffle(a); //打印乱序后的数组 System.out.println(Arrays.toString(a)); } public static int[] f() { //新建int[]数组,长度5 //再把它的内存地址存到变量 a int[] a = new int[5]; //遍历访问5个位置,填入1,2,3,4,5 for(int i=0; i<a.length; i++) { a[i] = i+1; } //返回数组,把数组返回到调用位置 //本质是把数组地址返回去 return a; } public static void shuffle(int[] a) { /* * j * [4, 2, 3, 1, 5] * i * * *) i循环遍历数组 * *) 随机定位下标j与i交换 */ for (int i = 0; i < a.length; i++) { //随机下标j,范围:[0, a.length) int j = new Random().nextInt(a.length); int t = a[i]; a[i] = a[j]; a[j] = t; } }
}
练习题12:求数字阶乘(递归解法版)
需求:接收用户输入的数字,计算该数字的阶乘结果
已知:负数不可以有阶乘,0的阶乘结果是1,
5 ! = 5 x 4 x 3 x 2 x 1
package cn.cxy.design;
//需求:求用户输入数字的阶乘结果
//f(int n)--用来求阶乘
//规律:
//f(n)= n*f(n-1)
//f(5)= 5*4*3*2*1 = 5*f(4)
//f(4)= 4*3*2*1 = 4*f(3)
//f(3)= 3*2*1 = 3*f(2)
//f(2)= 2*1 = 2*f(1)
//f(1)= 1
//
//5!=5*4*3*2*1=120
//4!=4*3*2*1
//3!=3*2*1
//2!=2*1
//1!=1
public class TestRecursion {
public static void main(String[] args) {
int result = f(15);//调用f()用来求阶乘
System.out.println(result);
}
/**递归的两要素 1.总结规律 2.最简问题*/
public static int f(int n) {
if(n == 1) {//最简问题 return 1;
}else {//其他情况 n*f(n-1) //递归:再方法内部自己调用自己 return n*f(n-1);
}
}
}
练习题13:打印全三角形
需求:接收用户输入的行数,打印对应的全三角形,如图所示:
package cn.cxy.exec;
import java.util.Scanner;
public class PrintTraingle {
public static void main(String[] args) {
//1.提示并接收用户输入的行数:
System.out.println("请输入您要打印星星的行数:");
int n = new Scanner(System.in).nextInt(); //2.开始打印图形
//2.1外层循环控制打印的行数 i的取值范围:[1,n],一共n行
for(int i=1;i<=n;i++){ //2.2内层循环1 //控制每行打印空格的个数 j的取值范围:[0,n-i),即1 2 3... for(int j=0;j<n-i;j++){ System.out.print(" "); } //2.3内层循环2 //控制每行打印星星的个数 k的取值范围:[1,2*i-1],即1 3 5 ... for(int k=1;k<=2*i-1;k++){ System.out.print("*"); } //2.4打印完本行所有内容后添加换行 System.out.println();
}
}
}
练习题14:求任意自然数各位数之和
接收用户输入的任意自然数,累计所有位数数字之和
需求:接收用户输入的行数,
package cn.cxy.exec;
import java.util.Scanner;
public class SumNum {
public static void main(String[] args) {
//1.提示并接收用户要计算的自然数:
System.out.println("请输出您要求和的自然数:");
int n = new Scanner(System.in).nextInt();
//2.定义一个变量用来保存最终求和的结果
int sum=0;
//3.循环获取每一位上的数
while(n!=0){ //4.求当前的个位数,并将个位数累加 sum = sum + (n%10); //5.去掉刚刚累加过的最后一位数,得到新的整数 //比如刚刚的十位就变成了现在的个位 n=n/10;
}
//6.打印最终的结果:
System.out.println(sum);
}
}
练习题15:求任意数组中所有元素的最大值
package cn.cxy.exec;
public class GetArrayMaxNum {
public static void main(String[] args) { //1.定义一个数组 int[] arr={90,1562,43,2,44,8,6666}; //2.选取数组中的第一个元素开始比较 int max=arr[0]; //3.依次遍历数组中的每个元素 for(int i=1;i<arr.length;i++){//i指的是下标,我们通过下标来操作数组中的元素 //4.判断当前元素与目前最大值的大小 if(arr[i]>max){ //5.如果当前数组元素大于max,就讲此元素的值赋值给max max=arr[i]; } } //6.打印最终的结果 System.out.println(max);
}
}
练习题16:求1000以内的完数
完数:如果一个数等于其所有因子之和,我们就称这个数为”完数”,比如6的因子为1,2,3 6 = 1 + 2 + 3,那么6就是一个完数
package cn.cxy.exec;
/**获取1000以内的完数*/
public class GetNum {
public static void main(String[] args) {
//1.循环遍历1000以内的所有数
for(int i=1;i<=1000;i++){ //2.定义一个变量来保存求和的结果 int sum = 0; //3.求i的因子 for(int j=1;j<=i/2;j++){ //4.判断是否能被整除 if(i % j == 0){ //5.如果能整除,就是因子,因子需要累加 sum+=j; } } //6.如果因子累加之和为本轮判断的数,则当前数是完数,输出 if(sum==i){ System.out.println(i); }
}
}
}
练习题17:求猴子大王
15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?
package cn.cxy.exec;
/**猴子选大王*/
public class MonkeyKing {
public static void main(String[] args) {
//1.定义长度为15的数组保存猴子,boolean类型是为了判断猴子是否存活
boolean[] b=new boolean[15]; //2.依次遍历每一只猴子
//true---未淘汰 false---已淘汰
for(int i=0;i<b.length;i++){ b[i]=true;//先把所有猴子设置成存活
}
//3.定义变量保存猴子报的数
int num=0;
//4.定义变量保存剩余的猴子数
int monkeyLeft=15;
//5.定义数组下标
int index=0;
//6.循环,直到只剩最后一只猴子(猴子王)
while(monkeyLeft>1){//判断条件 //7.检测猴子是否已淘汰 if(b[index]){ //8.报数 num++; //9.判断报数是否为7 if(num==7){ b[index]=false;//为7淘汰 monkeyLeft--;//猴子数减一 num=0;//报数归零 } } //10.下标移动 index++; //11.围成一圈---最后一个置为0 if(index==15){ index=0; }
} //遍历数组,找到最后活着的那个猴子王
for(int i=0;i<b.length;i++){ if(b[i]){ System.out.println(i+1); }
}
}
}
练习题18:斐波那契问题
已知:斐波那契数列的前几个数分别为0,1,1,2,3,5…从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项.
package cn.cxy.exec;
import java.util.Scanner;
/**斐波那契数列*/
public class Faibonacci {
public static void main(String[] args) {
System.out.println("请输入您要测试的数:");
int n = new Scanner(System.in).nextInt();
//判断n是否是不正常的范围
if(n<1){ System.out.println("输入数据有误!!!");
}
//n==1
if(n==1){ System.out.println(0);
}
//n==2
if(n==2){ System.out.println(0+"\t"+1); }
//n==3
if(n==3){ System.out.println(0+"\t"+1+"\t"+1); }
//拼接前n项
if(n>3){ System.out.print(0+"\t"+1+"\t"+1+"\t"); }
//循环输出后面的数据
int f1=1;
int f2=1;
int next=0;
for(int i=4;i<=n;i++){ next=f1+f2; f1=f2; f2=next; System.out.print(next+"\t");
}
}
}
练习题19:古典问题:有一对兔子,从出生后第3个月起都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子的对数为多少?
程序分析:前两个月兔子的对数为1
从第三个月开始,兔子的对数变成了 3 5 8 13 21 …
package cn.cxy.exec;
import java.util.Scanner;
public class GetRabbitNum {
public static void main(String[] args) {
System.out.println("请输入要判断的月数:");
int month = new Scanner(System.in).nextInt();
System.out.println("第"+month+"月兔子的对数为:"+getSum(month));
}
public static int getSum(int month) {
//如果是前两个月,还是1对兔子
if(month == 1 || month == 2) { return 1;
}else { //从第三个开始,兔子按照2 3 5 8 13 21变化 return getSum(month-1)+getSum(month-2);
}
}
}
练习题20:打印水仙花数
水仙花数:是指一个三位数,其各位数字立方和等于该数字本身
例如:153就是一个水仙花数,因为153 = 1³ + 5³ + 3³
package cn.cxy.exec;
public class GetNum {
public static void main(String[] args) {
//1.遍历所有的三位数
for (int i = 100; i < 1000; i++) { //2.调用自定义方法判断是不是水仙花数 if(isAim(i)) { //3.如果是水仙花数,就打印 System.out.println(i); }
}
}
//4.自定义判断水仙花数的方法
public static boolean isAim(int a) {
int x = a/100;
int y = a/10%10;
int z = a%10;
if(a == x*x*x+y*y*y+z*z*z) { return true;
}
return false;
}
}
文章来源: blog.csdn.net,作者:程序媛 泡泡,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_43884234/article/details/116569562