热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

java图形化界面实现简单混合运算计算器的示例代码

这篇文章主要介绍了java图形化界面实现简单混合运算计算器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

写了好几天了终于写完了这个四则运算计算器,总代码放在后面

截图如下:

首先是布局都比较简单,最上面的一个框是总的输出框,

第二个框是每次输入的数字显示在框内,

对于每一个按钮都增加监听器,

对于数字按钮:当长度大于8的 或者等号已经出现之后就不再处理按钮事件

if(e.getSource().equals(button1)) {
	s=numberText.getText();
    //数字长度大于8或者等号已出现
	if(s.length()>8 || equalbook == 1) {
				
	}
	else if(s.equals("0") || s.equals("")) {
	  numberText.setText("1");
	}else {
	  numberText.setText(s + "1");
	}	
}

其余的按钮都差不多。

当按钮为小数点时,长度大于7就不再处理,因为总的长度不能超过8,而小数点后面还要与数字,

同时标记小数点已经出现过,因为一个数中最多出现一个小数点

//当按钮为小数点时
if(e.getSource().equals(buttonpoint)) {
	s=numberText.getText();
	if(s.length()>7 || equalbook == 1) {
				
	}
	if(pointbook==0) {
		numberText.setText(s + ".");
		pointbook = 1;
	}
}

当按钮为加号时:

当数字输入框为空时不做处理

也有可能是最后一位是小数点,当然也不处理

当最上方的输出框的最后一位是右括号的时候,可以用加号

//当按钮为加号时
if(e.getSource().equals(buttonadd)) {
	s=numberText.getText();
	char ch1[] = s.toCharArray();
	int length1 = s.length() - 1;
	
	String S = expressText.getText();
	char ch2[] = S.toCharArray();
	int length2 = S.length() - 1;
	//当数字为空或为0或数字的最后一位是小数点时不作处理
	if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1] == '.')) {
		
	}else {
		numberText.setText("");
		expressText.setText(expressText.getText() + s + "+");
	}
	
}

+, -, *, /都差不多

当前面是运算符或者左括号的时候才能用左括号, 注意当框内无元素的时候也可以加左括号, 但是需要判断元素的个数是否大于0

if(e.getSource().equals(buttonleft)) {
	if(!numberText.getText().equals("0") && !numberText.getText().contentEquals("")) {
		expressText.setText(expressText.getText() + numberText.getText());
	}
	s=expressText.getText();
	char ch[] = s.toCharArray();
	int length = s.length() - 1;
	/*
	 * 当前面是运算符或者左括号的时候才能用左括号
	 * 注意当框内无元素的时候也可以加左括号
	 * 但是需要判断元素的个数是否大于0
	 */
	if(length == -1 || ch[length] == '+' || ch[length] == '-' || 
	  ch[length] == '*' || ch[length] == '/' || 
	  ch[length] == '(' || s.equals("")) {
		expressText.setText(expressText.getText() + '(');
		leftNum++;
	}
	
}

右括号就不一样

if(e.getSource().equals(buttonright)) {
	if(!numberText.getText().equals("0")) {
		expressText.setText(expressText.getText() + numberText.getText());
		numberText.setText("");
	}
	
	s=expressText.getText();
	char ch[] = s.toCharArray();
	int length = s.length() - 1;
	/*
	 * 只有前面是数字的时候且左括
	 * 号的数量大于右括号的数量的时候才能加右括号
	 */
	if(Character.isDigit(ch[length]) && leftNum > rightNum) {
		rightNum++;
		expressText.setText(expressText.getText() + ')');
	}
	
}

当按钮为 C时,清除所有内容并更新等号状态, 左括号数量, 右括号数量, 小数点状态,当一次计算完成之后,只有按C按钮才能进行新的计算。

当按钮为CE时,只清除数字框中的内容。

if(e.getSource().equals(buttonC)) {
  numberText.setText("0");
  expressText.setText("");
  leftNum = 0;
  rightNum = 0;
  pointbook = 0;
  equalbook = 0;
}

