⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listener.java

📁 很完善的计算器哦
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			c.getDisplay().setText(c.getStr2().toString() + numberChar);
			c.setStr2(c.getStr2().append(numberChar));
		}
	}	
	
	private void evaluateDoubleOperator()
	{	
		if(c.getDoubleOperatorFlag() != -1)
			return ;
		if(c.getRefreshFlag())
		{
			c.getStr1().setLength(0);
			c.getStr1().append(c.getDisplay().getText().toString());
			c.setRefreshFlag(false);
		}  	
		if(source == c.b[40])c.setDoubleOperatorFlag(1);
		else if(source == c.b[34])c.setDoubleOperatorFlag(2);
		else if(source == c.b[28])c.setDoubleOperatorFlag(3);
		else if(source == c.b[22])c.setDoubleOperatorFlag(4);
		else if(source == c.b[7])c.setDoubleOperatorFlag(5);
		else if(source == c.b[9])c.setDoubleOperatorFlag(6);
		else if(source == c.b[15])c.setDoubleOperatorFlag(7);
		else if(source == c.b[16])c.setDoubleOperatorFlag(8);
		else if(source == c.b[17])c.setDoubleOperatorFlag(9);
		if(c.getStr1().length() != 0)
			c.setNewFlag(true);			
	}
	
	private void doubleCalculate()	
	{
		if(c.getMemoryDisplayFlag())//先按数字,没按运算符就按下"MS",则覆盖原来输入的数字
		{
			c.getDisplay().setText(Double.toString(c.getMemoryValue()));
	    	if(!c.getNewFlag())
	    	{       		
	        	c.getStr1().setLength(0);
	        	c.getStr1().append(c.getMemoryValue());
	    	}
	    	else
	    	{
	    		c.getStr2().setLength(0);
	        	c.getStr2().append(c.getMemoryValue());
	    	}
			c.setMemoryDisplayFlag(false);
		}    			
		if(c.getDivZeroFlag())//除数为0的重新输入除数
			c.setDoubleOperatorFlag(4);		
		if(c.getModZeroFlag())//模0的重新输入
			c.setDoubleOperatorFlag(9);
		double x = Double.MIN_VALUE; 
		double y = Double.MIN_VALUE;
		double temp = Double.MIN_VALUE;
		int n = 0,count = 0;				
		try
		{			
			x = Double.parseDouble(c.getStr1().toString());
			y = Double.parseDouble(c.getStr2().toString());
		}
		catch(NumberFormatException e){}
		if(y == Double.MIN_VALUE)
			return ;
		switch(c.getDoubleOperatorFlag())
		{
	    	case 1:
	    		temp = x + y;
	    		showDoubleResult(temp);
	    		break;
	    	case 2:
	    		temp = x - y;
	    		showDoubleResult(temp);
	    		break;
	    	case 3:
	    		temp = x * y;
	    		showDoubleResult(temp);
	    		break;
	    	case 4:
	    		if((y == Double.MIN_VALUE && c.getStr2().length() != 0) || y == 0)
	    			{
	    		    	JOptionPane.showMessageDialog(null, "除数不能为0! 请重新输入除数!");
	    		    	c.getStr2().setLength(0);
	    		    	c.getDisplay().setText("");
	    		    	c.setDoubleOperatorFlag(4);
	    		    	c.setNewFlag(true);
	    		    	c.setPointFlag(true);
	    		    	c.setDivZeroFlag(true);
	    		    	return ;
	    			}
	    		else if(y != Double.MIN_VALUE)
	    		{
	    			temp = x / y;
		    		showDoubleResult(temp);
		    		c.setDivZeroFlag(false);
	    		}    		
	    		break;
	    	case 5:
	    		temp = Math.pow(x, y);
	    		showDoubleResult(temp);
	    		break;
	    	case 6:
	    		temp = Math.pow(x, 1/y);
	    		showDoubleResult(temp);
	    		break;	    	
	    	case 7:	    		
	    		n = (int)x;
	    		count = (int)y;
	    		temp = factorial(count, n);
	    		showDoubleResult(temp);
	    		break;	    	
	    	case 8:
	    		n = (int)x;
	    		count = (int)y;
	    		temp = factorial(count, n) / factorial(count, count);
	    		showDoubleResult(temp);	 
	    		break;
	    	case 9:
	    		if((y == Double.MIN_VALUE && c.getStr2().length() != 0) || y == 0)
	    		{
	    			JOptionPane.showMessageDialog(null, "不能对0求模! 请重新输入!");
    		    	c.getStr2().setLength(0);
    		    	c.getDisplay().setText("");
    		    	c.setDoubleOperatorFlag(9);
    		    	c.setNewFlag(true);
    		    	c.setPointFlag(true);
    		    	c.setModZeroFlag(true);
    		    	return ;
	    		}
	    		else if(y != Double.MIN_VALUE)
	    		{
	    			temp = Math.IEEEremainder(x, y);
		    		showDoubleResult(temp);
	    		}
	    		break;
		}				
	}
	
	private void showDoubleResult(double temp)
	{
		c.getDisplay().setText(Double.toString(temp));	    		
		c.getStr2().setLength(0);
		c.getStr1().setLength(0);
		c.getStr1().append(Double.toString(temp));			
		c.setDoubleOperatorFlag(-1);
		c.setPointFlag(true);
		c.setNewFlag(false);
		c.setChangeFlag(false);		
	}
	
	private double factorial(int count, int n)
	{
		double sum = 1;
		for(int i = n; count > 0; i--, count--)
			sum *= i;
		if(sum == 1)return 0;
		else return sum;
	}

	private void firstSingleCalculate()
	{		
		double singlem = Double.MIN_VALUE;
		try
		{			
		    	singlem = Double.parseDouble(c.getStr1().toString());	
		}
		catch(NumberFormatException e){}
		evaluateSingleOperator();		
		switch(c.getSingleOperatorFlag())
		{
	    	case 0:
	    		singlem = Math.sin(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 1:
	    		singlem = Math.cos(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 2:
	    		singlem = Math.tan(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 4:
	    		singlem = Math.toDegrees(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 5:
	    		singlem = Math.toRadians(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 6:
	    		singlem = Math.pow(singlem, 2);
	    		showFirstSingleResult(singlem);
	    		break;	    		
	    	case 8:
	    		singlem = Math.sqrt(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 10:
	    		singlem = Math.log10(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 11:
	    		singlem = Math.log(singlem);
	    		showFirstSingleResult(singlem);
	    		break;	    	
	    	case 13:
	    		singlem = Math.exp(singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 14:
	    		singlem = factorial((int)singlem, (int)singlem);
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 23:
	    		singlem = (int)singlem;
	    		showFirstSingleResult(singlem);
	    		break;
	    	case 29:
	    		singlem /= 100;
	    		showFirstSingleResult(singlem);
	    		break;	    		
	    	case 35:
	    		if(singlem == Double.MIN_VALUE)
    			{
    		    	JOptionPane.showMessageDialog(null, "分母不能为0! 请重新输入!");
    		        c.getStr1().setLength(0);
    		    	c.getDisplay().setText("");
    		    	return ;
    			}
	    		singlem = 1 / singlem;
	    		showSecondSingleResult(singlem);
	    		break;
		}		
	}
		
	private void secondSingleCalculate()
	{		
		double doublem = Double.MIN_VALUE;
		try
		{			
		    	doublem = Double.parseDouble(c.getStr2().toString());	
		}
		catch(NumberFormatException e){}
		evaluateSingleOperator();	
		if(doublem == Double.MIN_VALUE)
			return ;
		switch(c.getSingleOperatorFlag())
		{
	    	case 0:
	    		doublem = Math.sin(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 1:
	    		doublem = Math.cos(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 2:
	    		doublem = Math.tan(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 4:
	    		doublem = Math.toDegrees(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 5:
	    		doublem = Math.toRadians(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 6:
	    		doublem = Math.pow(doublem, 2);
	    		showSecondSingleResult(doublem);
	    		break;
	    	
	    	case 8:
	    		doublem = Math.sqrt(doublem);
	    		showSecondSingleResult(doublem);
	    		break;	 
	    	case 10:
	    		doublem = Math.log10(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 11:
	    		doublem = Math.log(doublem);
	    		showSecondSingleResult(doublem);
	    		break;	    		
	    	case 13:
	    		doublem = Math.exp(doublem);
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 14:
	    		doublem = factorial((int)doublem, (int)doublem);
	    		showSecondSingleResult(doublem);
	    		break;	
	    	case 23:
	    		doublem = (int)doublem;
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 29:
	    		doublem /= 100;
	    		showSecondSingleResult(doublem);
	    		break;
	    	case 35:
	    		if(doublem == Double.MIN_VALUE)
    			{
    		    	JOptionPane.showMessageDialog(null, "分母不能为0! 请重新输入!");
    		    	c.getStr1().setLength(0);
    		    	c.getDisplay().setText("");
    		    	return ;
    			}
	    		doublem = 1 / doublem;
	    		showSecondSingleResult(doublem);
	    		break;	    		
		}			
	}
	
	private void evaluateSingleOperator()
	{
		if(c.getSingleOperatorFlag() != -1)
			return ;
		if(source == c.b[0])c.setSingleOperatorFlag(0);
		else if(source == c.b[1])c.setSingleOperatorFlag(1);
		else if(source == c.b[2])c.setSingleOperatorFlag(2);
		else if(source == c.b[4])c.setSingleOperatorFlag(4);
		else if(source == c.b[5])c.setSingleOperatorFlag(5);
		else if(source == c.b[6])c.setSingleOperatorFlag(6);
		else if(source == c.b[8])c.setSingleOperatorFlag(8);
		else if(source == c.b[10])c.setSingleOperatorFlag(10);
		else if(source == c.b[11])c.setSingleOperatorFlag(11);
		else if(source == c.b[13])c.setSingleOperatorFlag(13);
		else if(source == c.b[14])c.setSingleOperatorFlag(14);
		else if(source == c.b[23])c.setSingleOperatorFlag(23);
		else if(source == c.b[29])c.setSingleOperatorFlag(29);
		else if(source == c.b[35])c.setSingleOperatorFlag(35);				
	}
	
	private void showFirstSingleResult(double m)
	{		
		c.getDisplay().setText(Double.toString(m));
		c.getStr1().setLength(0);
		c.getStr1().append(Double.toString(m));
		c.setSingleOperatorFlag(-1);
		c.setRefreshFlag(true);
		c.setChangeFlag(false);
	}
	
	private void showSecondSingleResult(double m)
	{
		c.getDisplay().setText(Double.toString(m));		
		if(c.getDoubleOperatorFlag() != -1)
		{
			c.getStr2().setLength(0);
			c.getStr2().append(Double.toString(m));
			c.setSingleOperatorFlag(-1);
		}			
		else 
			c.getStr1().append(Double.toString(m));		
		c.setChangeFlag(false);
	}
		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -