关于用Java来写最大公约数和最小公倍数的问题详解及代码

对于刚刚接触Java语言的初学者而言,除了“hello world”,比较常见的就是水仙花数、最大公约数、最小公倍数、完数、素数(质数)、一定范围内的奇数和、一定范围内的偶数和等等等等练习,此类练习基本都是针对“for(变量的初始;条件的判断;条件的改变){循环体}”,以及for语句中嵌套“if(条件判断){循环体}”的知识点进行操作的,当然,有些题目的知识点可以拓展到数组、函数等,但是对于刚刚接触Java语言,刚刚欣喜地写出“hello world”的初学者而言,仅仅使用for语句(或while、do……while语句)配合嵌套if语句就可以实现了。那么,此处以求输入的两个整数为例,进行示范。由于工作较忙,能抽出的时间较少,那么此处仅罗列出需要注意的重点内容和拓展内容,针对代码的解析可以参考代码中的注释:

一、注意:

1、如何在代码中实现输入功能?

解析:此处,需要在类前(所有代码之前),调用一个package,即:【import java.util.Scanner;】然后,在代码中(实例参见下面代码)按照如下格式,定义要输入的变量:

Scanner sc=new Scanner(System.in);

System.out.println("请输入第一个整数:");
int data1=sc.nextInt();

2、如何能够一次编译运行,多次输入数字执行程序?

解析:此处可以使用while(true){}的方法,将所有要执行的程序循环执行即可,因为当判断条件为真,那么括号内的循环体将一直执行下去。

3、可以使用求余是否为0的办法进行很多程序题目的分析,如判断是否为质数、判断是否为奇数等等等等,详见下附代码。

4、善用三目运算符,例如int min=data1>data2?data2:data1;//使用三目运算符求解输入数字的最小值。

(由于时间关系,不再做更多累述,瑾希望能够帮助更多初学者朋友们解决遇到的此类问题,欢迎批评指正。)

/**
需求:写两个方法,分别求两个整数的最大公约数      和         最小公倍数
提示:最大公约数  --->较小的这个数开始     依次递减  条件判断  同时用这两个数去做除法,如果能整除哪就是最大公约数
*/
import java.util.Scanner;//调用可以输入数字的包
class G{
	public static void main(String[] args){
		while(true){//用于多次输入
		    Scanner sc=new Scanner(System.in);
		    System.out.println("请输入第一个整数:");
		    int data1=sc.nextInt();
			while(data1<0){//如果不是大于零的整数,那么要重新输入
	    	System.out.println("范围错误,请重新输入第一个数:");
		    data1=scanner.nextInt();}
		    System.out.println("请输入第二个整数:");
		    int data2=sc.nextInt();
			while(data2<0){//如果不是大于零的整数,那么要重新输入
		    System.out.println("范围错误,请重新输入第二个数:");
		    data2=scanner.nextInt();}
		    int max=data1>data2?data1:data2;//使用三目运算符求解输入数字的最大值
		    int min=data1>data2?data2:data1;//使用三目运算符求解输入数字的最小值
		    int j=0;
			//求最大公约数:定义i为两个数中最小的,通过循环递减,判断是否能被最大数整除,再嵌套if判断能否被最小数整除
		    for(int i=min;i<=max;i--){//for语句嵌套if语句的循环的使用
		    	if(max%i==0){
		    		j=i;
		    	    if(min%j==0){
				        System.out.println("两个数的最大公约数为:"+j);
				        break;
			    	}
			    }
		    }
			/*
			此处还可以使用另一种方法,即使用逻辑运算符&&,减少判断过程,上述方法是为了增强学者对for语句嵌套if语句的理解,方法如下:
			for(int i=min;i>0;i--){
		        if(data1%i==0&&data2%i==0){
			        System.out.println("最大公约数:"+i);
			        break;
		        } 
	        }
			*/
			
			
			//求最小公倍数:
			for(int a=1;;a++){
				int b=max*a;
				if(b%min==0){
					System.out.println("两个数的最小公倍数为:"+b);
					break;
				}
			}
			
		}
	}
}



你可能感兴趣的:(学习心得,Java,Java练习题,循环输入问题,求最大公约数和最小公倍数,实例)