当按钮为等号时就把总输出框中显示的字符串取出进行计算,因为这个计算器是带括号的,所以这里我用了逆波兰表达式做的,需要把中缀表达式变为后缀表达式,然后进行计算,这一点我认为是最困难的一点,后面有时间我会再写关于 逆波兰表达式实现以及 逆波兰表达式的求值。

需要注意588行的代码,最后的两个括号的条件没有加上,导致花了周末一天在找bug......

else if((ch[j] == '*' || ch[j] == '/') &&
    (operater1=='+' || operater1=='-') || 
    (operater1=='(' || operater1 == ')')) {
	  Operater.push(ch[j]);
      break;
}

所有代码:

package cn.edu.shengda;
 
/*
 * author 201705050153 张宜强
 */
 
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
 
public class Calculator extends JFrame implements ActionListener {
	Calculator() {
		init();
	}
	public void init() {
	JFrame frame = new JFrame ("计算器");
    frame.setBackground(Color.yellow);
    frame.setLayout(null);
    
    //放置数字0
    button0 = new JButton("0");
    button0.setBounds(20, 200, 100, 25);
    frame.add(button0);
    
    //放置数字1
    button1 = new JButton("1");
    button1.setBounds(20, 170, 45, 25);
    frame.add(button1);
    
    //放置数字2
    button2 = new JButton("2");
    button2.setBounds(75, 170, 45, 25);
    frame.add(button2);
    
    //放置数字3
    button3 = new JButton("3");
    button3.setBounds(130, 170, 45, 25);
    frame.add(button3);
    
    //放置数字4
    button4 = new JButton("4");
    button4.setBounds(20, 140, 45, 25);
    frame.add(button4);
    
    //放置数字5
    button5 = new JButton("5");
    button5.setBounds(75, 140, 45, 25);
    frame.add(button5);
    
    //放置数字6
    button6 = new JButton("6");
    button6.setBounds(130, 140, 45, 25);
    frame.add(button6);
    
    //放置数字7
    button7 = new JButton("7");
    button7.setBounds(20, 110, 45, 25);
    frame.add(button7);
    
    //放置数字8
    button8 = new JButton("8");
    button8.setBounds(75, 110, 45, 25);
    frame.add(button8);
    
    //放置数字9
    button9 = new JButton("9");
    button9.setBounds(130, 110, 45, 25);
    frame.add(button9);
    
    //放置 .
    buttOnpoint= new JButton(".");
    buttonpoint.setBounds(130, 200, 45, 25);
    frame.add(buttonpoint);
    
    //放置 +
    buttOnadd= new JButton("+");
    buttonadd.setBounds(185, 200, 45, 25);
    frame.add(buttonadd);
    
    //放置 -
    buttOnreduce= new JButton("-");
    buttonreduce.setBounds(185, 170, 45, 25);
    frame.add(buttonreduce);
    
     //放置 *
    buttOnride= new JButton("*");
    buttonride.setBounds(185, 140, 45, 25);
    frame.add(buttonride);
       
    //放置 /
    buttOnexcept= new JButton("/");
    buttonexcept.setBounds(185, 110, 45, 25);
    frame.add(buttonexcept);
    
    //放置 =
    buttOnequal= new JButton("=");
    buttonequal.setBounds(240, 170, 55, 55);
    frame.add(buttonequal);
    
    //计算1/x
    buttOninvert= new JButton("1/x");
    buttoninvert.setBounds(240, 110, 55, 55);
    frame.add(buttoninvert);
    
    //放置左括号
    buttOnleft= new JButton("(");
    buttonleft.setBounds(20, 80, 45, 25);
    frame.add(buttonleft);
    
    //放置右括号
    buttOnright= new JButton(")");
    buttonright.setBounds(75, 80, 45, 25);
    frame.add(buttonright);
    
    //放置C 消除所有输入
    buttOnC= new JButton("C");
    buttonC.setBounds(130, 80, 75, 25);
    frame.add(buttonC);
    
    //放置CE 消除当前输入
    buttOnCE= new JButton("CE");
    buttonCE.setBounds(220, 80, 75, 25);
    frame.add(buttonCE);
    
    //添加表达式文本框
    expressText = new JTextField();
    expressText.setBounds(20, 10, 300, 30);
    frame.add(expressText);
    
    //添加数字文本框
    numberText = new JTextField("0");
    numberText.setBounds(20, 40, 300, 30);
    frame.add(numberText);
    
    //加监听器
    button0.addActionListener(this);
    button1.addActionListener(this);
    button2.addActionListener(this);
    button3.addActionListener(this);
    button4.addActionListener(this);
    button5.addActionListener(this);
    button6.addActionListener(this);
    button7.addActionListener(this);
    button8.addActionListener(this);
    button9.addActionListener(this);
    buttonpoint.addActionListener(this);
    buttonadd.addActionListener(this);
    buttonreduce.addActionListener(this);
    buttonride.addActionListener(this);
    buttonexcept.addActionListener(this);
    buttoninvert.addActionListener(this);
    buttonequal.addActionListener(this);
    buttonleft.addActionListener(this);
    buttonright.addActionListener(this);
    buttonC.addActionListener(this);
    buttonCE.addActionListener(this);
    numberText.addActionListener(this);
    expressText.addActionListener(this);
  
    frame.setBounds(0, 0, 350, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
	}
	
	JButton button0;
	JButton button1;
	JButton button2;
	JButton button3;
	JButton button4;
	JButton button5;
	JButton button6;
	JButton button7;
	JButton button8;
	JButton button9;
	JButton buttonpoint;
	JButton buttonadd;
	JButton buttonreduce;
	JButton buttonride;
	JButton buttonexcept;
	JButton buttonequal;
	JButton buttoninvert;
	JButton buttonleft;
	JButton buttonright;
	JButton buttonC;
	JButton buttonCE;
	JTextField numberText;
	JTextField expressText;
	
	
	String s = null;     
  //记录小数点是否出现,每次当前数字框中只能出现一个小数点
	int pointbook = 0;
  //记录等号是否出现,每次计算的总算式只能出现一个等号
   int equalbook = 0; 
   //记录左括号的数量
   int leftNum = 0;
   //记录有括号的数量
   int rightNum = 0;
   
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		       
		//当按钮为0时
		if(e.getSource().equals(button0)) {
			s=numberText.getText();
			if(s.length()>8) {
				
			}
			else if(s.equals("0") || equalbook == 1) {
				
			}else {
				numberText.setText(s + "0");
			}
		}
		
		//当按钮为1时
		if(e.getSource().equals(button1)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("1");
			}else {
				numberText.setText(s + "1");
			}	
		}
		
