第1题:1-100偶数
1、打印1-100之间的偶数
public class Exercise1 {
public static void main(String[] args) {
for (int i = 2; i <=100 ; i+=2) {
System.out.println(i);
}
}
}
第2题:水仙花数
2、所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。例如: 153 = 1*1*1 + 5*5*5 + 3*3*3,找出所有的水仙花数,并统计他们有几个。
public class Exercise2 {
public static void main(String[] args) {
System.out.println("水仙花数有:");
int count = 0;
for (int i=100; i<1000; i++){
int bai = i/100;
int shi = i/10%10; // 或 i%100/10
int ge = i%10;
//判断这个三位数是否是水仙花数,如果是,统计变量++
if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == i) {
System.out.println(i);
count++;
}
}
System.out.println("一共有" + count +"个");
}
}
第3题:foobizbaz
3、从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。例如:
public class Exercise3 {
public static void main(String[] args){
//从1循环到150
for(int i=1; i<=150; i++){
//在每行打印一个i的值
//System.out.println(i);//输出i之后,立刻换行
System.out.print(i);//只打印i的值
//每个3的倍数行上打印出“foo”
if(i%3==0){
//System.out.println("foo");//输出foo后立刻换行
System.out.print("\tfoo");//这里加\t是为了好看
}
//在每个5的倍数行上打印“biz”
if(i%5==0){
System.out.print("\tbiz");
}
//在每个7的倍数行上打印输出“baz”
if(i%7==0){
System.out.print("\tbaz");
}
//最后把这一行的事全部完成后,再换行
//System.out.print("\n");
System.out.println();//只打印换行
}
}
}
第4题:最大公约数和最小公倍数
4、输入两个正整数m和n,求其最大公约数和最小公倍数
import java.util.Scanner;
public class Exercise4 {
public static void main(String[] args) {
//输入两个正整数m和n
Scanner input = new Scanner(System.in);
int m;
while(true){
System.out.print("请输入第一个正整数m的值:");
m = input.nextInt();
if(m<=0){
System.out.println(m + "不是正整数,请重写输入!");
}else{
break;
}
}
int n;
while(true){
System.out.print("请输入第一个正整数n的值:");
n = input.nextInt();
if(n<=0){
System.out.println(n + "不是正整数,请重写输入!");
}else{
break;
}
}
System.out.println("两个正整数:" + m + "," + n);
input.close();
//求m和n的最大公约数和最小公倍数
/*
1、概念
公约数:能够把m和n都整除,就是它俩的公约数
例如:6和9,公约数:1,3
9和18,公约数:1,3,9
5和13,公约数:1
公倍数:能够被m和n都整除的,就是它俩的公倍数
例如:6和9,公倍数:18,36....
9和18,公倍数:18,36...
5和13,公倍数:65,....
2、如何找最大公约数
例如:6和9
从6开始,9%6==0? 6%6==0?
9%5==0? 6%5==0?
9%4==0? 6%4==0?
9%3==0? 6%3==0? binggou找到了 结束查找
例如:9和18
从9开始 9%9==0? 18%9==0? binggou找到了 结束查找
例如:5和13
从5开始 5%5==? 13%5==0?
5%4==? 13%4==0?
5%3==? 13%3==0?
5%2==? 13%2==0?
5%1==? 13%1==0? binggou找到了 结束查找
其实只要找到5的平方根就可以了
*/
//第一步:找出m和n中最大值和最小值
int max = m>=n ? m : n;
int min = m<n ? m : n;
//第二步:从小的开始查找
int maxYue = min;
while (maxYue >= 1){
if(m % maxYue==0 && n%maxYue==0){
break;
}
maxYue--;
}
System.out.println(maxYue +"是" + m + "和" + n + "的最大公约数");
//最小公倍数 = m*n / 最大公约数
//System.out.println(m*n/maxYue +"是" + m + "和" + n + "的最小公倍数");
//如果不知道这个公式,从max开始找,一直找到m*n
int maxBei = max;
while(maxBei <= m*n){
if(maxBei % m ==0 && maxBei % n ==0){
break;
}
maxBei ++ ;
}
System.out.println(maxBei +"是" + m + "和" + n + "的最小公倍数");
}
}
第5题:ATM
5、声明变量balance并初始化为0,用以表示银行账户的月,下面通过ATM机程序实现存款,取款等功能。
---------ATM-------
1、存款
2、取款
3、显示余额
4、退出
请选择:
import java.util.Scanner;
public class Exercise5 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//声明一个变量表示余额
double balance = 0.0;
boolean flag = true;
int select;
do{
System.out.println("=========ATM========");
System.out.println("\t1、存款");
System.out.println("\t2、取款");
System.out.println("\t3、显示余额");
System.out.println("\t4、退出");
System.out.print("请选择:");
select = input.nextInt();
switch(select){
case 1:
System.out.print("存款的金额:");
double money = input.nextDouble();
balance += money;
break;
case 2:
System.out.print("取款的金额:");
money = input.nextDouble();
if ((balance-money)<=0){
System.out.println("取款失败!余额不足");
}else {
balance -= money;
}
break;
case 3:
System.out.println("现在的余额:" + balance);
break;
}
}while(select != 4);
input.close();
}
}
第6题:九九乘法表
public class Exercise6 {
public static void main(String[] args) {
for(int i =1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j) + "\t");
}
System.out.println();
}
}
}
第7题:菱形
public class Exercise7 {
public static void main(String[] args){
//上半部分:正的等腰三角形
//5行
for(int i=1; i<=5; i++){
//(1)打印空格
/*
当i=1,打印4个空格,j=4,3,2,1 j>=i
当i=2,打印3个空格,j=4,3,2
当i=3,打印2个空格,j=4,3
当i=4,打印1个空格,j=4
当i=5,打印0个空格,j=4,让循环条件一次都不满足
*/
for(int j=4; j>=i; j--){
System.out.print(" ");
}
//(2)打印*
/*
当i=1,打印1个,j=1 j<=2*i-1
当i=2,打印3个,j=1,2,3,
当i=3,打印5个,j=1,2,3,4,5
当i=4,打印7个,j=1,2,3,4,5,6,7
当i=5,打印9个,j=1,2,3,4,5,6,7,8,9
*/
for(int j=1; j<=2*i-1; j++){
System.out.print("*");
}
//(3)换行
System.out.println();
}
//下半部分:倒立的等腰三角形
//4行
for(int i=1; i<=4; i++){
//(1)打印空格
/*
当i=1,1个空格,j=1 j<=i
当i=2,2个空格,j=1,2
当i=3,3个空格,j=1,2,3
当i=4,4个空格,j=1,2,3,4
*/
for(int j=1; j<=i; j++){
System.out.print(" ");
}
//(2)打印*
/*
当i=1,7个*,j=1,2,3,4,5,6,7 j<=9-2*i;
当i=2,5个*,j=1,2,3,4,5
当i=3,3个*,j=1,2,3
当i=4,1个*,j=1
*/
for(int j=1; j<=9-2*i; j++){
System.out.print("*");
}
//(3)换行
System.out.println();
}
}
}
第8题:完数
8、一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数)
例如6=1+2+3.编程 找出1000以内的所有完数
public class Exercise8 {
public static void main(String[] args){
//找出1000以内的所有完数
for(int i=1; i<1000; i++){
//判断i是否是完数,如果是就打印i
/*
完数?
一个数如果恰好等于它的因子之和
例如:6的因子:1,2,3
1,2,3,6是6的约数,能够把6给整除了
因子:除了6本身以外的约数
例如:18的因子:1,2,3,6,9 不是完数
如何判断i是否是完数?
(1)先找出i的所有的因子,并且累加它的所有的因子
(2)判断因子之和与i是否相等,如果相等就是完数
*/
//(1)先找出i的所有的因子,并且累加它的所有的因子
int iSum = 0;
for(int j=1; j<i; j++){
//如果j能够把i整除了,j就是i的因子
if(i%j==0){
iSum += j;
}
}
//(2)判断因子之和与i是否相等,如果相等就是完数
if(i == iSum){
System.out.println(i);
}
}
}
}
第9题:输出月份对应的英语单词
从键盘输入月份值(1-12),输出对应月份的英语单词,如果月份值超过1-12,提示输入错误!
import java.util.Scanner;
public class Exercise9 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入月份值:");
int month = input.nextInt();
input.close();
switch (month){
case 1:System.out.println("January");break;
case 2:System.out.println("February");break;
case 3:System.out.println("March");break;
case 4:System.out.println("April");break;
case 5:System.out.println("May");break;
case 6:System.out.println("June");break;
case 7:System.out.println("July");break;
case 8:System.out.println("August");break;
case 9:System.out.println("September");break;
case 10:System.out.println("October");break;
case 11:System.out.println("November");break;
case 12:System.out.println("December");break;
default:System.out.println("月份值输入有误!");
}
}
}
第10题:计算今天是星期几
(1)定义变量week赋值为上一年最后一天的星期值,例如:2021年12月31日的星期值5,
(2)定义变量year、month、day,分别赋值今年(例如:2022年)某一天的年、月、日值。
(3)计算这一天是星期几。
(4)开发提示
- 需要计算这一天是今年(例如:2022年)的第几天,即今年已经过了几天了(总天数)
- 再用(总天数 + 5 )% 7 的结果来判断是星期几
(5)每个月总天数:
- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。
(6)闰年的判断标准是:
- 年份year可以被4整除,但不能被100整除
- 或者年份year可以被400整除
public class Exercise10 {
public static void main(String[] args) {
int week = 5;
int year = 2022;
int month = 3;
int day = 8;
//判断这一天是当年的第几天==>从1月1日开始,累加到xx月xx日这一天
//(1)[1,month-1]个月满月天数
//(2)单独考虑2月份是否是29天(依据是看year是否是闰年)
//(3)第month个月的day天
//声明一个变量days,用来存储总天数
int days = 0;
//累加[1,month-1]个月满月天数
switch (month) {
case 12:
//累加的1-11月
days += 30;//这个30是代表11月份的满月天数
//这里没有break,继续往下走
case 11:
//累加的1-10月
days += 31;//这个31是代表10月的满月天数
//这里没有break,继续往下走
case 10:
days += 30;//9月
case 9:
days += 31;//8月
case 8:
days += 31;//7月
case 7:
days += 30;//6月
case 6:
days += 31;//5月
case 5:
days += 30;//4月
case 4:
days += 31;//3月
case 3:
days += 28;//2月
//在这里考虑是否可能是29天
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days++;//多加1天
}
case 2:
days += 31;//1月
case 1:
days += day;//第month月的day天
}
//计算星期
week += days;
week %= 7;
//输出结果
System.out.print(year + "年" + month + "月" + day + "日是星期");
switch (week) {
case 0:
System.out.println("日");
break;
case 1:
System.out.println("一");
break;
case 2:
System.out.println("二");
break;
case 3:
System.out.println("三");
break;
case 4:
System.out.println("四");
break;
case 5:
System.out.println("五");
break;
case 6:
System.out.println("六");
break;
}
}
}
第11题:判断打鱼还是晒网
(1)从键盘输入年、月、日,
(2)假设从这一年的1月1日开始执行三天打鱼两天晒网,那么你输入的这一天是在打鱼还是晒网。
(3)开发提示:
- 先计算这一天是这一年的第几天,即总天数
- 再用总天数 % 5(三天打鱼两天晒网的周期),根据结果来判断是打鱼还是晒网
(4)每个月总天数:
- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。
(5)闰年的判断标准是:
- 年份year可以被4整除,但不能被100整除
- 或者年份year可以被400整除
参考答案:
import java.util.Scanner;
public class Exercise11 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入日期:");
System.out.print("年:");
int year = input.nextInt();
System.out.print("月:");
int month = input.nextInt();
System.out.print("日:");
int day = input.nextInt();
input.close();
//输入日期值合法性验证
boolean flag = false;
if (year > 0) {
if (month >= 1 && month <= 12) {
//计算month月的总天数
int days;
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 29;
} else {
days = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
} else {
days = 31;
}
if(day >= 1 && day <= days) {
flag = true;
}else{
System.out.println("日期输入不合法");
}
} else {
System.out.println("月份输入不合法");
}
} else {
System.out.println("年份输入不合法");
}
if(flag){
//判断这一天是当年的第几天==>从1月1日开始,累加到xx月xx日这一天
//(1)[1,month-1]个月满月天数
//(2)单独考虑2月份是否是29天(依据是看year是否是闰年)
//(3)第month个月的day天
//声明一个变量days,用来存储总天数
int days = 0;
//累加[1,month-1]个月满月天数
switch (month) {
case 12:
//累加的1-11月
days += 30;//这个30是代表11月份的满月天数
//这里没有break,继续往下走
case 11:
//累加的1-10月
days += 31;//这个31是代表10月的满月天数
//这里没有break,继续往下走
case 10:
days += 30;//9月
case 9:
days += 31;//8月
case 8:
days += 31;//7月
case 7:
days += 30;//6月
case 6:
days += 31;//5月
case 5:
days += 30;//4月
case 4:
days += 31;//3月
case 3:
days += 28;//2月
//在这里考虑是否可能是29天
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days++;//多加1天
}
case 2:
days += 31;//1月
case 1:
days += day;//第month月的day天
}
System.out.print(year + "-" + month + "-" + day + "这一天是");
System.out.println((days % 5 == 1 || days % 5 == 2 || days % 5 == 3 ? "打鱼" : "晒网"));
}
}
}