【java程序设计第一弹】拿来练手—两个简单的程序实例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/tch3430493902/article/details/101829014

学习一门语言的最好方法是使用它。

程序要求说明

这两个程序可以用来巩固java语言基础,暂不涉及class的使用。
程序一:
验证java浮点数相除结果。讨论的除法对象有“有穷正数、有穷负数、+0、-0、+infinite、-infinite、NaN”,我们编程看看它们两两相除会产生什么结果?,

程序二:
找出4位数的所有吸血鬼数字。
解释一下吸血鬼数字:吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,这对数字各包含乘积一半位数的数字,数字选取后可任意排序。例如:1260=21乘以60、1827=21乘以87、2187=27乘以81,都是吸血鬼数字。

程序环境说明:notepad编写,cmd下编译和运行。

第一个程序

1. 编程思路

将七个值放到数组里,然后一个7*7循环遍历完成相除,打印结果即可。注意“有穷正数"和”有穷负数“可以选一个常数来代表,我这里选的是”6.66“和”-6.66“。
另外,为了程序效果,加入一个额外的label数组放置字符串标签,目的是为了打印”有穷正数"和“有穷负数”这两个字符串。

2.代码展示

public class doubleDivision
{
	public static void main(String[] args){
		//与value数组下标一一对应的字符串标签
		String[]label={"有穷正数","有穷负数","+0","-0","Infinity","-Infinity","NaN"};
		//这里我选用6.66代表"有穷正数",-6.66代表"有穷负数"
		double[]value={6.66,-6.66,+0.0,-0.0,Double.POSITIVE_INFINITY,Double.NEGATIVE_INFINITY,Double.NaN}; 
		
		//两个循环遍历任意两个数之间的除法
		for(int i=0;i<7;i++){
			for(int j=0;j<7;j++){
				if((int)(value[i]/value[j])==1)//由value数组的赋值来看,结果中的‘1’对应"有穷正数"。
					System.out.println(label[i]+" 除以 "+label[j]+" 的结果是: 有穷正数"); 
				else if((int)(value[i]/value[j])==-1)//由value数组的赋值来看,结果中的‘-1’对应"有穷负数"。
					System.out.println(label[i]+" 除以 "+label[j]+" 的结果是: 有穷负数");
				else//其他就不用转化了,直接上值。
				    System.out.println(label[i]+" 除以 "+label[j]+" 的结果是:  "+value[i]/value[j]);
			}
			System.out.println();
		}
	}
}	

3.运行效果

在这里插入图片描述

第二个程序

1. 编程思路

我比较笨,用的是笨办法。
基本思路是:
从1000到9999逐个检测。
每一次检测先提取出个、十、百、千四个位,然后这四个数共有A4 2=12种排列,对这12种排列方式所组成的两个两位数逐一检验,满足要求就打印并跳出内部循环,不满足要求则继续检验直到内部循环跑完。
然而我这里是直接4*3*2=24种排列方式,也就是有一半的冗余,真难过。

2.代码展示

public class vampireDigit
{
	/**********变量说明
	*digit:待检测数。
	*digits[4]:存放检测数的个、十、百、千位。
	*temp1:由digit得到的第一个两位数。
	*temp2:第二个两位数。
	*count:辅助变量,用于提取剩余的两个数字。
	*tempdigits:辅助变量,存放剩余的两个数字。
	*flag:指示待检测数是否为吸血鬼数字,初始置为0。
	*********************/
	public static void main(String[] args){
		int[] digits=new int[4];
		int[] tempdigits=new int[2];
		int temp1,temp2,count,flag;
		
		for(int digit=1000;digit<10000;digit++){
			//这里是提取检测数的四个位。
			digits[0]=digit/1000;
			digits[1]=(digit%1000)/100;
			digits[2]=(digit%100)/10;
			digits[3]=digit%10;
			
			//对于每一个待检测数,都应在检测逻辑开始之前置flag为0。
			flag=0;
			//两个循环,选出digits中的两个数字,且下标不能相等。
		    for(int i=0;i<4;i++){
				for(int j=0;j<4;j++){
					if(j!=i){
						temp1=10*digits[i]+digits[j];//计算temp1。
						
						count=0;
						for(int k=0;k<4;k++)//这里是提取剩余的两个数字,存放到tempdigits中。
                            if(k!=i&&k!=j)
							    tempdigits[count++]=digits[k];
						
						temp2=10*tempdigits[0]+tempdigits[1];//计算temp2。
						if(temp1*temp2==digit){
							System.out.println(digit);
							flag=1;
						}
						
						else{
							temp2=10*tempdigits[1]+tempdigits[0];//tempdigits的第一种排列不满足要求,检测第二种排列。
							if(temp1*temp2==digit){
							      System.out.println(digit);
							      flag=1;
						    }
						}
					}
					if(flag==1)//检测数为吸血鬼数字,跳出内部检测逻辑,检测下一个数。
						break;
				}
				if(flag==1)
					break;
			}
		}
	}
}

3.运行效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tch3430493902/article/details/101829014