		//当按钮为2时
		if(e.getSource().equals(button2)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("2");
			}else {
				numberText.setText(s + "2");
			}	
		}
		
		//当按钮为3时
		if(e.getSource().equals(button3)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("3");
			}else {
				numberText.setText(s + "3");
			}	
		}
		
		//当按钮为4时
		if(e.getSource().equals(button4)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("4");
			}else {
				numberText.setText(s + "4");
			}	
		}
		
		//当按钮为5时
		if(e.getSource().equals(button5)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("5");
			}else {
				numberText.setText(s + "5");
			}	
		}
		
		//当按钮为6时
		if(e.getSource().equals(button6)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("6");
			}else {
				numberText.setText(s + "6");
			}	
		}
		
		//当按钮为7时
		if(e.getSource().equals(button7)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("7");
			}else {
				numberText.setText(s + "7");
			}	
		}
		
		//当按钮为3时
		if(e.getSource().equals(button8)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("8");
			}else {
				numberText.setText(s + "8");
			}	
		}
		
		//当按钮为9时
		if(e.getSource().equals(button9)) {
			s=numberText.getText();
			if(s.length()>8 || equalbook == 1) {
				
			}
			else if(s.equals("0") || s.equals("")) {
				numberText.setText("9");
			}else {
				numberText.setText(s + "9");
			}	
		}
		
		//当按钮为小数点时
		if(e.getSource().equals(buttonpoint)) {
			s=numberText.getText();
			if(s.length()>7 || equalbook == 1) {
				
			}
			if(pointbook==0) {
				numberText.setText(s + ".");
				pointbook = 1;
			}
		}
		
		//当按钮为加号时
		if(e.getSource().equals(buttonadd)) {
			s=numberText.getText();
			char ch1[] = s.toCharArray();
			int length1 = s.length() - 1;
			
			String S = expressText.getText();
			char ch2[] = S.toCharArray();
			int length2 = S.length() - 1;
			//当数字为空或为0或数字的最后一位是小数点时不作处理
			if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1] == '.')) {
				
			}else {
				numberText.setText("");
				expressText.setText(expressText.getText() + s + "+");
			}
			
		}
		
		//当按钮为减号时
		if(e.getSource().equals(buttonreduce)) {
			s=numberText.getText();
			char ch1[] = s.toCharArray();
			int length1 = s.length() - 1;
			
			String S = expressText.getText();
			char ch2[] = S.toCharArray();
			int length2 = S.length() - 1;
			if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1]=='.')) {
				
			}else {
				numberText.setText("");
				expressText.setText(expressText.getText() + s + "-");
			}
		}
		
		//当按钮为乘号时
		if(e.getSource().equals(buttonride)) {
			s=numberText.getText();
			char ch1[] = s.toCharArray();
			int length1 = s.length() - 1;
			
			String S = expressText.getText();
			char ch2[] = S.toCharArray();
			int length2 = S.length() - 1;
			if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1]=='.')) {
				
			}else {
				numberText.setText("");
				expressText.setText(expressText.getText() + s + "*");
			}
		}
		
		//当按钮为除号时
		if(e.getSource().equals(buttonexcept)) {
			s=numberText.getText();
			char ch1[] = s.toCharArray();
			int length1 = s.length() - 1;
			
			String S = expressText.getText();
			char ch2[] = S.toCharArray();
			int length2 = S.length() - 1;
			if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1]=='.')) {
				
			}else {
				numberText.setText("");
				expressText.setText(expressText.getText() + s + "/");
			}
		}
		
		//当按钮为左括号时
		if(e.getSource().equals(buttonleft)) {
			if(!numberText.getText().equals("0") && !numberText.getText().contentEquals("")) {
				expressText.setText(expressText.getText() + numberText.getText());
			}
			s=expressText.getText();
			char ch[] = s.toCharArray();
			int length = s.length() - 1;
			/*
			 * 当前面是运算符或者左括号的时候才能用左括号
			 * 注意当框内无元素的时候也可以加左括号
			 * 但是需要判断元素的个数是否大于0
			 */
			if(length == -1 || ch[length] == '+' || ch[length] == '-' || 
			  ch[length] == '*' || ch[length] == '/' || 
			  ch[length] == '(' || s.equals("")) {
				expressText.setText(expressText.getText() + '(');
				leftNum++;
			}
			
		}
		
		//当按钮为右括号时
		if(e.getSource().equals(buttonright)) {
			if(!numberText.getText().equals("0")) {
				expressText.setText(expressText.getText() + numberText.getText());
				numberText.setText("");
			}
			
			s=expressText.getText();
			char ch[] = s.toCharArray();
			int length = s.length() - 1;
			/*
			 * 只有前面是数字的时候且左括
			 * 号的数量大于右括号的数量的时候才能加右括号
			 */
			if(Character.isDigit(ch[length]) && leftNum > rightNum) {
				rightNum++;
				expressText.setText(expressText.getText() + ')');
			}
			
		}
		
		
		
		/*
    *当按钮为 C时
    *清除所有内容
    *并更新等号状态, 左括号数量, 右括号数量, 小数点状态
    *当一次计算完成之后,只有按CE按钮才能进行新的计算
    */
          
    if(e.getSource().equals(buttonC)) {
      numberText.setText("0");
      expressText.setText("");
      leftNum = 0;
      rightNum = 0;
      pointbook = 0;
      equalbook = 0;
    }
          
    /*
    *当按钮为CE时,
    *清除当前数字框中内容  
    *更新小数点状态
    */
    if(e.getSource().equals(buttonCE)) {
      numberText.setText("0");
      pointbook = 0;  
    }
    
    //当按钮为1/x时把输入框中的值变为倒数   
    if(e.getSource().equals(buttoninvert) ) {
    	s = numberText.getText();
    	//等于0的时候不进行操作
    	if(s.equals("0")) {
    		
    	}else {
    		double a = Double.parseDouble(numberText.getText());
	    	a = 1/a;
	    	numberText.setText(String.valueOf(a));
    	}
    	
    }
          
		//当按钮为等于号时
		if(e.getSource().equals(buttonequal)) {
			s=numberText.getText();
			if(!s.equals("0") && !s.equals("")) {
				expressText.setText(expressText.getText() + s);
			}
      //当等号没有出现时才能输入等号 
			if(equalbook == 0) { 
        numberText.setText("");
        //补全右括号
        for(int i = 0; i  Operater = new Stack();
		    
		    s = expressText.getText();
		    char ch[] = s.toCharArray();
		    int length = ch.length;
		    for(int j = 0; j ='0' && ch[j] <= '9') {
		    		double Number = ch[j] - '0';
		    		//继续往后遍历,直到不是数字和小数点
		    		//记录小数点是否出现
		    		int point = 0;
		    		//记录小数点出现后的位数
		    		int bit = 1;
		    		if(j==length-1) {
		    			ansString[Size++] = String.valueOf(Number);
		    		}
		    		for(j++; j'9') && ch[j]!='.') {
		    				j--;
		    				ansString[Size++] = String.valueOf(Number);
		    				break;
		    			}
		    			if(ch[j] == '.') {
		    				point = 1;
		    				continue;
		    			}
		    			if(ch[j] >= '0' && ch[j] <= '9') {
		    				/*
		    				 * 当小数点没有出现时和没出现时要分开讨论
		    				 */
		    				if(point == 0) {
		    					Number = Number * 10 + (ch[j] - '0');
		    				} else {
		    					Number = Number + Math.pow(10, -bit) * (ch[j]-'0');
		    					bit++;
		    				} 
		    			}
		    		}
		    	} else { //考虑运算符
		    		if(ch[j] =='(') {
		    			Operater.push('(');
		    		} else if(ch[j]==')') {
		    			while(!Operater.peek().equals('(')) {
		    				ansString[Size++] = String.valueOf(Operater.peek());
		    				Operater.pop();
		    			}
		    			Operater.pop();
		    		} else {
		    			if(Operater.empty()) {
		    				Operater.push(ch[j]);
		    			}
		    			else {
		    				//System.out.println("!" + ch[j]);
		    			
		    				while(true) {
		    					
		    					if(Operater.empty()) {
				    				Operater.push(ch[j]);
				    				break;
				    			}
                                char operater1 = Operater.peek();
		    					if((ch[j] == '*' || ch[j] == '/') &&
		    					  (operater1=='+' || operater1=='-') || (operater1=='(' || operater1 == ')')) {
		    						Operater.push(ch[j]);
		    						break;
		    					}
		    					else {
		    						ansString[Size++] = String.valueOf(Operater.peek());
		    						Operater.pop();
		    					}
		    				}
		    			}
		    		}
		    	}
		    }//System.out.println(s);
		    while(!Operater.empty()) {
		    	ansString[Size++] = String.valueOf(Operater.peek());
		    	Operater.pop();
		    }
//		    for(int i=0; i Last = new Stack();
		    for(int i=0; i='0' && ch2[0]<='9') {
		    		Last.push(Double.parseDouble(s1));
		    	}
		    	else {
		    		double num1 = Last.pop();
		    		double num2 = Last.pop();
		    		double num3 = 0;
		    		if(ch2[0]=='+') 
		    			num3 = num2 + num1;
		    		else if(ch2[0]=='-')
		    			num3 = num2 - num1;
		    		else if(ch2[0]=='*')
		    			num3 = num2 * num1;
		    		else if(ch2[0]=='/')
		    			num3 = num2 / num1;
		    		
		    		Last.push(num3);
		    	}
		    }
		    expressText.setText(expressText.getText() + "=" + Last.pop());
		    equalbook = 1;
  
      }	
     }
		
	} 
	
  public static void main(String []args) {
  	Calculator calculator = new Calculator();
  }
	 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了在git中如何对指定的commit id打标签,并解决了忘记打标签的问题。通过查找历史提交的commit id,可以在任意时间点打上标签。同时,还介绍了git中的一些常用命令和操作。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
author-avatar
davychen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有