每个人都会经历这样的阶段:开始意识到自己的平庸与局限,看着很多不切实际的可能性正逐渐被关闭,与此同时又会觉得不甘心。希望与失望反复交叠,变得焦虑与迷茫。其实,自我怀疑与自我期许正是硬币的两面,打破怀疑、印证期许,恰恰是成长中最重要的环节之一。早安!
█ Java问题:
今日的每日一题也是一个算术题:输入两个正整数m和n,求其最大公约数和最小公倍数。
█ 代码贴图:
########################################################
########################################################
package test;
import java.util.Scanner;
/**
* 每日一题:
* 输入两个正整数m和n,求其最大公约数和最小公倍数。
*
* Date:11.16
*
*/
public class Prog10最大公约最小公倍 {
public static void main(String[] args) {
while(true){
System.out.println("输入第一个数:");
int m = getInputNum();
if(m==0)break;
if(m>0){
System.out.println("输入第二个数:");
int n = getInputNum();
if(n==0)break;
if(n>0){
// 最大公约数
int maxCommonDivisor = maxCommonDivisor(m, n);
// 最小公倍数:由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积
// 所以最小公倍数=两个数的乘积除以最小公倍数
int minCommonMultiple = m * n / maxCommonDivisor;
System.out.println(m + "和" + n + "的最大公约数为" + maxCommonDivisor);
System.out.println(m + "和" + n + "的最小公倍数为" + minCommonMultiple);
}
}
}
}
/**
* 仿照涛哥封装的方法,得到输入的整数,或者退出程序的指令
* @return 0:退出程序 -1:输入非法 num:输入的正整数
*/
private static int getInputNum(){
Scanner in = new Scanner(System.in);
int num = -1;
if (in.hasNextInt()) {
num = in.nextInt();
if(num<=0){
num = -1;
System.err.println("输入的"+num+"为非正整数数。");
}
} else if ("exit".equals(in.next())) {
num = 0;
in.close();
System.out.println("退出成功~");
} else{
System.err.println("输入为非整数");
}
return num;
}
/**
* 求最大公约数 ,辗转相除法:
* 首先明白几个概念: 被除数÷除数=商 (15%3 的话,则15是被除数,3是除数) A除B 表示B是被除数 A是除数
* (15%3的话,表示3除15)
*
* 求法:当两个数都较大时,采用辗转相除法比较方便. 其方法是:
* 以小数除大数,如果能整除,那么小数就是所求的最大公约数 否则就用余数来除刚才的除数; 再用这新除法的余数去除刚才的余数.
* 依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
*
* @param m
* @param n
*/
private static int maxCommonDivisor(int m, int n) {
int temp = 1;
// 确保m>n,否则交换位置,结果为:m是大数,n是小数
if (m < n) {
temp = m;
m = n;
n = temp;
}
// 以小数除大数,如果能整除,那么小数就是所求的最大公约数(m%n)
// 如果余数是0,则代表小数n是就是最大公约数。
// 如果余数不是0,则用余数除刚才的除数。(除数%余数)
// 以此类推,只到余数是0,
// 则除数就是最大公约数
while (n != 0) {
temp = m % n;
m = n; // 除数
n = temp;// 余数
}
return m;
}
}
Good morning everyone! Be very careful about what you think. Your thoughts run your life. Bon courage!
PS :本篇文章内容不是自己写的,是从崔老师发出来的内容中稍微整理后的博客,顶部的贴图来自微信公众号【人民日报】,最后的一段话,是来自王老师、吴老师的心灵鸡汤!
█ 相关资料:
1.人民日报 微信公众号
来了!新闻早班车-人民日报 微信公众号
连接:http://mp.weixin.qq.com/s/XvQdw7WUdfHexnpxuY_HzQ
2.金老师的建议:
a、接口类:采用JavaBean+Interface+Dao的形式来定义,即,实体对象+Interface+Dao。 如:用户对象接口类: UserInterfaceDao,其中xxx为模块名称。
b、实现类:采用JavaBean+Interface+Impl+Dao的形式来定义,即,实体对象+Interface+Impl+Dao。 如:用户对象实现类:UserInterfaceImplDao。
Dao层命名规则
一般接口命名规则可以在最开始加上大写字母I,其实现类末尾加上Impl,这样可以很容易根据命名来区分是接口,还是普通类,还是实现类,前面的大写I表示Interface,后面的Impl表示Implementation
3.崔老师的建议:
大家如果想把Eclipse中的代码全部截屏的话,可以使用这个工具
整页代码截屏,这个工具可以滚动截屏。
在实际开发工作中,是一个团队一起工作,如果团队员的代码不宜读的话,难免会造成低效率的工作,不宜修改和维护。建议将代码写得更简洁去实现更复杂的算法。我们在练习的过程中也有点类似团队相互去读队友的代码,对代码进行审查,从而锻炼你们的编程思维和编程的效率。
PS :本篇文章使用的内容如果涉及到侵权问题、违反相关规则请联系我,立即删除。