ArrayList al=null 和ArrayList al=new ArrayList()

ArrayList al=null 和ArrayList al=new ArrayList()有什么区别

7个回答

ArrayList al=null 和ArrayList al=new ArrayList()有什么区别

ArrayList al=null ;//这个就是直接给个null值给ArrayList类型的对象,没有分配内存空间
ArrayList al=new ArrayList();//new了,就是实例化ArrayList对象了,分配了内存空间。实例化之后就可以使用ArrayList对象的其它方法。

ArrayList al=new ArrayList();相当于ArrayList al;al = new ArrayList();
而ArrayList al;相当于ArrayList al = null;

这样比较吧,你现在要去盛水,new出来表示你有个空水杯,你可以去盛水,但现在水杯里没水,null代表你连水杯都没有,现在去盛水是会出问题的,比如空指针异常。

用面向对象来说,就是ArrayList al=null 是你在创建一个对象a1的时候给他一个引用,但是这个引用是空的,就是给了一个以后可以指向其他对对象的引用(相当于指针)
而new ArrayList()的new是开辟一块内存空间的意思,ArrayList()是调用构造函数创建出的一个对象或实例.也就是ArrayList al;al = new ArrayList();是创建了一个具体存在的对象或实例

ArrayList al=null:表示没有创建ArrayList的实例,将不能够被引用;
ArrayList al=new ArrayList();表示创建了一个ArrayList对象,可以
通过al对象进行操作ArrayList中的方法

我赞同极简的说法,前者没分配内存空间,后者分配内存空间

