Java日常练习题
这是我在课余时间手敲的一些练习题
做以记录,希望我自己可以坚持下去,代码很粗糙,如有不足的地方还请各位大佬给予更好的方法
练习一:
package week1;
public class Demo1 {
/*接受用户传入的三个整数,并将它们的最大值作为结果输出*/
private void GetMaxNumber(int a, int b, int c) {
int max = (a > b) ? a : b;
System.out.println(a + "\t" + b + "\t" + c + "的最大值是" + ((max > c) ? max : c));
}
public static void main(String[] args) {
Demo1 dy = new Demo1();
dy.GetMaxNumber(3, 4, 5);
}
}
练习二:
package week1;
public class Demo2 {
private void GetBmi(double height,double weight){
double bmi=weight/(height*height);
if(bmi<18.5)
System.out.println("过轻");
else if(bmi<22.9)
System.out.println("正常");
else if(bmi<24.9)
System.out.println("偏胖");
else if(bmi<29.9)
System.out.println("肥胖");
else if(bmi<40)
System.out.println("重度肥胖");
else
System.out.println("极度肥胖");
}
public static void main(String[] args) {
Demo2 dy1 = new Demo2();
dy1.GetBmi(1.8,67.5);
}
}
练习三:
package week1;
import java.util.Scanner;
public class Demo3 {
/*手机选号,根据用户输入的手机号来确认用户实际支付的价格
*如果尾数为8,需支付办卡费50元
* 如果尾数为4,需支付办卡费0元
* 如果是其他尾号,需支付办卡费用20元
*
*/
public static void main(String[] args) {
//提示并接收用户输入的手机号
System.out.println("请输入您要预选的手机号:");
String tel = new Scanner(System.in).nextLine();//String类型数据一般用nextline()
getPrice(tel);
}
//创建getprice方法
//被static修饰的方法在类加载的时候执行
public static void getPrice(String tel){
//手机号tel的长度,必须是11位的正确手机号--提前校验,提高程序健壮性
if(tel.length()!=11){
System.out.println("号码格式错误!!");
}
//获取手机号的尾数
char ws = tel.charAt(10);//位数是11,范围是0到length-1,charAt()方法是获取指定位数上的值
//定义用来保存最终结果的变量price,初始化为零
int price = 0;
//根据ws字符的值,来为price重新赋值
switch (ws){
case '8':price=50;break;//若尾数为八,则价格为50
case '4':price=0;break;//若尾数为4,则价格为零
default:price=20;//其他尾数的价格为20
}
System.out.println("您实际应支付的价格为"+price);
}
}
练习四:
package week1;
public class Demo4 {
/*分别通过for循环、while循环、do-while循环写一个死循环*/
private void Forsx(){
for(int i=1;i>0;i++){
System.out.println("ldsb");
}
}
private void Whilesx(){
while (true){
System.out.println("zjh是真的帅");
}
}
private void Do_Whilesx(){
do{
System.out.println("我心有静");
}while (true);
}
public static void main(String[] args) {
Demo4 dy = new Demo4();
//dy.Do_Whilesx();//do-whlie的死循环
//dy.Forsx();//for循环的死循环
dy.Whilesx();//whlie的死循环
}
}
练习五:
package week1;
public class Demo5 {
/*鸡兔同笼问题
*已知鸡兔共有35只,共94只脚,那么鸡兔各几只?
*
*
*/
public static void main(String[] args) {
//循环变量j定义鸡,循环变量t定义兔
//穷举法;定义鸡从零到35,兔从35到0;
for (int j = 0,t=35; j <=35&&t>=0; t--,j++) {
if(2*j+4*t==94){
System.out.print("鸡有"+j+"只"+"\n"+"兔有"+t+"只");
break;
}
}
}
}
练习六:
package week1;
import java.util.Scanner;
public class Demo6 {
/*求数字阶乘(for循环版)
*需求:接收用户输入的数字,计算该数字的阶乘结果
* 已知:负数不可以有阶乘,0的阶乘是1
* 5!=5*4*3*2*1
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要计算阶乘的数字:");
int a = sc.nextInt();//接收用户输入的数字
if(a<0){//负数不能求阶乘
System.out.println("负数不能求阶乘");
}
else if (a == 0) {//特殊情况,当用户输入的数字为0时,0!=1
System.out.println("0!=1");
} else {
System.out.print(a+"!=");
for (int i = a - 1; i > 0; i--) {
a = a * i;
}
System.out.println(a);
}
}
}
练习七:
package week1;
public class Demo7 {
/*
多次生成随机数,并打印第一次出现大于0.999 时的次数与生成的随机数
*/
public static void main(String[] args) {
int i = 0;//用i来记录生成的次数
//循环次数未知的情况下使用while循环
while (true) {
double a = Math.random();//在区间[0,1)上随机生成一个数
if(a>0.999){
System.out.println("第一次出现大于0.999的随机数是"+a+"生成的次数为"+i);
break;
}
i++;
}
}
}
练习八:
package week1;
public class Demo8 {
/*
打印100以内除了尾数为3,5,7的所有数
*/
public static void main(String[] args) {
System.out.println("100以内除了尾数为3,5,7的所有数为:");
for (int i=1;i<100;i++){
int a = i%10;//100以内的数通过除10取余得出尾数,将尾数赋给变量a
if(a==3||a==5||a==7){
continue;//跳过本次循环执行下一条语句
}
System.out.print(i+"\t");
}
}
}
练习九:
package week2;
import java.util.Scanner;
public class Demo9 {
/*
求质数:接收用户输入的数字,判断是否为质数
质数的概念:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数
规定:1既不是质数,也不是合数
*/
//静态方法判断所输入的数是否为质数
public static void getPrimenumber(int a){
if (a < 2) {//这个范围内的数都不是质数
System.out.println(a+"不是质数");
return;
}
if (a == 2) {
System.out.println("2是质数");
return;
}
for (int i = 2; i < a; i++) {
if (a % i == 0) {
System.out.println(a + "不是质数");
return;//return结束程序
}
}
System.out.println(a + "是质数");
}
public static void main(String[] args) {
System.out.println("请输入一个自然数:");
int a = new Scanner(System.in).nextInt();
getPrimenumber(a);
}
}
练习十:
package week2;
import java.util.Scanner;
public class Demo10 {
/*
接收用户输入的数字,判断在此范围内质数的个数
*/
public static void main(String[] args) {
System.out.println("请输入一个自然数:");
int x = new Scanner(System.in).nextInt();
if(x<2){
System.out.println("此范围内没有质数");
return;
}
if(x==2){
System.out.println("有一个质数");
return;//结束程序
}
int count=1;
flag:
for (int i = 3; i < x; i++) {//i从3开始,说明已经将2是质数计入count中,每次拿到一个i与 j到i 的数进行取余操作
for (int j = 2; j < i; j++) {
if(i%j==0){
//结束本次循环执行下一条语句,这里是跳到标记点flag处
continue flag;//当i整除j时,说明i不是质数,continue flag;跳出循环判断下一个i
}
}
//内层循环j结束,i是质数,count+1
count++;
}
System.out.println(count);
}
}
练习十二:
package week2;
import java.util.Scanner;
public class Demo12 {
/*
求数字阶乘(递归解法版)
需求:接收用户输入的数字,计算该数字的阶乘结果
已知:负数不可以有阶乘,0的阶乘结果是1,
5 ! = 5 x 4 x 3 x 2 x 1=120
*/
/**递归的两要素 1.总结规律 2.最简问题*/
private static int diGui(int n){
if(n==1){//最简问题
return 1;
}else{//其他情况 n*diGui(n-1)
//递归:在方法内部自己调用自己
return n*diGui(n-1);
}
}
public static void main(String[] args) {
System.out.println("请输入一个大于零的自然数:");
int n = new Scanner(System.in).nextInt();
int c=diGui(n);//调用digui(n)来求n的阶乘
System.out.println("由递归算法求得的"+n+"的阶乘为"+c);
}
}
练习十三:
package week2;
import java.util.Scanner;
public class Demo13 {
/*
打印全三角形
需求:接收用户输入的行数,打印对应的全三角形
*/
private static void printQusanjiao(int h){
/*
开始打印全三角行
外层循环决定星星打印的行数
*/
for (int i = 0; i <= h; i++) {
//控制每行打印空格的个数
for (int k = 0; k < h-i; k++) {//加空格
System.out.print(" ");
}
/*
控制每行打印星星的个数j的范围是0到2*i-1左闭右开
*/
for (int j = 0; j <2*i-1; j++) {//打印*
System.out.print("*");
}
System.out.println();//每打印一行就进行换行
}
}
public static void main(String[] args) {
System.out.println("请你输入需要打印的星星行数:");
int h = new Scanner(System.in).nextInt();
printQusanjiao(h);
}
}
练习十四:
package week2;
import java.util.Scanner;
public class Demo14 {
/*
求任意自然数各位数之和
接收用户输入的任意自然数,累计所有位数数字之和
需求:接收用户输入的行数,
*/
public static void weiShuSum(int n){//接收用户输入的自然数
//定义一个变量用来保存最终的求和结果
int sum=0;
//循环获取每一位上的数
while(n!=0){
//求当前个位数,并将个位数累加
sum = sum+(n%10);
//去掉刚刚累加过的最后一位数,得到新的整数
n=n/10;
}
//打印结果
System.out.println(n+"的所有位数的数字之和为"+sum);
}
public static void main(String[] args) {
System.out.println("请输入一个自然数:");
int n = new Scanner(System.in).nextInt();
weiShuSum(n);//传入参数n
}
}
练习十五:
package week2;
import java.util.Arrays;
public class Demo15 {
/*
求任意数组中所有元素的最大值
*/
public static void main(String[] args) {
int[] a = {333,421,521,0,52,78};
Arrays.sort(a);//排序{0,52,78,333,421,521}
System.out.println(a[a.length-1]);//取数组最后一位,元素最大值
}
}
练习十六:
package week2;
public class Demo16 {
/*
求1000以内的完数
完数:如果一个数等于其所有因子之和,我们就称这个数为"完数",
比如6的因子为1,2,3 6 = 1 + 2 + 3,那么6就是一个完数
*/
public static void main(String[] args) {
System.out.println("1000之内的完数有:");
for (int i = 1; i < 1000; i++) {//外层循环控制因数
int sum=0;//定义一个变量来储存求和的值
for (int j = 1; j < i; j++) {//内层循环控制因子,这里可以优化j<i/2
//判断能否整除,能整除的就是因子,
if(i%j==0){
sum+=j;//将获取到的因子进行求和
}
}
//判断i是否是完数,并将完数打印输出
if(sum==i){
System.out.println(i);
}
}
}
}
练习十七:
package week2;
public class Demo17 {
/*
求猴子大王
15个猴子围成一圈选大王,依次1-7循环报数,
报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?
*/
public static void main(String[] args) {
//定义长度为15的数组保存猴子,Boolean类型是为了判断猴子是否存活
boolean[] b = new boolean[15];
//依次遍历每一只猴子
//true---表示未淘汰 false---表示已淘汰
for (int i = 0; i < b.length; i++) {
b[i]=true;//先把所有猴子设置成活
}
//定义变量保存猴子报的数
int num=0;
//定义变量保存剩余猴子数
int monkeyleft=15;
//定义数组下标
int index=0;
//循环,直到只剩下最后一只猴子为止
while (monkeyleft>1){//判断条件
//检测猴子是否已淘汰
if(b[index]){
//报数
num++;
//判断报数是否为7
if(num==7){
b[index]=false;//如果为7就淘汰
monkeyleft--;
num=0;//报数归零
}
}
//下标移动
index++;
//围成一圈——最后一个置为零
if(index==15){
index=0;
}
}
//遍历数组,找到最后或者的那个猴子王
for (int i = 0; i < b.length; i++) {
if(b[i]){
System.out.println(i+1);
}
}
}
}
持续更新中…