从堆和栈的角度解释的话:ArrayList al = null ,就是在栈上放了一个名称,叫 al,并把它贴上了一个标签:它只能指向堆中的一个 ArrayList 类(其实还包括 ArrayList 的派生类),你把它赋值为 null,为空的,代表它还没有指向一个堆中的哪个实例,仅仅有个标签而已。当你再写一句: al = new ArrayList(),意思就是你在堆中建了一个实例,并让这个 al 指向它。
ArrayList al = null;al = new ArrayList(); 和 ArrayList al =new ArrayList()等价。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
代码能运行,但添加信息时显示错误,不知道哪错了,求大佬帮忙改正正确的?
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; class Note implements Serializable{ public String name; public String address; public String telephone; public Note(){} } public class AddressListSystem extends JFrame{ JLabel title=new JLabel("我的通讯录管理"); JLabel name=new JLabel("姓名"); JLabel address=new JLabel("地址"); JLabel telephone=new JLabel("电话"); JTextField jtxtname=new JTextField(); JTextField jtxtaddr=new JTextField(); JTextField jtxttel=new JTextField(); Font font=new Font("TimersRoman",Font.BOLD,30); JButton jbtadd=new JButton("添加"); JButton jbtfind=new JButton("查找"); JButton jbtclear=new JButton("清空"); JButton jbtexit=new JButton("退出"); ArrayList al=new ArrayList(); AddressListSystem(String s){ super(s); Container cp=getContentPane(); cp.setBackground(Color.PINK); cp.setLayout(null); title.setFont(font); title.setForeground(Color.BLUE); title.setBounds(130,20,300,60); name.setBounds(50,150,75,25); address.setBounds(50,220,75,25); telephone.setBounds(50,310,75,25); jtxtname.setBounds(150,150,100,25); jtxtaddr.setBounds(150,220,100,25); jtxttel.setBounds(150,310,200,25); jbtadd.setBounds(50,400,75,25); jbtfind.setBounds(150,400,75,25); jbtclear.setBounds(250,400,75,25); jbtexit.setBounds(350,400,75,25); jbtadd.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(jtxtname.getText().equalsIgnoreCase("")){ JOptionPane.showMessageDialog(null,"无法添加名字为空的记录","错误提示",JOptionPane.INFORMATION_MESSAGE); jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); return; } Note note=new Note(); note.name=jtxtname.getText(); note.address=jtxtaddr.getText(); note.telephone=jtxttel.getText(); try{ ObjectInputStream in=new ObjectInputStream(new FileInputStream("note.dat")); al=(ArrayList)in.readObject(); in.close(); }catch(Exception ex){ System.out.println( "添加信息时文件输入有误哦"); } try{ ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("note.dat",true)); Note temp=new Note(); int i; for(i=0;i<al.size();i++){ temp=(Note)al.get(i); if(temp.name.equalsIgnoreCase(jtxtname.getText())) break; } if(!al.isEmpty()&&i!=al.size()){ JOptionPane.showMessageDialog(null,"已经存在此记录","错误提示",JOptionPane.INFORMATION_MESSAGE); } else{ al.add(note); out.writeObject(al); } out.close(); }catch(Exception ex){ System.out.println("添加信息时文件输出有误哦"); } jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); } }); jbtfind.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ ObjectInputStream in=new ObjectInputStream(new FileInputStream("note.dat")); al=(ArrayList)in.readObject(); in.close(); }catch(Exception ex){ System.out.println("查询时文件打开有误哦"); } Note temp=new Note(); int i; for(i=0;i<al.size();i++){ temp=(Note)al.get(i); if(temp.name.equalsIgnoreCase(jtxtname.getText())) break; } if(!al.isEmpty()&&i!=al.size()){ jtxtaddr.setText(temp.address); jtxttel.setText(temp.telephone); } else{ jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); JOptionPane.showMessageDialog(null,"无此记录哦","温馨提示",JOptionPane.INFORMATION_MESSAGE); } } }); jbtclear.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("note.dat")); al.clear(); out.close(); }catch(Exception ex){ System.out.println("清除文件时有误哦"); } jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); } }); jbtexit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ System.exit(1); }catch(Exception ex){ System.out.println("退出系统时出错啦"); } } }); cp.add(title); cp.add(name); cp.add(address); cp.add(telephone); cp.add(jtxtname); cp.add(jtxtaddr); cp.add(jtxttel); cp.add(jbtadd); cp.add(jbtfind); cp.add(jbtclear); cp.add(jbtexit); } public static void main(String[] args) { AddressListSystem als=new AddressListSystem("我的通讯录管理系统"); als.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e){ System.exit(0); } }); als.setSize(500,550); als.setVisible(true); } }
java只能文件中读取第一个对象,先将对象存Arraylist再输出到控制台输出的时不能多个输出?怎么改?
package cn.edu.hyit.file; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; public class Demo_5 { static ArrayList<Student> al=new ArrayList<Student>(); public static void main(String[] args) { write(); read(); } public static Student read(){ FileInputStream fis = null; Student temp = null; try { fis = new FileInputStream("stu.txt"); ObjectInputStream ois = new ObjectInputStream(fis); //Student stu = (Student)ois.readObject(); //while(fis.available()>0){ al = (ArrayList<Student>)ois.readObject(); //} for(Student s:al){ System.out.println("学生的名字:"+s.getName()+"\t"+"学生的年龄是"+s.getAge()); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally{ if(fis!=null){ try{ fis.close(); }catch(IOException e){ e.printStackTrace(); } } } return temp; } public static Student write(){ FileOutputStream fos = null; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); try{ fos = new FileOutputStream("stu.txt",true); ObjectOutputStream obs = new ObjectOutputStream(fos); System.out.println("请输入名字"); String name=br.readLine(); System.out.println("请输入年龄"); String s=br.readLine(); int age=Integer.parseInt(s); Student stu = new Student(name,age); al.add(stu); obs.writeObject(al); obs.flush(); obs.close(); }catch(IOException e){ e.printStackTrace(); } return null; } } class Student implements Serializable{ //private static final long serialVersionUID = 1L; private String name; private int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
控制台录入将内容添加到集合中,但是在集合遍历的时候变成了死循环,代码在下面,求指点迷津
ArrayList<String> al = new ArrayList<String>(); Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String st = sc.next(); if("quit".equals(st)){ break; } al.add(st); } Iterator<String> it = al.iterator(); System.out.println(al.size()); String c = null; while(it.hasNext()) { //用debug测试这里一直为true ,我猜想是add方法出了问题 牛人求指点 c = c+it.hasNext(); } System.out.println(c); // } }
关于list集合报错的问题
ChangeOrderControl aChangeOrderControl = new ChangeOrderControl(); ChangeOrderModel aChangeOrderModel = (ChangeOrderModel)aChangeOrderControl.getModel(ID); Map beans = new HashMap(); if(aChangeOrderModel!=null){ //获得子表信息 ChangeOrderBillControl aChangeOrderBillControl = new ChangeOrderBillControl(); String strSQL = "select * from t_moc_ChangeOrderBill where PID = '" + ID + "'"; ArrayList al = aChangeOrderBillControl.getItemBySQL(strSQL); ArrayList list=new ArrayList(); for(int i=0;i<al.size();i++){ ChangeOrderBillModel m = (ChangeOrderBillModel)al.get(i); Map map=new HashMap(); map.put("NODENAME",m.getNODENAME()); map.put("BGPRICE",PublicTools.format(m.getBGPRICE(),3)); map.put("BGNUMBER",m.getBGNUMBER()); map.put("BGMONEY",PublicTools.format(m.getBGMONEY(),3)); list.add(map); } beans.put("list",list); beans.put("BSDW",aChangeOrderModel.getBSDW()); } ![图片说明](https://img-ask.csdn.net/upload/201605/28/1464401777_923660.png)
求解这段代码是什么意思,表示看不懂,求大神讲解,不知道其中是怎么实现增删改查的
class Clerk { private String id; private String name; private String duty; private double salary; public Clerk(String id, String name) { this.id = id; this.name = name; } public void addClerk() { // TODO Auto-generated method stub } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDuty() { return duty; } public void setDuty(String duty) { this.duty = duty; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } } class ClerkManage { ArrayList<Clerk>al = null; public ClerkManage() { ArrayList<Clerk> al = new ArrayList<Clerk>(); } public void addClerk(Clerk clerk){ al.add(clerk); } // if not found return null public Clerk searchClerk(String id){ Clerk clerk = null; for(Clerk clerkTmp : al) { if(id.equals(clerkTmp.getId())) { clerk = clerkTmp; break; } } return clerk; } public void setSalaryOfClerk(String id, double salary){ Clerk clerk = searchClerk(id); if(clerk != null) { clerk.setSalary(salary); } else { System.out.println("找不到员工编号:" + id); } } public void deleteClerk(String id){ for(int i = 0, size = al.size(); i < size; i++) { if(id.equals(al.get(i).getId())) { al.remove(i); break; } } } }
请大神帮我看看这个java程序怎么运行不了,帮我调一调这个程序,谢谢
是这个错误Exception in thread "main" java.lang.Error: Unresolved compilation problem: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; public class javacode { public static void main(String[] args) throws IOException { ArrayList<Clerk> al = new ArrayList<Clerk>(); Clerk c1 = new Clerk("宋江", 50, 1000); al.add(c1);//添加到尾部 Clerk c3 = new Clerk("吴用", 45, 2000); al.add(c3);//添加到尾部 al.add(c3);//可以加相同的对象 System.out.println("al.lenght=" + al.size()); Clerk c2 = new Clerk("武松", 30, 10004.4f); al.add(0, c2);//加到指定位置,原来的会往看推 al.remove(3);//删除相应的对象 //System.out.println(al.get(1).getName()); for(Clerk c : al){ //System.out.println(c.getName()); } } ClerkManage cm=new ClerkManage(); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); while(true){ System.out.println("——————欢迎使用职员管理系统————————"); System.out.println("请选择你要进行的操作:"); System.out.println("1.添加一个职员:"); System.out.println("2.查找一个职员:"); System.out.println("3.修改一个职员的工资:"); System.out.println("4.删除一个职员:"); System.out.println("5.退出!"); String operType=br.readLine(); if(operType.equals("1")){ System.out.println("请输入职员的编号:"); String no=br.readLine(); System.out.println("请输入职员的姓名:"); String name=br.readLine(); Clerk ck=new Clerk(no,name); //添加职员 cm.addClerk(ck); } else if(operType.equals("5")){ System.exit(0); } }//while } class Clerk { //定义4个私有的属性 private String id; private String name; private String duty; private double salary; //带参数的构造方法 public Clerk(String id, String name) { this.id = id; this.name = name; } //为4个私有属性提供公开的取值和赋值方法,也是就算get和set方法 public Clerk(String string, int i, float f) { // TODO Auto-generated constructor stub } public void addClerk() { // TODO Auto-generated method stub } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDuty() { return duty; } public void setDuty(String duty) { this.duty = duty; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } } class ClerkManage { ArrayList<Clerk>al = null;//声明了一个变量名为 al 且为空的ArrayList集合 //无参构造方法 public ClerkManage() { //实例化一个ArrayList ArrayList<Clerk> al = new ArrayList<Clerk>(); } //添加方法,把传入的Clerk添加到集合中 public void addClerk(Clerk clerk){ al.add(clerk); } // if not found return null // 根据传入的id在ArrayList中查找Clerk public Clerk searchClerk(String id){ Clerk clerk = null;//用来装找到的Clerk for(Clerk clerkTmp : al) { //判断传入的id 是否在集合里面找的到 if(id.equals(clerkTmp.getId())) { clerk = clerkTmp; //跳出循环 break; } }//返回结果 return clerk; } //给员工设置工资的方法 //id 员工id // salary 要设置的工资多少 public void setSalaryOfClerk(String id, double salary){ //查找员工根据id 并返回一个类 Clerk clerk = searchClerk(id); //判断是否有该员工 if(clerk != null) { //如果有 设置工资 clerk.setSalary(salary); } else { //没找到 提示用户 System.out.println("找不到员工编号:" + id); } } //删除员工 根据id public void deleteClerk(String id){ //循环遍历al for(int i = 0, size = al.size(); i < size; i++) { //判断是有存在该id if(id.equals(al.get(i).getId())) { //如果存在该 删除该员工 al.remove(i); al.remove(i); //跳出循环 break break; } } } } }
java怎么调用MySQL存储过程?
![图片说明](https://img-ask.csdn.net/upload/201605/30/1464607016_994959.png)Java调用存储过程报错,存储过程有两个int型参数,在数据库里存储过程可以运行,运行结果如上图:java.sql.SQLException: Parameter index out of range (0 < 1 ). 代码如下,不知道怎么改,求网友协助 public ArrayList getzhdltj(String Time,String Dzbm) { //定义一些变量 ResultSet rs=null; Connection ct=null; PreparedStatement csmt=null; Statement ps=null; ArrayList al = new ArrayList(); try { ct=(new ConnectDB()).ConnDB(); int Dzbmint=Integer.parseInt(Dzbm); int Timeint=Integer.parseInt(Time); //ct.setAutoCommit(false); csmt=ct.prepareCall("{PRO_综合电力统计(IN_YEAR,IN_STATIONID)}"); csmt.setInt(0, Timeint); csmt.setInt(1, Dzbmint); csmt.execute(); ct.commit(); rs=csmt.executeQuery(); while(rs.next()) { Wnbqgl nbqgl=new Wnbqgl(); //nbqgl.setMaxdl(rs.getDouble(2)); /*月计划发电量*/ nbqgl.setYjfdl(rs.getDouble(1)); nbqgl.setEjfdl(rs.getDouble(2)); nbqgl.setSjfdl(rs.getDouble(3)); nbqgl.setSijfdl(rs.getDouble(4)); nbqgl.setWjfdl(rs.getDouble(5)); nbqgl.setLjfdl(rs.getDouble(6)); nbqgl.setQjfdl(rs.getDouble(7)); nbqgl.setBjfdl(rs.getDouble(8)); nbqgl.setJjfdl(rs.getDouble(9)); nbqgl.setShijfdl(rs.getDouble(10)); nbqgl.setSyjfdl(rs.getDouble(11)); nbqgl.setSejfdl(rs.getDouble(12));
接手别人的JavaEE项目之前运行正确,添加访问数据库后报tomcat异常
我重装了tomcat,重新导入了项目又再将我修改的添加进去,运行时报tomcat异常,所以应当不是环境问题 报错截图:![图片说明](https://img-ask.csdn.net/upload/201507/18/1437188120_508314.png) 访问数据库按照MVC形式,数据显示在getData.jsp中,servlet为GetDServlet.java, 实现从数据库中取数据的类为getD.java,数据表对应的类为inemo_bean, 下面贴代码: package Servlet; import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; //import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.Bean.inemo_bean; /** * Servlet implementation class GetDataServlet */ @WebServlet("/GetDataServlet") public class GetDServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public GetDServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); GetD gd = new GetD(); ArrayList<inemo_bean> al = gd.getArrayList(); request.setAttribute("al", al); System.out.println("GetDataServlet.doGet()"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); System.out.println("GetDataServlet.doPost()"); } } package Servlet; import java.sql.SQLException; import java.util.ArrayList; import com.Bean.inemo_bean; import com.mysql.jdbc.Connection; import com.mysql.jdbc.ResultSet; import com.mysql.jdbc.Statement; import com.scut.older.db.DB; /** * Servlet implementation class getData * */ public class GetD { private Statement st = null; private ResultSet rs = null; private Connection ct = null; public ArrayList<inemo_bean> getArrayList() { ArrayList<inemo_bean> al = new ArrayList<inemo_bean>(); String sql = "select * from sensor_data_inemo"; ct = (Connection) new DB().getConn(); st = (Statement) new DB().getStatement(ct); rs = (ResultSet) new DB().getResultSet(st, sql); try { while (rs.next()) { inemo_bean ib = new inemo_bean(); ib.setId_sensor_data_iNEMO(rs.getInt("id_sensor_data_iNEMO")); ib.setDatetime(rs.getInt("datetime")); ib.setAccx(rs.getInt("accx")); ib.setAccy(rs.getInt("accy")); ib.setAccz(rs.getInt("accz")); ib.setGyrox(rs.getInt("gyrox")); ib.setGyroy(rs.getInt("gyroy")); ib.setGyroz(rs.getInt("gyroz")); ib.setMagx(rs.getInt("magx")); ib.setMagy(rs.getInt("magy")); ib.setMagz(rs.getInt("magz")); ib.setPress(rs.getInt("press")); ib.setTemp(rs.getInt("press")); ib.setAltitude(rs.getInt("altitude")); ib.setLongitude(rs.getInt("longitude")); ib.setLatitude(rs.getInt("latitude")); al.add(ib); } } catch (SQLException e) { e.printStackTrace(); System.out.println("getData.getArrayList()"); System.err.println("getdata()出错"); } finally { closeSource(); } return al; } private void closeSource() { try { if (rs != null) rs.close(); if (st != null) st.close(); if (ct != null) ct.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public GetD() { super(); } } <%@page import="com.Bean.inemo_bean"%> <%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Data from inemo</title> </head> <body> <h1>Get Data From DataBase -sensor_inemo_data</h1> <br> <a href="homepage.jsp"></a> <% ArrayList<inemo_bean> al = (ArrayList)request.getAttribute("al"); %> <table border="1" align="center"> <tr> <td>id_sensor_data_iNEMO</td> <td>datetime</td> <td>accx</td> <td>accy</td> <td>accz</td> <td>gyrox</td> <td>gyroy</td> <td>gyroz</td> <td>magx</td> <td>magy</td> <td>magz</td> <td>press</td> <td>temp</td> <td>altitude</td> <td>longitude</td> <td>latitude</td> </tr> <% for (int i = 1; i <= al.size(); i++) { inemo_bean inemo = al.get(i); %> <tr> <td><%=inemo.getId_sensor_data_iNEMO()%></td> <td><%=inemo.getDatetime()%></td> <td><%=inemo.getAccx()%></td> <td><%=inemo.getAccy()%></td> <td><%=inemo.getAccz()%></td> <td><%=inemo.getGyrox()%></td> <td><%=inemo.getGyroy()%></td> <td><%=inemo.getGyroz()%></td> <td><%=inemo.getMagx()%></td> <td><%=inemo.getMagy()%></td> <td><%=inemo.getMagz()%></td> <td><%=inemo.getPress()%></td> <td><%=inemo.getTemp()%></td> <td><%=inemo.getAltitude()%></td> <td><%=inemo.getLongitude()%></td> <td><%=inemo.getLatitude()%></td> </tr> <% } %> </table> </body> </html>
怎么用java输出控制word循环
package word; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.poi.POIXMLDocument; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; /** * @author wei.jia * * @Created on 2014-10-28 * */ public class ReplaceVarInWordImpl { // 返回Docx中需要替换的特殊字符,没有重复项 // 推荐传入正则表达式参数"\\$\\{[^{}]+\\}" public ArrayList<String> getReplaceElementsInWord(String filePath, String regex) { String[] p = filePath.split("\\."); if (p.length > 0) {// 判断文件有无扩展名 // 比较文件扩展名 if (p[p.length - 1].equalsIgnoreCase("doc")) { ArrayList<String> al = new ArrayList<String>(); File file = new File(filePath); HWPFDocument document = null; try { InputStream is = new FileInputStream(file); document = new HWPFDocument(is); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Range range = document.getRange(); String rangeText = range.text(); CharSequence cs = rangeText.subSequence(0, rangeText.length()); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(cs); int startPosition = 0; while (matcher.find(startPosition)) { if (!al.contains(matcher.group())) { al.add(matcher.group()); } startPosition = matcher.end(); } return al; } else if (p[p.length - 1].equalsIgnoreCase("docx")) { ArrayList<String> al = new ArrayList<String>(); XWPFDocument document = null; try { document = new XWPFDocument( POIXMLDocument.openPackage(filePath)); } catch (IOException e) { e.printStackTrace(); } // 遍历段落 Iterator<XWPFParagraph> itPara = document .getParagraphsIterator(); while (itPara.hasNext()) { XWPFParagraph paragraph = (XWPFParagraph) itPara.next(); String paragraphString = paragraph.getText(); CharSequence cs = paragraphString.subSequence(0, paragraphString.length()); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(cs); int startPosition = 0; while (matcher.find(startPosition)) { if (!al.contains(matcher.group())) { al.add(matcher.group()); } startPosition = matcher.end(); } } // 遍历表 Iterator<XWPFTable> itTable = document.getTablesIterator(); while (itTable.hasNext()) { XWPFTable table = (XWPFTable) itTable.next(); int rcount = table.getNumberOfRows(); for (int i = 0; i < rcount; i++) { XWPFTableRow row = table.getRow(i); List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { String cellText = ""; cellText = cell.getText(); CharSequence cs = cellText.subSequence(0, cellText.length()); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(cs); int startPosition = 0; while (matcher.find(startPosition)) { if (!al.contains(matcher.group())) { al.add(matcher.group()); } startPosition = matcher.end(); } } } } return al; } else { return null; } } else { return null; } } // 替换word中需要替换的特殊字符 public static boolean replaceAndGenerateWord(String srcPath, String destPath, Map<String, String> map) { String[] sp = srcPath.split("\\."); String[] dp = destPath.split("\\."); if ((sp.length > 0) && (dp.length > 0)) {// 判断文件有无扩展名 // 比较文件扩展名 if (sp[sp.length - 1].equalsIgnoreCase("docx")) { try { XWPFDocument document = new XWPFDocument( POIXMLDocument.openPackage(srcPath)); // 替换段落中的指定文字 Iterator<XWPFParagraph> itPara = document .getParagraphsIterator(); while (itPara.hasNext()) { XWPFParagraph paragraph = (XWPFParagraph) itPara.next(); List<XWPFRun> runs = paragraph.getRuns(); for (int i = 0; i < runs.size(); i++) { String oneparaString = runs.get(i).getText( runs.get(i).getTextPosition()); for (Map.Entry<String, String> entry : map .entrySet()) { oneparaString = oneparaString.replace( entry.getKey(), entry.getValue()); } runs.get(i).setText(oneparaString, 0); } } // 替换表格中的指定文字 Iterator<XWPFTable> itTable = document.getTablesIterator(); while (itTable.hasNext()) { XWPFTable table = (XWPFTable) itTable.next(); int rcount = table.getNumberOfRows(); for (int i = 0; i < rcount; i++) { XWPFTableRow row = table.getRow(i); List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { String cellTextString = cell.getText(); for (Entry<String, String> e : map.entrySet()) { if (cellTextString.contains(e.getKey())) cellTextString = cellTextString .replace(e.getKey(), e.getValue()); } cell.removeParagraph(0); cell.setText(cellTextString); } } } FileOutputStream outStream = null; outStream = new FileOutputStream(destPath); document.write(outStream); outStream.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } else // doc只能生成doc,如果生成docx会出错 if ((sp[sp.length - 1].equalsIgnoreCase("doc")) && (dp[dp.length - 1].equalsIgnoreCase("doc"))) { HWPFDocument document = null; try { document = new HWPFDocument(new FileInputStream(srcPath)); Range range = document.getRange(); for (Map.Entry<String, String> entry : map.entrySet()) { range.replaceText(entry.getKey(), entry.getValue()); } FileOutputStream outStream = null; outStream = new FileOutputStream(destPath); document.write(outStream); outStream.close(); return true; } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } } else { return false; } } else { return false; } } public static void main(String[] args) { // TODO Auto-generated method stub String filepathString = "e:/Doc1.docx"; String destpathString = "e:/Doc5.docx"; Map<String, String> map = new HashMap<String, String>(); map.put("${Wenyang}", "温飏"); System.out.println(replaceAndGenerateWord(filepathString, destpathString,map)); } } 上面是代码。 例如:班级学生人数不同要根据人数停止输出内容
java问题新手求帮助,运行有问题
我正在学习java,自己写了一个程序,运行时选择第七点出错,不知道是不是ShowHTD类有错还是怎么回事,求大神帮忙解决,代码和报错信息附上, 代码: /* * 功能:员工管理系统 * 时间:2013.09.05 */ package pack1; import java.util.*; import java.io.*; public class Employeemanage { /** * @param args */ public static void main(String[] args)throws Exception { // TODO Auto-generated method stub //创建EmpMamnage对象 EmpManage em = new EmpManage(); //做出菜单 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println("请选择你需要进行的操作:"); System.out.println("1.加入新员工"); System.out.println("2.显示员工信息"); System.out.println("3.修改员工工资"); System.out.println("4.删除员工信息"); System.out.println("5.退出系统"); System.out.println("6.显示公司员工名单"); System.out.println("7.按工资高低显示员工信息"); System.out.println("8,计算员工的平均工资"); System.out.println("9.计算员工的总工资"); String operaType = br.readLine(); if(operaType.equals("1")) { System.out.println("请输入员工入职编号:"); String no = br.readLine(); System.out.println("请输入员工姓名:"); String name =br.readLine(); System.out.println("请输入员工入职薪金:"); String s_sal = br.readLine(); float sal = Float.parseFloat(s_sal); Emp emp = new Emp(no,name,sal); em.AddEmp(emp); } else if(operaType.equals("2")) { System.out.println("请输入员工的在职编号:"); String empno = br.readLine(); em.ShowEmp(empno); } else if(operaType.equals("3")) { System.out.println("请输入员工的在职编号:"); String empno = br.readLine(); System.out.println("请输入给员工新定的工资:"); float sal = Float.parseFloat(br.readLine()); em.ChangeEmp(empno, sal); } else if(operaType.equals("4")) { System.out.println("请输入离职员工在职时的编号:"); String empno = br.readLine(); em.DelectEmp(empno); } else if(operaType.equals("5")) { System.exit(0); System.out.println("已安全退出系统!"+"\n"+"欢迎下次使用!"); } else if(operaType.equals("6")) { em.ShowAll(); } else if(operaType.equals("7")) { em.ShowHTD(); } else if(operaType.equals("8")) { System.out.println("员工平均工资为:"+em.Avesal()); } else if(operaType.equals("9")) { System.out.println("员工的总工资为:"+em.Sumsal()); } } } } //雇员管理 class EmpManage { private ArrayList al = null; //构造函数 public EmpManage() { al = new ArrayList(); } //加入员工 public void AddEmp(Emp emp) { al.add(emp); } //显示员工信息 public void ShowEmp(String empno) { //遍历查询 for(int i=0;i<al.size();i++) { //取出对象 Emp emp = (Emp)al.get(i); //比较编号 if(emp.getEmpno().equals(empno)) { System.out.println("已找到该员工信息!"); System.out.println("员工工号:"+emp.getEmpno()); System.out.println("员工姓名:"+emp.getName()); System.out.println("员工月薪:"+emp.getSla()); } else { System.out.println("对不起,您需要查询的员工编号不存在!请核证后重新查询!"); break; } } } //修改员工工资 public void ChangeEmp(String empno,float sla) { //遍历查询 for(int i=0;i<al.size();i++) { Emp emp = (Emp)al.get(i); if(emp.getEmpno().equals(empno)) { emp.setSla(sla); } else { System.out.println("对不起,您需要修改工资的员工编号不存在!请核证后重新查询!"); break; } } } //删除离职员工 public void DelectEmp(String empno) { //遍历查询 for(int i=0;i<al.size();i++) { Emp emp = (Emp)al.get(i); if(emp.getEmpno().equals(empno)) { al.remove(i); } else { System.out.println("对不起,您需要删除的员工不存在!请核证后重新查询!"); break; } } } //显示员工名单 public void ShowAll() { for(int i=0;i<al.size();i++) { //取出对象 Emp emp = (Emp)al.get(i); System.out.println(emp.getName()); } } //按工资高低显示员工信息 public void ShowHTD () { Emp temp; //定义一个一维数组用来存放取出来的员工工资 Emp[] sal = new Emp[al.size()]; //冒泡排序,将员工工资排序 for(int i=0;i<al.size();i++) { for(int j=0;j<al.size()-i;j++) { if(sal[i].getSla()<sal[i+1].getSla()) { temp = sal[i]; sal[i] = sal[i+1]; sal[i+1] = temp; } } } //打印结果 for(int i=0;i<sal.length;i++) { System.out.println(sal[i].getSla()+sal[i].getName()+sal[i].getEmpno()); } } //计算员工总工资 public float Sumsal() { float sum = 0; for(int i=0;i<al.size();i++) { //取出对象 Emp emp = (Emp)al.get(i); sum += emp.getSla(); } return sum; } //计算员工平均工资 public float Avesal() { //先计算总工资 float sum = 0; for(int i=0;i<al.size();i++) { //取出对象 Emp emp = (Emp)al.get(i); sum += emp.getSla(); } //算平均工资 return (sum/al.size()); } } //雇员类 class Emp { //员工工号 private String empno; //员工姓名 private String name; //员工月薪 private float sla; //构造方法 Emp(String empno,String name,float sla) { this.empno = empno; this.name = name; this.sla = sla; } public String getEmpno() { return empno; } public void setEmpno(String empno) { this.empno = empno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSla() { return sla; } public void setSla(float sla) { this.sla = sla; } } 报错信息: Exception in thread "main" java.lang.NullPointerException at pack1.EmpManage.ShowHTD(Employeemanage.java:188) at pack1.Employeemanage.main(Employeemanage.java:77)
大神时间到了~下面这段代码每一个函数和里边的方法都什么意思,用来干嘛的?谁能说得详细~虚心求教
大神时间到了~下面这段代码每一个函数和里边的方法都是什么意思,用来干嘛的?谁能说得详细~绝对是虚心求教 ``` package com.sysgrrj.module.QTCSSZ.action; import com.sysgrrj.core.action.BaseAction; import com.sysgrrj.core.iservice.ICoreService; import com.sysgrrj.module.QTCSSZ.dao.QTCSSZDao; import com.sysgrrj.module.QTCSSZ.valueobject.QTCSSZ; import java.util.List; import java.util.ArrayList; public class QTCSSZAction extends BaseAction { private int id; private String ids; private QTCSSZ qTCSSZ; private List<QTCSSZ> qTCSSZList; // 平台服务对象 private ICoreService coreService; // 业务对象 private QTCSSZDao dao; private int TrainingOrCompetitionID; public String get() throws Exception { qTCSSZ = dao.get(id); return SUCCESS; } public String getByTrainingOrCompetitionID() throws Exception { qTCSSZList = dao.getList(TrainingOrCompetitionID); if(qTCSSZList.size()>0) { qTCSSZ=qTCSSZList.get(0); } return SUCCESS; } public String getList() throws Exception { qTCSSZList = dao.getList(TrainingOrCompetitionID); return SUCCESS; } public String save() throws Exception { dao.save(qTCSSZ); super.responseWriterJsSuccess(""); return null; //return SUCCESS; } public String dele() throws Exception { //单个删除 ; //dao.delete(qTCSSZ); //批量删除 ; dao.deleteByIds(ids); this.getList(); return SUCCESS; } public void validateSave() { List al = this.qTCSSZ.ValiData(); for (int i = 0; i < al.size(); i++) { this.addActionError(al.get(i).toString()); } } public String add() throws Exception { return SUCCESS; } public int getId() { return this.id; } public void setId(int id) { this.id = id; } public QTCSSZ getQTCSSZ() { return qTCSSZ; } public void setQTCSSZ(QTCSSZ qTCSSZ) { this.qTCSSZ = qTCSSZ; } public List<QTCSSZ> getQTCSSZList() { return qTCSSZList; } public void setQTCSSZList(ArrayList<QTCSSZ> qTCSSZList) { this.qTCSSZList = qTCSSZList; } public ICoreService getCoreService() { return this.coreService; } public void setCoreService(ICoreService coreService) { this.coreService = coreService; } public QTCSSZDao getDao() { return dao; } public void setDao(QTCSSZDao dao) { this.dao = dao; } public String getIds() { return ids; } public void setIds(String ids) { this.ids = ids; } public QTCSSZ getqTCSSZ() { return qTCSSZ; } public void setqTCSSZ(QTCSSZ qTCSSZ) { this.qTCSSZ = qTCSSZ; } public List<QTCSSZ> getqTCSSZList() { return qTCSSZList; } public void setqTCSSZList(List<QTCSSZ> qTCSSZList) { this.qTCSSZList = qTCSSZList; } public int getTrainingOrCompetitionID() { return TrainingOrCompetitionID; } public void setTrainingOrCompetitionID(int trainingOrCompetitionID) { TrainingOrCompetitionID = trainingOrCompetitionID; } } ```
没有显示数据项类型的 < SelectListItem >,“ProvList”的关键。
![图片说明](https://img-ask.csdn.net/upload/201703/10/1489114959_132255.png) 这是一个修改个人信息页面提交表单时报的错。 View代码: ``` <ul> <li> <span> * 省&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;份:</span> @Html.DropDownListFor(m => m.Province, (IEnumerable<SelectListItem>)ViewBag.ProvList, new { @class = "DropList", id = "Province", onchange = "ProvinceChang()" }) <span class="Info_Label">@ViewBag.Province</span> <span> * 市:</span> @Html.DropDownListFor(m => m.City, ViewBag.CityList as IEnumerable<SelectListItem>, new { @class = "DropList", id = "City", onchange = "CityChang()" }) <span class="Info_Label">@ViewBag.City</span> <span> * 区/县:</span> @Html.DropDownListFor(m => m.Area, ViewBag.AreaList as IEnumerable<SelectListItem>, new { @class = "DropList", id = "Area" }) <span class="Info_Label">@ViewBag.Area</span> </li> </ul> ``` 控制器: Get 方法: ``` List<SelectListItem> ieseProv = new List<SelectListItem>(); List<SelectListItem> ieseCity = new List<SelectListItem>(); List<SelectListItem> ieseArea = new List<SelectListItem>(); ieseProv = he.GetProItem(nuserid);//根据id得到所在省 ieseCity = he.GetCityItem(nuserid);//根据id得到所在市 ieseArea = he.GetAreaItem(nuserid);//根据id得到所在县 if (ieseProv==null||ieseProv.Count<=0) { Response.Write("<script>alert('" + ieseProv.Count .ToString()+ "')</script>"); } ViewBag.ProvList = ieseProv; ViewBag.CityList = ieseCity; ViewBag.AreaList = ieseArea; return View(); ``` POST 方法: ``` if (string.IsNullOrEmpty(model.UserName) == false && string.IsNullOrEmpty(model.PassWord) == false && string.IsNullOrEmpty(model.Address) == false && string.IsNullOrEmpty(model.Area) == false && string.IsNullOrEmpty(model.Business) == false && string.IsNullOrEmpty(model.City) == false && string.IsNullOrEmpty(model.MobelPhone) == false && string.IsNullOrEmpty(model.People) == false && string.IsNullOrEmpty(model.Province) == false && string.IsNullOrEmpty(model.Tel) == false) { string strName = model.UserName, strPassWord = model.PassWord, strAddress = model.Address, strArea = model.Area, strBusiness = model.Business, strCity = model.City, strMobelPhone = model.MobelPhone, strPeople = model.People, strProvince = model.Province, strTel = model.Tel; strProvince = SQLHELP.GetOne("select provincename from province where provinceid='" + strProvince + "'"); strCity = SQLHELP.GetOne("select cityname from city where cityid='" + strCity + "'"); strArea = SQLHELP.GetOne("select areaname from area where areaid='" + strArea + "'"); ArrayList al = new ArrayList() { strBusiness, strPeople, strTel, strMobelPhone,strProvince, strCity, strArea, strAddress, strName, strPassWord }; IDataParameter[] pare = new IDataParameter[] { new SqlParameter("Business",SqlDbType.Char,50), new SqlParameter("People",SqlDbType.Char,6), new SqlParameter("Tel",SqlDbType.Char,11), new SqlParameter("MobelPhone",SqlDbType.Char,11), new SqlParameter("Province",SqlDbType.Char,20), new SqlParameter("City",SqlDbType.Char,20), new SqlParameter("@Area",SqlDbType.Char,20), new SqlParameter("@Address",SqlDbType.Char,50), new SqlParameter("@Name",SqlDbType.Char,30), new SqlParameter("@PassWord",SqlDbType.Char,30)}; bool IsRegiest = SQLHELP.InsertAll("InsertMberAndLog", pare, al); ``` 而与之结构相同的注册页面提交就不会报这个错! 我在百度上查过,有很多都说是因为selectlistitem里没有值,但是我里确实是有值的啊;或者是我没明白是提交的时候没有值还是页面加载的时候没有值。 请教各位大神这个错误的原因是什么。谢谢了
JSP留言板的回复功能要怎么做
以下是留言页面 ``` <%@page import="org.model.Reply"%> <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@page import="org.model.*" %> <%@page import="org.dao.*" %> <html> <head> <title>留言板界面</title> <link rel="stylesheet" href="css/message_board.css"/> <script type="text/javascript" src="js/jquery-1.4.2.js"></script> <script type="text/javascript" src="js/message_board.js"></script> </head> <body bgcolor="#ddd" > <div style="margin-left:35%;margin-top:100px;font-family:Microsoft YaHei"> <h1 style="margin-left:5%"> 留言板</h1> <% Login current=(Login) request.getSession().getAttribute("login"); String username=current.getName(); %> <h5>当前用户:<%=username %></h5> <form name="f1" action="leavemessage.jsp" method="post"> <table border="1"> <caption>所有留言信息</caption> <tr><th>id</th><th>留言人姓名</th><th>留言时间</th> <th>留言标题</th><th>留言内容</th><th style="height: 29px; "></th><th>回复时间</th><th>回复内容</th></tr> <% ArrayList<MessBoar> al=new ArrayList<MessBoar>(); al= (ArrayList)session.getAttribute("al"); if(al!=null){ Iterator iter=al.iterator(); while(iter.hasNext()){ MessBoar mb=(MessBoar)iter.next(); %> <% int id=new LoginDao().getIdByTime(mb.getTime()); String name=new LoginDao().getName(mb.getName()); String time=mb.getTime(); String title=mb.getTitle(); String message=mb.getMessage(); session.setAttribute("Rtitle", title); session.setAttribute("time", time); session.setAttribute("name", name); session.setAttribute("message", message); %> <tr> <td><%= id %></td><!--这个是想获取的id--> <td><%= name %></td> <td><%= time %></td> <td><%= title %></td><!--这个是想获取的title--> <td><%= message %></td> <td><a href="response.jsp?name=<%=name%>&?title=<%= title%>&?message=<%= message%>>">回复</a></td> </tr> <% } } %> </table> </form> <a style="margin-left:22%" href="leavemessage.jsp">留言</a> </div> </body> </html> ``` response.jsp是回复页面的代码 请问response.jsp的代码应该怎么写才能获取到传入的title和message以及id 并将title填到回复标题的input框里? ``` <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@page import="org.model.MessBoar" %> <%@page import="org.dao.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>留言界面</title> <script type="text/javascript" src="js/jquery-1.4.2.js"></script> </head> <body bgcolor="#ddd" style="font-family:Microsoft YaHei"> <div style="text-align:center;margin-top:140px"> <h1 >请回复</h1> <form action="responseServlet" method="post"> <table style="margin-left: 37%" border="1"> <caption>填写留言信息</caption> <% String title=request.getParameter("title"); String message=request.getParameter("message"); %> <tr><td>回复标题</td> <td>Re:<%=session.getAttribute("Rtitle") %></td> </tr> <tr><td>回复内容</td> <td><textarea name="message" rows="5" cols="35"></textarea></td> </tr> </table> <input type="submit" value="提交"/> <input type="reset" value="重置"/> </form> <a href="main.jsp">返回留言板界面</a> </div> </body> </html> ```
请大神帮我看看这个java程序是什么意思,看的不是很懂,求大神讲解,谢谢!
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Clerk { //成员变量,职员的基本信息:编号、姓名和工资 private String no; private String name; private float sla; Clerk(String n,String na,float s){ no=n; name=na; sla=s; } Clerk(){ } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSla() { return sla; } public void setSla(float sla) { this.sla = sla; } public String toString(){ return "编号:" + no+"\n姓名:" + name+"\n工资:" + sla; } } class ClerkManage { Clerk al[] = null; int size=0; //标识存入的元素个数 public ClerkManage(int n) { al = new Clerk[n]; } // 添加职员 public void addClerk(Clerk c) { al[size]=c; //把元素存入数组当前的最后一个元素之后 size++; System.out.println("添加职员,他的信息是"); System.out.println(c); } // 查找并显示职员的相关信息 public int showInfo(String no) { // 遍历整个ArrayList boolean flag=true; for (int i = 0; flag&&(i < size); i++) { // 取出一个职员 Clerk ct=al[i]; // 比较编号 if (ct.getNo().equals(no)) { System.out.println("该职员的信息是"); System.out.println(ct); flag=false; return i; } } if(flag) System.out.println("查无此人!"); return -1; } // 修改工资 public void updateSal(String no, float newsal) { int n=showInfo(no); if(n!=-1){ al[n].setSla(newsal); System.out.println("修改后,他的信息是"); System.out.println(al[n]); } } // 删除职员 public void delClerk(String no) { int n=showInfo(no); if(n!=-1){ //将之后元素向前移动 for(int j=n;j<size-1;j++){ al[j]=al[j+1]; } size--; //元素个数减一 System.out.println("删除成功!"); } } } class ClerkNode{ Clerk clerkdata; ClerkNode next; ClerkNode(Clerk c,ClerkNode cn){ clerkdata=c; next=cn; } } class ClerkManageLink { ClerkNode head; //头结点 ClerkNode rear; //尾结点 int size; ClerkManageLink(){ head=new ClerkNode(null,null); rear=head; size=0; } // 添加职员 public void addClerk(Clerk c) { //用c生成一个结点,链入链表中,并让rear指向它 ClerkNode cn=new ClerkNode(c,null); if(head.next==null){ head.next=cn; rear=cn; }else{ rear.next=cn; rear=cn; } size++; System.out.println("添加职员,他的信息是"); System.out.println(c); } // 查找并显示职员的相关信息 public ClerkNode showInfo(String no) { // 遍历整个ArrayList boolean flag=true; for (ClerkNode p=head; flag&&(p.next!=null); p=p.next) { // 取出一个职员 Clerk ct=p.next.clerkdata; // 比较编号 if (ct.getNo().equals(no)) { System.out.println("该职员的信息是"); System.out.println(ct); flag=false; return p;//返回的是要查找的这个结点的前一个结点,此举是为了后面删除方便 } } if(flag) System.out.println("查无此人!"); return null; } // 修改工资 public void updateSal(String no, float newsal) { ClerkNode n=showInfo(no); if(n!=null){ n.next.clerkdata.setSla(newsal); System.out.println("修改后,他的信息是"); System.out.println(n.next.clerkdata); } } // 删除职员 public void delClerk(String no) { ClerkNode n=showInfo(no); if(n!=null){ n.next=n.next.next ; size--; //元素个数减一 System.out.println("删除成功!"); } } } public class ClerkTester { public static void main(String[] args) throws IOException{ ClerkManageLink cm=new ClerkManageLink(); //给出一个菜单 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); while(true){ System.out.println("**********欢迎使用职员管理系统*********"); System.out.println("\n\t请选择你要进行的操作:"); System.out.println("\n\t1.添加一个职员:"); System.out.println("\n\t2.查找一个职员:"); System.out.println("\n\t3.修改一个职员的工资:"); System.out.println("\n\t4.删除一个职员:"); System.out.println("\n\t5.退出!"); String operType=br.readLine(); if(operType.equals("1")){ System.out.println("请输入职员的编号:"); String no=br.readLine(); System.out.println("请输入职员的姓名:"); String responsibilities=br.readLine(); System.out.println("请输入职员的职位:"); String name=br.readLine(); System.out.println("请输入职员的工资:"); float sla=Float.parseFloat(br.readLine()); Clerk ck=new Clerk(no,name,sla); cm.addClerk(ck); }else if(operType.equals("2")){ System.out.println("请输入职员的编号:"); String no=br.readLine(); cm.showInfo(no); }else if(operType.equals("3")){ System.out.println("请输入职员的编号:"); String no=br.readLine(); System.out.println("请输入职员的工资:"); float sla=Float.parseFloat(br.readLine()); cm.updateSal(no, sla); }else if(operType.equals("4")){ System.out.println("请输入职员的编号:"); String no=br.readLine(); cm.delClerk(no); }else if(operType.equals("5")){ System.exit(0); } } } }
java问题请高手回答下 5币答谢 一点心意
用ArrayList做了一个增删改查,查找功能完全正确的实现了,但是 修改工资 和删除职员的时候 名字老是出错 该员工已经离职: 编号为:HB201621 姓名为:张紫萱 hb201621 这个编号对应的员工应该是 齐明 却变成了 张紫萱 名字是:张紫萱 工资变化为:1705.23 工资编化对应的员工姓名应该是 何明 却变成了 张紫萱 package yxcwsbz; import java.util.*; public class Demo9 { public static void main(String[] args) { // TODO Auto-generated method stub //雇员集合 ArrayList boa=new ArrayList(); //al中的数据类型是object类型 Staff sta1=new Staff(25,"张紫萱",4500f,"HB201611"); Staff sta2=new Staff(32,"何明",3800f,"HB201613"); Staff sta3=new Staff(27,"孙科",3200f,"HB201615"); Staff sta4=new Staff(29,"齐明",6200f,"HB201621"); //将对象加入集合 StaffManage staffmanage=new StaffManage(); staffmanage.add(sta1); staffmanage.add(sta2); staffmanage.add(sta3); staffmanage.add(sta4); //System.out.println(boa.size()); staffmanage.showname("HB201615"); System.out.println(" "); staffmanage.delstaff("HB201621"); System.out.println(" "); staffmanage.revisesoal("HB201613", 1705.23f); System.out.println(" "); //更新后重新遍历 } } //员工管理类 class StaffManage { private ArrayList boa= null; public StaffManage() { boa=new ArrayList(); } //增加一个员工 public void add(Staff staff) { boa.add(staff); } //查找一个员工 public void showname(String staffno) { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); if(staff.getStaffno().equals(staffno)) { System.out.println("查询的员工编号是:"+staffno); System.out.println("查询的员工姓名是:"+staff.getName()); System.out.println("查询的员工工资是:"+staff.getSoal()); System.out.println("查询的员工年龄是:"+staff.getAge()); break; } } } //删除一个员工 public void delstaff(String staffno) { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); if(staff.getName().equals(staffno)) { boa.remove(i); } System.out.println("该员工已经离职:"); System.out.println("编号为:"+staffno+" "); System.out.println("姓名为:"+staff.getName()+" "); break; } } //修改员工工资 public void revisesoal(String staffno,float newsoal) { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); if(staff.getName().equals(staffno)) { staff.setSoal(newsoal); } System.out.println("名字是:"+staff.getName()+" "+"工资变化为:"+newsoal); break; } } } //创建一个员工类 class Staff { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSoal() { return soal; } public void setSoal(float soal) { this.soal = soal; } public String getStaffno() { return staffno; } public void setStaffno(String staffno) { this.staffno = staffno; } private String name; private float soal; private String staffno; public Staff(int age,String name,float soal,String staffno) { this.age=age; this.name=name; this.soal=soal; this.staffno=staffno; } }
java初学者 请教一个问题 望有人抽出宝贵时间指教下
ArrayList的增删改查 查询出来应该是孙科 但是变成了张紫萱 望前辈指出错误如何更正 代码如下 package yxcwsbz; import java.util.*; public class Demo9 { public static void main(String[] args) { // TODO Auto-generated method stub //雇员集合 ArrayList boa=new ArrayList(); //al中的数据类型是object类型 Staff sta1=new Staff(25,"张紫萱",4500f,"HB201611"); Staff sta2=new Staff(32,"何明",3800f,"HB201613"); Staff sta3=new Staff(27,"孙科",3200f,"HB201615"); Staff sta4=new Staff(29,"齐明",6200f,"HB201621"); //将对象加入集合 StaffManage staffmanage=new StaffManage(); staffmanage.add(sta1); staffmanage.add(sta2); staffmanage.add(sta3); staffmanage.add(sta4); staffmanage.showname("HB201615"); System.out.println(" "); staffmanage.delstaff("HB201621"); System.out.println(" "); staffmanage.revisesoal("HB201613", 1705.23f); System.out.println(" "); staffmanage.showall(); //System.out.print(boa.size()); } } //员工管理类 class StaffManage { private ArrayList boa= null; public StaffManage() { boa=new ArrayList(); } //增加一个员工 public void add(Staff staff) { boa.add(staff); } //查找一个员工 public void showname(String staffno) { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); if(staff.getStaffno().equals(staffno)); { System.out.println("查询的员工编号是:"+staffno); System.out.println("查询的员工姓名是:"+staff.getName()); System.out.println("查询的员工工资是:"+staff.getSoal()); System.out.println("查询的员工年龄是:"+staff.getAge()); break; } } } //删除一个员工 public void delstaff(String staffno) { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); if(staff.getName().equals(staffno)); { boa.remove(i); } } } //修改员工工资 public void revisesoal(String staffno,float newsoal) { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); if(staff.getName().equals(staffno)); { staff.setSoal(newsoal); } } } public void showall() { for(int i=0;i<boa.size();i++) { Staff staff=(Staff)boa.get(i); System.out.println("名字是:"+staff.getName()+" "+"工资是:"+staff.getSoal()); } } } //创建一个员工类 class Staff { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSoal() { return soal; } public void setSoal(float soal) { this.soal = soal; } public String getStaffno() { return staffno; } public void setStaffno(String staffno) { this.staffno = staffno; } private String name; private float soal; private String staffno; public Staff(int age,String name,float soal,String staffno) { this.age=age; this.name=name; this.soal=soal; this.staffno=staffno; } }
多线程问题
请教各位。本人在尝试写一个银行调度系统。但是多线程上遇到问题。目前有三个并发线程,但是同时只能运行两个线程,这是何解?!!! 代码如下: public class Number { private long number = 0; private long max = 0; private String type = null; public Number() { } public Number(long number, String type, long max) { this.number=number; this.type=type; this.max=max; } public long getNumber() { return number; } public void setNumber(long number) { this.number = number; } public String getType() { return type; } public void setType(String type) { this.type = type; } public long getMax() { return max; } public void setMax(long max) { this.max = max; } } import java.util.ArrayList; public class Main { public static ArrayList<Number> al = new ArrayList<Number>(); public static void main(String[] args) throws InterruptedException { NumberMashine number = new NumberMashine(); number.start(); Thread.sleep(5000); Thread window1= new Window1(); Thread window2= new Window2(); window1.start(); window2.start(); } } public class ManagerNumber { public static long getNumber(int window) { long num = Main.al.get(0).getNumber(); if(window==5) { for(int i=0;i<Main.al.size();i++) { if(Main.al.get(i).getType().equals("EXPRESS")) num = Main.al.get(i).getNumber(); } } else if(window==6) { for(int i=0;i<Main.al.size();i++) { if(Main.al.get(i).getType().equals("VIP")) num = Main.al.get(i).getNumber(); } } return num; } public static void removeNumber(long number) { for(int i=0;i<Main.al.size();i++) { if(number==Main.al.get(i).getNumber()) Main.al.remove(i); } } } import java.util.Random; public class Window1 extends Thread { private long num = 0; private long useTime = 0; public Window1() { } @Override public synchronized void start() { while(true) { System.out.println("1号窗口等待中。。。"); num = ManagerNumber.getNumber(1); System.out.println("请"+num+"号客户到1号窗口办理业务"); useTime = new Random().nextInt(7); System.out.println(useTime); try { Thread.sleep(useTime*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(num+"号总共用时"+useTime*1000+"秒"); ManagerNumber.removeNumber(num); } } } import java.util.Random; public class Window2 extends Thread { private long num = 0; private long useTime = 0; public Window2() { } @Override public synchronized void start() { while(true) { System.out.println("2号窗口等待中。。。"); num = ManagerNumber.getNumber(2); System.out.println("请"+num+"号客户到2号窗口办理业务"); useTime = new Random().nextInt(7); try { Thread.sleep(useTime*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(num+"号总共用时"+useTime*1000+"秒"); ManagerNumber.removeNumber(num); } } }
EMUI5.0 Android7.0中开发遇到内存泄漏
com.zxsd.shoppingguide.activity.AggregationEntryActivity has leaked: GC ROOT static android.gestureboost.GestureBoostManager.sGestureBoostManager references android.gestureboost.GestureBoostManager.mContext leaks com.zxsd.shoppingguide.activity.AggregationEntryActivity instance Retaining: 4.9 KB. Reference Key: def072d8-5909-4709-9365-9a244a488e02 Device: HUAWEI honor FRD-AL10 FRD-AL10 Android Version: 7.0 API: 24 LeakCanary: 1.5 00f37f5 Durations: watch=5011ms, gc=173ms, heap dump=1862ms, analysis=103468ms Details: Class android.gestureboost.GestureBoostManager static sGestureBoostManager = android.gestureboost.GestureBoostManager@3172306 (0x12e88e50) static SWITCH_GESTURE_BOOST = 4 static $classOverhead = byte[652]@318563329 (0x12fce401) static TAG = java.lang.String@1896298 (0x71073638) static GESTURE_BOOST_CODE = 10001 static RMS_EXT_CODE_BASE = 10000 Instance of android.gestureboost.GestureBoostManager static sGestureBoostManager = android.gestureboost.GestureBoostManager@3172306 (0x12e88e50) static SWITCH_GESTURE_BOOST = 4 static $classOverhead = byte[652]@318563329 (0x12fce401) static TAG = java.lang.String@1896298 (0x71073638) static GESTURE_BOOST_CODE = 10001 static RMS_EXT_CODE_BASE = 10000 mAwareService = null mContext = com.zxsd.shoppingguide.activity.AggregationEntryActivity@3151232 (0x12c86600) mGestureBoostflag = false shadow$klass = android.gestureboost.GestureBoostManager shadow$monitor = 0 Instance of com.zxsd.shoppingguide.activity.AggregationEntryActivity static $change = null static $classOverhead = byte[4544]@316317697 (0x12daa001) static serialVersionUID = 0 appBarLayout = android.support.design.widget.AppBarLayout@3208130 (0x131f3800) btnLeft = android.support.v7.widget.AppCompatTextView@3211796 (0x1324d000) btnRight = android.support.v7.widget.AppCompatTextView@3212390 (0x1325b800) btnRightTwo = android.support.v7.widget.AppCompatTextView@3212267 (0x13258800) bundle = android.os.Bundle@3205945 (0x131be280) container = android.widget.FrameLayout@3214438 (0x1328d800) fragment = com.zxsd.shoppingguide.fragment.AggregationEntryFragment@3151228 (0x12c864c0) imgBack = android.support.v7.widget.AppCompatImageButton@3211827 (0x1324dc00) imgMore = android.support.v7.widget.AppCompatImageButton@3212369 (0x1325b000) layoutId = 2130968603 toolbar = android.support.v7.widget.Toolbar@3211560 (0x13247400) toolbarTitle = android.support.v7.widget.AppCompatTextView@3214479 (0x1328e800) mDelegate = android.support.v7.app.AppCompatDelegateImplN@3148888 (0x12c4d280) mEatKeyUpEvent = false mResources = null mThemeId = 2131361857 mCreated = true mFragments = android.support.v4.app.FragmentController@3164159 (0x12dc1fc0) mHandler = android.support.v4.app.FragmentActivity$1@319517120 (0x130b71c0) mNextCandidateRequestIndex = 0 mOptionsMenuInvalidated = false mPendingFragmentActivityResults = android.support.v4.util.SparseArrayCompat@3205947 (0x131be340) mReallyStopped = true mRequestedPermissionsFromFragment = false mResumed = false mRetaining = false mStopped = true mStartedActivityFromFragment = false mStartedIntentSenderFromFragment = false mExtraDataMap = android.support.v4.util.SimpleArrayMap@3204282 (0x131958c8) mActionBar = null mActionModeTypeStarting = 0 mActivityInfo = android.content.pm.ActivityInfo@3148902 (0x12c4d820) mActivityTransitionState = android.app.ActivityTransitionState@3191331 (0x130595b8) mApplication = com.zxsd.shoppingguide.base.App@3146104 (0x12c09308) mCalled = true mChangeCanvasToTranslucent = false mChangingConfigurations = false mComponent = android.content.ComponentName@3162928 (0x12da3f00) mConfigChangeFlags = 0 mCurrentConfig = android.content.res.Configuration@3158405 (0x12d35848) mCustActivity = android.app.HwCustActivityImpl@3204282 (0x131958f8) mDecor = null mDefaultKeyMode = 0 mDefaultKeySsb = null mDestroyed = true mDoReportFullyDrawn = false mEatKeyUpEvent = false mEmbeddedID = null mEnableDefaultActionBarUp = false mEnterTransitionListener = android.app.SharedElementCallback$1@1903589792 (0x717679a0) mExitTransitionListener = android.app.SharedElementCallback$1@1903589792 (0x717679a0) mFinished = true mFragments = android.app.FragmentController@3153430 (0x12cbc0d0) mHandler = android.os.Handler@3195173 (0x130b72c0) mHasCurrentPermissionsRequest = false mIdent = 132658027 mInstanceTracker = android.os.StrictMode$InstanceTracker@315343040 (0x12cbc0c0) mInstrumentation = android.app.Instrumentation@3148126 (0x12c3a8f8) mIntent = android.content.Intent@3168869 (0x12e34fc0) mIsFullFlag = false mLastNonConfigurationInstances = null mMainThread = android.app.ActivityThread@3147206 (0x12c24160) mManagedCursors = java.util.ArrayList@3204284 (0x131959a0) mManagedDialogs = null mMenuInflater = null mParent = null mReferrer = java.lang.String@3168862 (0x12e34cc0) mResultCode = 0 mResultData = null mResumed = false mSearchEvent = null mSearchManager = null mStartedActivity = false mStopped = true mTaskDescription = android.app.ActivityManager$TaskDescription@319517344 (0x130b72a0) mTemporaryPause = false mTitle = java.lang.String@1894097 (0x70e5a400) mTitleColor = 0 mTitleReady = true mToken = android.os.BinderProxy@3197227 (0x130e9500) mTranslucentCallback = null mUiThread = java.lang.Thread@2021072 (0x78771dd0) mVisibleBehind = false mVisibleFromClient = true mVisibleFromServer = true mVoiceInteractor = null mWindow = com.android.internal.policy.HwPhoneWindow@3167633 (0x12e16ce0) mWindowAdded = true mWindowManager = android.view.WindowManagerImpl@3198605 (0x1310af60) mInflater = com.android.internal.policy.HwPhoneLayoutInflater@3170012 (0x12e50e20) mOverrideConfiguration = null mResources = android.content.res.HwResources@3164745 (0x12dd04c0) mTheme = android.content.res.Resources$Theme@316415648 (0x12dc1ea0) mThemeResource = 2131361857 mBase = android.app.ContextImpl@3148388 (0x12c40f20) shadow$klass = com.zxsd.shoppingguide.activity.AggregationEntryActivity shadow$monitor = 1073743756 Excluded Refs: Field: android.view.Choreographer$FrameDisplayEventReceiver.mMessageQueue (always) Thread:FinalizerWatchdogDaemon (always) Thread:main (always) Thread:LeakCanary-Heap-Dump (always) Class:java.lang.ref.WeakReference (always) Class:java.lang.ref.SoftReference (always) Class:java.lang.ref.PhantomReference (always) Class:java.lang.ref.Finalizer (always) Class:java.lang.ref.FinalizerReference (always) ![图片说明](https://img-ask.csdn.net/upload/201702/10/1486711588_136805.png)
关于隐藏表单提交后获取不到值的问题
``` package com.bit; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Iterator; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class QueryUserTemp extends HttpServlet { private static final long serialVersionUID = -3953175627432572010L; private static final int pageLevel = 1; public void doGet(HttpServletRequest req, HttpServletResponse res) { if (!VerifyUser.verify(req, res, pageLevel)) { return; } String username = req.getParameter("username"); String queryType = req.getParameter("qType"); int pageNow = 1; try { String toPage = req.getParameter("toPage"); if (toPage != null) { pageNow = Integer.parseInt(toPage); } } catch (Exception e) { } int grd = 0; System.out.println(); String testString = req.getParameter("testString"); System.out.println(username + " username"); System.out.println(queryType + " queryType"); System.out.println(pageNow + " pageNow"); System.out.println(testString + " testString"); System.out.println(); PrintWriter pw = null; UserBeanCl ubc = new UserBeanCl(); ArrayList<UserBean> al = new ArrayList<>(); res.setContentType("text/html;charset=utf-8"); try { pw = res.getWriter(); pw.println("<html>"); pw.println("<head>"); pw.println("<link rel='stylesheet' type='text/css' href='css/theme.css'>"); pw.println("</head>"); pw.println("<body>"); pw.println("<img src=imgs/logo.png id='logo'><br>"); pw.println("<h1>Query User</h1>"); pw.println("<form action=queryusertemp method=post>"); pw.println( "<label for='username'>username:&nbsp;<input type=text id='username' name=username></label><br><br><br>"); pw.println( "<label for='fuzzy'>Fuzzy&nbsp;<input type=radio id='fuzzy' name=qType value=fuz checked></label>"); pw.println( "<label for='precise'>Precise&nbsp;<input type=radio id='precise' name=qType value=pre></label><br>"); pw.println("<br><br><input type=submit value=Query><br><br>"); if (username != null && queryType != null) { if (username.equals("")) { try { res.sendRedirect("err?operation=Query"); } catch (IOException e) { e.printStackTrace(); } } else { String ugrd = (String) req.getSession(true).getAttribute("ugrd"); grd = Integer.parseInt(ugrd); al = ubc.queryUserByName(username, queryType, pageNow); if (al.size() == 0) { pw.println("<h2><em>No Result.</em></h2>"); } else { pw.println("<h2>Query Result:</h2>"); pw.println("<table border=1 id='table'>"); pw.println("<tr bgcolor='pink'><th>id</th><th>name</th>"); if (grd == 10) { pw.println("<th>pwd</th>"); } pw.println("<th>email</th><th>grade</th></tr>"); Iterator<UserBean> it = al.iterator(); while (it.hasNext()) { UserBean ub = it.next(); pw.println("<tr>"); pw.println("<td>" + ub.getUserId() + "</td>"); pw.println("<td>" + ub.getUsername() + "</td>"); if (grd == 10) { pw.println("<td>" + ub.getPasswd() + "</td>"); } pw.println("<td>" + ub.getEmail() + "</td>"); pw.println("<td>" + ub.getGrade() + "</td>"); pw.println("</tr>"); } pw.println("</table><br>"); pw.println("Current page is " + pageNow + "<br><br>"); int pageCount = ubc.getPageCount(); if (pageNow != 1) pw.println("<a href=queryusertemp?toPage=" + (pageNow - 1) + "&username=" + username + "&qType=" + queryType + ">" + "Previous" + "</a>"); int maxPage = pageNow + 4; if (maxPage <= pageCount) { for (int i = pageNow; i <= maxPage; i++) { pw.println("<a href=queryusertemp?toPage=" + i + "&username=" + username + "&qType=" + queryType + ">" + i + "</a>"); } } else { for (int i = pageNow; i <= pageCount; i++) { pw.println("<a href=queryusertemp?toPage=" + i + "&username=" + username + "&qType=" + queryType + ">" + i + "</a>"); } } if (pageNow != pageCount) pw.println("<a href=queryusertemp?toPage=" + (pageNow + 1) + "&username=" + username + "&qType=" + queryType + ">" + "Next" + "</a>"); pw.println("<br><form action=queryusertemp>"); pw.println( "<label for='goPage'>Skip to:<input type=number name=toPage id='goPage' min='1' max=" + pageCount + "></label>"); pw.println("<input type=hidden name=qType value=" + queryType + ">"); pw.println("<input type=hidden name=username value=" + username + ">"); pw.println("<input type=hidden name=testString value=" + username + ">"); pw.println("<input type=submit value=GO>"); pw.println("</form>"); } } } pw.println("<br><br><a href=main>Return to Main Page</a>"); pw.println("<br><br><img id='flower' src=imgs/flower.png>"); pw.println("</body>"); pw.println("</html>"); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest req, HttpServletResponse res) { doGet(req, res); } } ``` 最下面的隐藏表单部分提交了toPage、qType、username、testString给当前页面。但是在测试部分(控制台输出)却只能接收到toPage、qType和testString,username的值变成了 ""。 求解。 ![第一次访问该servlet](https://img-ask.csdn.net/upload/201710/01/1506829824_89535.jpg) ![使用er2作为关键字进行检索](https://img-ask.csdn.net/upload/201710/01/1506829849_966279.jpg) ![使用隐藏表单提交的信息进行检索](https://img-ask.csdn.net/upload/201710/01/1506829881_752499.jpg)
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 另外推荐一篇原创:终极推荐!可能是最适合你的Java学习路线 方法 网站 书籍推荐! Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
神经⽹络可以计算任何函数的可视化证明
《Neural Networks and Deep Learning》读书笔记第四篇本章其实和前面章节的关联性不大,所以大可将本章作为小短文来阅读,当然基本的深度学习基础还是要有的。主要介绍了神经⽹络拥有的⼀种普遍性,比如说不管目标函数是怎样的,神经网络总是能够对任何可能的输入,其值(或者说近似值)是网络的输出,哪怕是多输入和多输出也是如此,我们大可直接得出一个结论:不论我们想要计算什么样的函数,...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
互联网公司的裁员,能玩出多少种花样?
裁员,也是一门学问,可谓博大精深!以下,是互联网公司的裁员的多种方法:-正文开始-135岁+不予续签的理由:千禧一代网感更强。95后不予通过试用期的理由:已婚已育员工更有责任心。2通知接下来要过苦日子,让一部分不肯同甘共苦的员工自己走人,以“兄弟”和“非兄弟”来区别员工。3强制996。员工如果平衡不了工作和家庭,可在离婚或离职里二选一。4不布置任何工作,但下班前必须提交千字工作日报。5不给活干+...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
活到老,学到老,程序员也该如此
全文共2763字,预计学习时长8分钟 图片来源:Pixabay 此前,“网传阿里巴巴要求尽快实现P8全员35周岁以内”的消息闹得沸沸扬扬。虽然很快被阿里辟谣,但苍蝇不叮无缝的蛋,无蜜不招彩蝶蜂。消息从何而来?真相究竟怎样?我们无从而知。我们只知道一个事实:不知从何时开始,程序猿也被划在了“吃青春饭”行业之列。 饱受“996ICU”摧残后,好不容易“头秃了变强了”,即将步入为“高...
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
关于裁员几点看法及建议
最近网易裁员事件引起广泛关注,昨天网易针对此事,也发了声明,到底谁对谁错,孰是孰非?我们作为吃瓜观众实在是知之甚少,所以不敢妄下定论。身处软件开发这个行业,近一两年来,对...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
相关热词 c#时间格式化 不带- c#替换字符串中指定位置 c# rdlc 动态报表 c# 获取txt编码格式 c#事件主动调用 c#抽象工厂模式 c# 如何添加类注释 c# static块 c#处理浮点数 c# 生成字母数字随机数
立即提问