Java 怎么不用循环取ArrayList的前N个?

有size为20的ArrayList,取前10个以ArrayList返回,不使用循环。

3个回答

list.subList(start, end);


public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            list.add(i);
        }
        // 取list中前10个元素
        list = list.subList(0, 10);
        // 遍历打印每个元素
        list.forEach(System.out::println);
    }
}


list.subList(start, end);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java查询数据库中的数据会输出,输出的不是我的数据????
# ```数据封装在build,builds中 可是输出的不是数据库中的数据而是 ![图片说明](https://img-ask.csdn.net/upload/202004/02/1585822586_24417.jpg) # DormBuildDaoImpl.java package zj.shizhan.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import zj.shizhan.bean.DormBuild; import zj.shizhan.util.ConnectionFactory; public class DormBuildDaoImpl implements DormBuildDao { @Override public DormBuild findByName(String dormBuildName) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "select * from dormbuild where dormBuildName = ? "; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, dormBuildName); ResultSet rs = preparedStatement .executeQuery(); //因为查询出来的信息包括表头信息,所以指针下移一行,看是否有查询出的数据 //如有数据,就进入循环体封装该行数据 while (rs.next()) { DormBuild build = new DormBuild(); build.setDormBuildId(rs.getInt("dormBuildId")); build.setDormBuildName(rs.getString("dormBuildName")); build.setDetail(rs.getString("detail")); return build; } } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void save(DormBuild build) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "INSERT INTO dormbuild(dormBuildName,detail)VALUES(?,?)"; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, build.getDormBuildName()); preparedStatement.setString(2, build.getDetail()); preparedStatement .executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } @Override public List<DormBuild> find() { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "select * from dormbuild "; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet rs = preparedStatement .executeQuery(); //因为查询出来的信息包括表头信息,所以指针下移一行,看是否有查询出的数据 //如有数据,就进入循环体封装该行数据 List<DormBuild> builds = new ArrayList<DormBuild>(); while (rs.next()) { DormBuild build = new DormBuild(); build.setDormBuildId(rs.getInt("dormBuildId")); build.setDormBuildName(rs.getString("dormBuildName")); build.setDetail(rs.getString("detail")); builds.add(build); } return builds; } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public DormBuild findById(Integer dormBuildId) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "select * from dormbuild where dormBuildId = ? "; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, dormBuildId); ResultSet rs = preparedStatement .executeQuery(); //因为查询出来的信息包括表头信息,所以指针下移一行,看是否有查询出的数据 //如有数据,就进入循环体封装该行数据 while (rs.next()) { DormBuild build = new DormBuild(); build.setDormBuildId(rs.getInt("dormBuildId")); build.setDormBuildName(rs.getString("dormBuildName")); build.setDetail(rs.getString("detail")); return build; } } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void update(DormBuild build ) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "UPDATE dormbuild SET dormBuildName = ?,detail = ? WHERE dormBuildId = ?"; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, build.getDormBuildName()); preparedStatement.setString(2, build.getDetail()); preparedStatement.setInt(3, build.getDormBuildId()); //执行更新 preparedStatement .executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } } ``` # DormBuildServlet.java ``` package zj.shizhan.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import zj.shizhan.bean.DormBuild; import zj.shizhan.service.DormBuildService; import zj.shizhan.service.DormBuildServiceImpl; /** * Servlet implementation class DormBuildServlet */ @WebServlet("/dormBuild.action") public class DormBuildServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DormBuildServlet() { super(); } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); String action = request.getParameter("action"); //通过request.getParameter("id")方式获取的值都是String类型的 String dormBuildId = request.getParameter("dormBuildId"); System.out.println("action:"+action); DormBuildService dormBuildService = new DormBuildServiceImpl(); if(action !=null & action.equals("list")) { List<DormBuild> builds = new ArrayList<DormBuild>(); if( dormBuildId== null || dormBuildId.equals("")) { //查询所有宿舍楼信息,跳转到宿舍楼列表页 builds = dormBuildService.find(); }else if(dormBuildId != null && !dormBuildId.equals("")) { //点击查询按钮搜索某一栋宿舍楼的信息 DormBuild build = dormBuildService.findById(Integer.parseInt(dormBuildId)); builds.add(build); System.out.println("build:"+build); } //查询所有宿舍楼。在select中遍历 List<DormBuild> buildSelects = dormBuildService.find(); request.setAttribute("buildSelects", buildSelects); request.setAttribute("dormBuildId", dormBuildId); System.out.println("builds:"+builds); request.setAttribute("builds", builds); request.getRequestDispatcher("BuildList.jsp").forward(request, response); }else if (action !=null & "preAdd".equals(action)) { //表示跳转到宿舍楼添加页面 request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); }else if (action !=null & "save".equals(action)) { //保存数据 String n = request.getParameter("dormBuildName"); String dormBuildName = new String(n.getBytes("ISO-8859-1"), "utf-8"); String m = request.getParameter("detail"); String detail = new String(m.getBytes("ISO-8859-1"), "utf-8"); System.out.println("dormBuildName:"+dormBuildName+"detail:"+detail+"id:"+dormBuildId); //判断宿舍楼名字是否已存在 DormBuild dormBuild = dormBuildService.findByName(dormBuildName); System.out.println("dormBuildName:"+dormBuildName); System.out.println("id2:"+dormBuildId); if(dormBuildId !=null && !"".equals(dormBuildId)) { System.out.println("id3:"+dormBuildId); //修改 if (dormBuild != null && !dormBuild.getDormBuildId().equals(Integer.parseInt(dormBuildId))) { request.setAttribute("error", "该宿舍楼已存在"); //格局宿舍楼id,查询宿舍楼 DormBuild build = dormBuildService.findById(Integer.parseInt(dormBuildId)); //保存宿舍楼信息,到前端页面展示 request.setAttribute("build", build); request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); }else { dormBuild = dormBuildService.findById(Integer.parseInt(dormBuildId)); dormBuild.setDormBuildName(dormBuildName); dormBuild.setDetail(detail); dormBuildService.update(dormBuild); //更新完成后,跳转到宿舍楼管理列表页,查询所有宿舍楼 List<DormBuild> builds = dormBuildService.find(); request.setAttribute("builds", builds); request.getRequestDispatcher("BuildList.jsp").forward(request, response); } }else { //保存 System.out.println("id4:"+dormBuildId); if (dormBuild != null) { //该宿舍楼已存在 request.setAttribute("error", "该宿舍楼已存在"); request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); }else { //该宿舍楼已不存在 DormBuild build = new DormBuild(); build.setDormBuildName(dormBuildName); build.setDetail(detail); dormBuildService.save(build); List<DormBuild> builds = dormBuildService.find(); request.setAttribute("builds", builds); request.getRequestDispatcher("BuildList.jsp").forward(request, response); } } }else if (action !=null & "preUpdate".equals(action)) { //格局宿舍楼id,查询宿舍楼 DormBuild build = dormBuildService.findById(Integer.parseInt(dormBuildId)); System.out.println("id1:"+dormBuildId); //保存宿舍楼信息,到前端页面展示 request.setAttribute("build", build); //表示跳转到宿舍楼修改页面 request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); } } } ``` # DormBuild.java ``` package zj.shizhan.bean; public class DormBuild { private Integer dormBuildId; private String dormBuildName; private String detail; public DormBuild() { super(); } public DormBuild(Integer dormBuildId,String dormBuildName, String detail) { super(); this.dormBuildId = dormBuildId; this.dormBuildName = dormBuildName; this.detail = detail; } public String getDormBuildName() { return dormBuildName; } public void setDormBuildName(String dormBuildName) { this.dormBuildName = dormBuildName; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public Integer getDormBuildId() { return dormBuildId; } public void setDormBuildId(Integer dormBuildId) { this.dormBuildId = dormBuildId; } } ```
java怎么从循环中提取return 值 ,importdata中的return的值是null,但是想要return lines 的内容
package hotel1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import hotel.CloseStreamMethod; public class ImportData{ public ArrayList roomsLists = new ArrayList(); public static void main(String[] args) { ImportData ip = new ImportData(); ip.importRooms(); } public String importData(){ File src = new File("/Users/handsomeboy/eclipse-workspace/Coursework/src/hotel1/rooms.txt"); BufferedReader br = null; String lines = null; try { br = new BufferedReader(new FileReader(src)); String line = null; while((line = br.readLine()) != null) { lines += line; } } catch (IOException e) { e.printStackTrace(); } finally { CloseStreamMethod csm = new CloseStreamMethod(); csm.close(br); } return lines; } public void importRooms() { String[] content = importData().split("\n"); for (String row : content) { if(row != null) { String[] contents = row.split(","); if (contents.length == 5) { roomsLists.add(new Rooms(Integer.parseInt(contents[0]), RoomType.valueOf(contents[1].toUpperCase()), Double.parseDouble(contents[2]), Integer.parseInt(contents[3]),contents[4])); } } } System.out.println(roomsLists); } } 输出内容: [] 文本内容: 101,double,80.00,2,own bathroom 102,double,80.00,2,own bathroom 103,twin,70.00,2,shared bathroom 104,twin,70.00,2,shared bathroom 201,double,80.00,2,own bathroom 202,single,70.00,1,own bathroom 301,family,90.00,4,own bathroom
进行对包含整型变量的list进行操作造成计算错误
问题很简单,可以复现。也可能是太久没接触代码的简单问题。 看了一个短视频,说人类的贫富差距28定律,用计算机随机可以发现是一样的。 想了一下觉得并不难实现,所以想要试一下。 思路是循环创建100个包含name和money字段的对象。 并把它们存进list 取随机坐标的两个对象实现一次money的随机数额的交易。 该交易是单向的,一方减少多少,另一方就增加多少。如果要被减少的一方已经是0,便不操作 代码如下: function start() { var objects=new Array(); for(var i=1;i<101;i++){ var object=new Map() ; object.set('name',i); object.set('money',10); objects.push(object) } //这里是单纯为验证当前数组里money的总和是多少这里输出是正常的10000 var moneysxm=0; for(var w=0;w<objects.length;w++){ moneysxm+=objects[w].get('money') } console.log(moneysxm); for(var z=0;z<$('#f').val();z++){ //随机取两个数 var demo1int=sum(0,99); var demo2int=sum(0,99); //获得随机数字对应的数组对象 var demo1object=objects[demo1int]; var demo2object=objects[demo2int]; //获得对象1的金钱数额 var demo1money=demo1object.get('money'); //获得对象2的金钱数额 var demo2money=demo2object.get('money'); console.log(demo1object.get('name')+'##'+demo1money) console.log(demo2object.get('name')+'##'+demo2money) //当该对象金钱数额为0时不作为 //如果两个对象是同一个时不作为 if(demo1money!=0||demo1int!=demo2int){ //获得符合该对象当前金钱范围内的随机支出数额 var demo1zhichu=sum(1,demo1money); //获得对象1的剩余数额 demo1money-=demo1zhichu; //将对象1剩余数额存入数组 objects[demo1int].set('money',demo1money); //获得对象二获得数额后的总数额 demo2money+=demo1zhichu; //将对象2获得数额后的总数额存入数组 objects[demo2int].set('money',demo2money); } console.log(objects[demo1int].get('name')+'##'+objects[demo1int].get('money')); console.log(objects[demo1int].get('name')+'##'+objects[demo2int].get('money')); } var moneysxm=0; for(var s=0;s<objects.length;s++){ moneysxm+=objects[s].get('money') } console.log(moneysxm); //排序 for(var o=0;o<objects.length;o++){ for(var u=0;u<objects.length;u++){ if(objects[o].get('money')<objects[u].get('money')){ var g=objects[o]; objects[o]=objects[u]; objects[u]=g; } } } setobjects=objects; console.log(setobjects); moneysxm=0; for(var q=0;q<setobjects.length;q++){ moneysxm+=setobjects[q].get('money') } console.log(moneysxm); } function sum (m,n){ var num = Math.floor(Math.random()*(m - n) + n); return num; } #f是一个输入框 输入的是循环次数 ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582578096_764127.jpg) 但是问题这段逻辑感觉并没有什么问题,但是问题却出现了 当主要的对象随机交易这段循环走过之后,money的总量发生了变化,循环次数越多,出错概率越大,越离谱 ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582578268_555800.jpg) 由于之前主要做的后端,之所以用js来试,是因为js不用jdk。但是之前调试前端时也总是出现各种各样的问题,最后我怀疑是又遇到了什么莫名其妙的前端都知道的潜在bug 所以决定用相同的逻辑再用java试一下。 java是强类型的,应该不会再出现这种事情了吧。但是显然,我错了。 public class test1234 { public static void main(String[] args) { ArrayList<persion> arrayList = new ArrayList<persion>(); //创建100个对象 for(int i=1;i<101;i++){ persion persion = new persion(); persion.setName(String.valueOf(i)); persion.setMoney(10); arrayList.add(persion); } for(int z=0;z<1000;z++){ //随机取两个数 int demo1int=sum(0,99); int demo2int=sum(0,99); //获得随机数字对应的数组对象 persion demo1object=arrayList.get(demo1int); persion demo2object=arrayList.get(demo2int); //获得对象1的金钱数额 int demo1money=demo1object.getMoney(); //获得对象2的金钱数额 int demo2money=demo2object.getMoney(); //当该对象金钱数额为0时不作为 if(demo1money!=0){ //获得符合该对象当前金钱范围内的随机支出数额 int demo1zhichu=sum(1,demo1money); //获得对象1的剩余数额 demo1money-=demo1zhichu; //将对象1剩余数额存入数组 demo1object.setMoney(demo1money); //获得对象二获得数额后的总数额 demo2money+=demo1zhichu; //将对象2获得数额后的总数额存入数组 demo2object.setMoney(demo2money); } } int moneysxm=0; for(int s=0;s<arrayList.size();s++){ moneysxm+=arrayList.get(s).getMoney(); } System.out.println(moneysxm); } ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582578602_162708.jpg) java也输出了一些令人害怕的money总量 那么肯定是我犯了什么弱智错误了吧,可无论如何也不知道哪里错了,去网上查,大部分计算错误是由于浮点计算造成的,这个我遇到过,但是整型不涉及二进制的缺陷啊。另外我记得list循环不能对对象操作?好像有这个说法?忘了,
计算1-x内的素数, 使用y个线程计算
计算1-x内的素数, 结果保存在mysql中 要求: 1. 使用y个线程计算 2. 尽量优化算法 3. x和y可配置 我是用的mvc写的 下面是线程池和素数计算方式 写到这里写不下去了,求帮助 package com.lsszss; import com.lsszss.service.Impl.PrimeImpl; import com.lsszss.service.PrimeService; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; /** * @ClassName Threads * @Author 25788 * @Date 2019/12/20 11:52 * @Version V1.0 * java.util.concurrent.Executors :线程池的工厂类,用来生成线程池 * 01.使用线程池的工厂类Executros里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池 * 02.创建一个类,实现Runnable接口,重写run方法,设置线程任务 * 03.调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行run方法 * 04.调用ExecutorService中的方法shutdown销毁线程池(不建议使用) */ public class prime { static PrimeService primeService= new PrimeImpl(); private static List<Integer> getPrimeNumber(int num){ List<Integer> arrayList = new ArrayList<>(); for (int i = 1;i < num+1 ; i++){ if (isPrime(i)){ arrayList.add(i); primeService.addPrime(Long.parseLong(i+"")); } } return arrayList; } public static boolean isPrime(int n){ if (n==2||n==3){ return true; } if (n%2==0){ // 是偶数就一定不是素数 return false; } for (int i=3;i<=(int)Math.sqrt(n);i=i+2){ // 奇数+1为偶数,所以每次循环+2 if (n%i==0) {return false;} } return true; } public static void main(String[] args) { int x=100; //1 - x 之间的素数 int y=2; //线程数 System.out.println(getPrimeNumber(x)); // 01.使用线程池的工厂类Executros里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池 ExecutorService executor = Executors.newFixedThreadPool(y); // 03.调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行run方法 executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); } }
帮我解决的死循环,求大神帮我。。。java究极新手
package Text1; import java.util.ArrayList; import java.util.List; public class Roll { public static void main(String[] args) { // L1集合用来存储m个人s List l1 = new ArrayList(); for (int i = 0; i < 9; i++) { l1.add(i+1); } // L2集合存放出列的人的顺序 List l2 = new ArrayList(); // 假设报到3的出列 int n = 3; while (true) { Object out = l1.get(n - 1); // 报数3 6 9 4 8 5 2 7 1 l2.add(out); // 把3添加到l2集合中 l1.remove(out); // 移除l1中3 n--; // n = 2 4 6 4 2 1 n += 3; // n = 5 7 9 5 7 5 // 4-1=3-1=2-1=1 while (n - 1 >= l1.size()) { n -= l1.size(); } if (l1.size() == 0) { break; } } for (int i = 0; i < l2.size(); i++) { System.out.print(l2.get(i)); } } }
急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下
package com.excel.action; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.write.Label; import jxl.write.NumberFormats; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class JxlTable { private final static JxlTable jxlTable = new JxlTable(); public static JxlTable getInstance() { return jxlTable; } public JxlTable() { } public boolean createTable(String[][] body, String filePath,int rowLength) { boolean createFlag = true; WritableWorkbook book; try { // 根据路径生成excel文件 book = Workbook.createWorkbook(new File(filePath)); // 创建一个sheet名为"表格" WritableSheet sheet = book.createSheet("表格", 0); // 设置NO列宽度 sheet.setColumnView(1, 5); // 去掉整个sheet中的网格线 sheet.getSettings().setShowGridLines(false); Label tempLabel = null; // 表体输出 int bodyLen = body.length; String[][] bodyTempArr = body ; // 循环写入表体内容 for(int i=0;i<rowLength;i++) { for(int j=0;j<body[i].length;j++) { WritableCellFormat tempCellFormat = null; tempCellFormat = getBodyCellStyle(); if (tempCellFormat != null) { if (j == 0 || j == (bodyTempArr.length - 1)) { tempCellFormat.setAlignment(Alignment.CENTRE); } } tempLabel = new Label(1 + j, 2 + i, bodyTempArr[i][j], tempCellFormat); sheet.addCell(tempLabel); } } book.write(); book.close(); } catch (IOException e) { createFlag = false; System.out.println("EXCEL创建失败!"); e.printStackTrace(); } catch (RowsExceededException e) { createFlag = false; System.out.println("EXCEL单元设置创建失败!"); e.printStackTrace(); } catch (WriteException e) { createFlag = false; System.out.println("EXCEL写入失败!"); e.printStackTrace(); } return createFlag; } public WritableCellFormat getHeaderCellStyle() { WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE); WritableCellFormat headerFormat = new WritableCellFormat( NumberFormats.TEXT); try { // 添加字体设置 headerFormat.setFont(font); // 设置单元格背景色:表头为黄色 headerFormat.setBackground(Colour.YELLOW); // 设置表头表格边框样式 // 整个表格线为粗线、黑色 headerFormat.setBorder(Border.ALL, BorderLineStyle.THICK, Colour.BLACK); // 表头内容水平居中显示 headerFormat.setAlignment(Alignment.CENTRE); } catch (WriteException e) { System.out.println("表头单元格样式设置失败!"); } return headerFormat; } public WritableCellFormat getBodyCellStyle() { WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE); WritableCellFormat bodyFormat = new WritableCellFormat(font); try { // 设置单元格背景色:表体为白色 bodyFormat.setBackground(Colour.WHITE); // 设置表头表格边框样式 // 整个表格线为细线、黑色 bodyFormat .setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); } catch (WriteException e) { System.out.println("表体单元格样式设置失败!"); } return bodyFormat; } /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * @param file 读取数据的源Excel * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打开HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex); // 第一行为标题,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { // 注意:一定要设成这个,否则可能会出现乱码 cell.setEncoding(HSSFCell.ENCODING_UTF_16); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去掉字符串右边的空格 * @param str 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); } public static void main(String[] args) throws Exception { File file = new File("F:/tomcat7/webapps/Excel/upload/3.xls"); String[][] result = getData(file, 1); int rowLength = result.length; System.out.println("rowLength="+rowLength); for(int i=0;i<rowLength;i++) { for(int j=0;j<result[i].length;j++) { System.out.print(result[i][j]+"\t\t"); } System.out.println(); } String[][] body = result; String filePath = "F:/tomcat7/webapps/Excel/upload/68.xls"; JxlTable testJxl = JxlTable.getInstance(); boolean flag = testJxl.createTable(body, filePath,rowLength); if (flag) { System.out.println("表格创建成功!!"); } } }
Java性能优化-----for循环优化
要实现一个重组网址的功能,把可能出现的情况给穷举出来,下面代码已经实现(写的比较烂,请见谅),但是在网址比较长的情况下,重组网址的时候遇到大循环问题,导致内存溢出,请各位大侠给优化一下 ``` public static void main(String [] args) { dealUrl("www。qΒ5。c Om"); } private static void dealUrl(String url) { char[] ac = url.toLowerCase().toCharArray(); List<List<String>> charList = new ArrayList<List<String>>(); List<String> tempList = null; for (int i = 0; i < ac.length; i++) { tempList = new ArrayList<String>(); int charIntValue = (int) ac[i]; if (Character.isDigit(ac[i])) {//数字 tempList.add(ac[i]+""); } else if (charIntValue == 46 ||charIntValue == 65294 ){ //点 tempList.add(((char) 46)+"");//半角点 tempList.add(((char) 65294)+"");//全角点 tempList.add("。");//句号 } else if (charIntValue == 79 || charIntValue == 65359 || charIntValue == 111 || charIntValue == 65327){//字母o tempList.add(((char) 79)+"");//半角o tempList.add(((char) 65359)+"");//全角o tempList.add(((char) 111)+"");//半角大写o tempList.add(((char) 65327)+"");//全角大写o tempList.add("0");//零 } else if(charIntValue == 12288 || charIntValue == 32) {//空格 tempList.add(((char) 32)+"");//半角空格 tempList.add(((char) 12288)+"");//全角空格 } else if (charIntValue >= 65281 && charIntValue <= 65374) {//全角 char n = (char) (charIntValue - 65248); tempList.add(ac[i]+"");//全角字符 tempList.add(n+"");//半角字符 tempList.add((ac[i]+"").toUpperCase());//全角大写 tempList.add((n+"").toUpperCase());//半角大写 } else { char n = (char) (65248+charIntValue); tempList.add(ac[i]+"");//半角字符 tempList.add(n+"");//全角字符 tempList.add((ac[i]+"").toUpperCase());//半角大写 tempList.add((n+"").toUpperCase());//全角大写 } charList.add(tempList); } //分组处理 List<List<String>> partChongZuList = new ArrayList<List<String>>(); List<List<String>> partList = null; int allSize = charList.size(); int fenGe = 4; int partCount = allSize/fenGe; if (partCount > 0 ) { for (int i = 0; i < allSize/fenGe; i++) { int tempSize = fenGe*(i+1); if(allSize/tempSize == 1) { tempSize = allSize; } partList = new ArrayList<List<String>>(); for (int k = i*fenGe; k < tempSize; k++) { partList.add(charList.get(k)); } partChongZuList .add(chongZu(partList)); } List<String> aa = chongZu(partChongZuList); System.out.println(aa.size()); } else { List<String> aa = chongZu(charList); System.out.println(aa.size()); } } /** * 重组网址 * @param charList */ private static List<String> chongZu(List<List<String>> charList){ List<String> newStr = new ArrayList<String>(); List<String> tempStr = new ArrayList<String>(); int allLn = charList.size(); for (int i = 0; i < allLn; i++) { List<String> t = charList.get(i); int tSize = t.size(); for (int j = 0; j < tSize; j++) { if (i == 0) { tempStr.add( t.get(j)); } else { String ns = ""; int nSize = newStr.size(); for (int k = 0 ; k < nSize; k++) { ns = newStr.get(k); ns += t.get(j); tempStr.add(ns); } } } newStr.clear(); newStr.addAll(tempStr); tempStr.clear(); System.out.println(newStr.size()); } return newStr; } ```
很简单的,求教为何java程序跳不出cin.hasnext()循环
import java.util.*; public class Main { public static void main(String[] args){ ArrayList<String> num=new ArrayList<String>(); Scanner cin=new Scanner(System.in); int n=0; int a,b,c; while(cin.hasNext()){ String str="",str1=""; str=cin.nextLine(); for(int i=0;i<str.length();i++){ if(str.charAt(i)!='+'&&str.charAt(i)!='-'&&str.charAt(i)!='='){ str1+=String.valueOf(str.charAt(i)); if(num.size()%3==2){ num.add(str1); str1=""; } } else{ num.add(str1); str1=""; } } System.out.println(num); } System.out.println("nihao"); /*for(int j=0;j<num.size()-2;){ System.out.println(j); a=Integer.valueOf(num.get(j)); b=Integer.valueOf(num.get(++j)); c=Integer.valueOf(num.get(++j)); ++j; //System.out.print(b);System.out.print(c); if(a+b==c||a-b==c){ n++; } }*/ } }
java里的Scanner无法继续输入
今天在做习题时发现了一个问题,代码如下 ``` public static void main(String[]args){ boolean xunhuan=true; ArrayList<students>List=new ArrayList<students>(); for(int i=0;i<i+1;i++){ students xuesheng=new students(); System.out.println("please input the student's name "); Scanner name=new Scanner(System.in); xuesheng.setname(name.next()); System.out.println("请输入学生的年龄"); Scanner age=new Scanner(System.in); xuesheng.setage(age.nextInt()); List.add(xuesheng); System.out.println("if you want to continue?"); Scanner decide=new Scanner(System.in); String asd=decide.next(); if(asd.equals("yes")){ continue; } if(asd.equals("no")){ break; } else { System.out.println("输入错误"); break; } } System.out.println("请输入查询学生的名字"); Scanner chaxun=new Scanner(System.in); for(int i=0;i<List.size();i++){ students xuesheng[]=new students[List.size()]; xuesheng=List.toArray(xuesheng); String name=xuesheng[i].getname(); if(name.equals(chaxun)){ xuesheng[i].getaddress(); xuesheng[i].getage(); xuesheng[i].getemail(); break; } } } ``` 其中students是一个自定义类,代码如下 ``` public class students { private String name ; private int age; private int gender; private String phone; private String address; private String email; public void setname(String n){ name=n; } public String getname(){ return name; } public void setphone(String n){ phone=n; } public void setaddress(String n){ address=n; } public void setemail(String n){ email=n; } public void setage(int n){ age=n; } public void gender(int n){ gender=n; } public String getphone(){ return phone; } public String getemail(){ return email; } public String getaddress(){ return address; } public int getage(){ return age; } public int getgender(){ return gender; } public students(){ } public students(String name,int age,int gender,String phone,String address,String email){ setname(name); setaddress(address); setemail(email); setage(age); setphone(phone); } } ``` 在我输入no希望结束循环时,循环确实结束了,但是在显示"请输入查询学生的名字"后在控制台无法继续输入。目测是Scanner的问题,求大神解答。谢谢!
写了一个java的统计考勤 如何和给他设置一个配置文件并且可以通过配置文件修改路径呢
``` import java.io.File; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class zijixiedefangfa { public static void main(String[] args) throws BiffException, IOException, ParseException { String fileName = "D://Io//jisuan.xls"; // Excel文件所在路径 File file = new File(fileName); // 创建文件对象 Workbook wb = Workbook.getWorkbook(file); // 从文件流中获取Excel工作区对象(WorkBook) Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet) int n =0; Date min = null; String firm = ""; //定义公司 String name = ""; //定义姓名 String day = ""; //定义日期 String time_start = ""; //定义最早时间 String time_end = ""; //定义最晚时间 List shuju = new ArrayList(); //定义总的传入集合 List bumen = new ArrayList(); //部门 List xingming = new ArrayList(); //姓名 List date = new ArrayList(); //日期 List earlyTime = new ArrayList(); //上班时间 List endTime = new ArrayList<Date>(); //下班时间 List workTime = new ArrayList(); //上班时间 List chidao = new ArrayList(); //迟到 List zaotui = new ArrayList(); //早退 //最晚上班时间 SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); Date biaozhun = df.parse("10:00:00"); while(n<sheet.getRows()){ //这一天的最早上班时间 firm = sheet.getCell(0,shuju.size()).getContents(); name = sheet.getCell(1,shuju.size()).getContents(); day = sheet.getCell(2,shuju.size()).getContents(); time_start = sheet.getCell(3,shuju.size()).getContents(); bumen.add(sheet.getCell(0,shuju.size()).getContents()); xingming.add(sheet.getCell(1,shuju.size()).getContents()); date.add(sheet.getCell(2,shuju.size()).getContents()); earlyTime.add(sheet.getCell(3,shuju.size()).getContents()); //判断是否迟到 if(df.parse(sheet.getCell(3,shuju.size()).getContents()).getTime()>biaozhun.getTime()){ chidao.add("迟到"); }else{ chidao.add(""); } while(n<sheet.getRows()){ //如果前三条数据一样的话 说明是同一天 if(sheet.getCell(0,n).getContents().equals(firm) && sheet.getCell(1,n).getContents().equals(name) && sheet.getCell(2,n).getContents().equals(day) ){ shuju.add(sheet.getCell(3,n).getContents()); }else{ break; } n++; } //当前三条数据不一样时 退出当前while循环 数组长度减1的下标就是下班时间 endTime.add(sheet.getCell(3,shuju.size()-1).getContents()); } for (int i = 0; i < earlyTime.size(); i++) { try { workTime.add((df.parse((String) endTime.get(i)).getTime()-df.parse((String) earlyTime.get(i)).getTime())/3600000+"小时"); //判断是否早退 if((df.parse((String) endTime.get(i)).getTime()-df.parse((String) earlyTime.get(i)).getTime())/3600000>=8){ zaotui.add(""); }else{ zaotui.add("早退"); } } catch (ParseException e) { e.printStackTrace(); } } //关闭读取流 wb.close(); try { //打开写入流 WritableWorkbook book = Workbook.createWorkbook(new File("D://Io//stu.xls")); // 生成名为“sheet1”的工作表,参数0表示这是第一页 WritableSheet kaoqin = book.createSheet("kaoqin", 0); //写入部门 for (int i = 0; i < bumen.size(); i++) { Label label = new Label(0, i, (String) bumen.get(i)); // 将定义好的单元格添加到工作表中 kaoqin.addCell(label); } //写入姓名 for (int i = 0; i < xingming.size(); i++) { Label label = new Label(1, i, (String) xingming.get(i)); kaoqin.addCell(label); } //写入日期 for (int i = 0; i < date.size(); i++) { Label label = new Label(2, i, (String) date.get(i)); kaoqin.addCell(label); } //写入上班时间 for (int i = 0; i < earlyTime.size(); i++) { Label label = new Label(3, i, (String) earlyTime.get(i)); kaoqin.addCell(label); } //写入下班时间 for (int i = 0; i < endTime.size(); i++) { Label label = new Label(4, i, (String) endTime.get(i)); kaoqin.addCell(label); } //写入总共上班时间 for (int i = 0; i < workTime.size(); i++) { Label label = new Label(5, i, (String) workTime.get(i)) ; kaoqin.addCell(label); } //加入迟到 for (int i = 0; i < chidao.size(); i++) { Label label = new Label(6, i, (String) chidao.get(i)) ; kaoqin.addCell(label); } //写入早退 for (int i = 0; i < zaotui.size(); i++) { Label label = new Label(7, i, (String) zaotui.get(i)) ; kaoqin.addCell(label); } book.write(); //执行写入操作 book.close(); //关闭流 }catch (Exception e) { System.out.println(e); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/201712/07/1512637294_354757.png) ![图片说明](https://img-ask.csdn.net/upload/201712/07/1512637303_72375.png) 需求是想添加一个配置文件 通过配置文件来修改java文件中的读取路径 这个该怎么做啊
java项目转为exe程序,在线等,急
运行cmd是出现没有主清单属性错误,修改了manifest.mf的文件也不能修正错误,求解 代码如下 package com.export; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import jxl.Cell; import jxl.CellType; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; public class ExcelOperater { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("输入横坐标:"); int i = s.nextInt(); System.out.println("输入纵坐标:"); int j = s.nextInt(); System.out.println("取读的坐标为: (" + i + "," + j + ")"); System.out.println("---------------------------------------"); List<int[]> list = new ArrayList<int[]>(); int[] a = { i, j };//读取文件中0行0列单元格中的数据 list.add(a); Scanner str = new Scanner(System.in); System.out.println("输入文件夹路径:"); String str1 = str.nextLine(); System.out.println("输入将写入的文件名及其路径"); String str2 = str.nextLine(); excelRAndW(str1, str2, list); } /** * * @Title: excelRAndW * @Description: 从一个文件夹下的文件中读取指定单元格的数据,写入到指定文件中 * @param @param readFolderURL 读取文件的而文件夹地址 * @param @param writeFileURL 数据写入的文件地址 * @param @param cells 读取文件中的单元格行号和列号数组的集合(要读取文件文件中的那些单元格数据) * @return void 返回类型 * @author: Kristen * @date 2016年2月24日 下午10:55:00 * @throws */ public static void excelRAndW(String readFolderURL, String writeFileURL, List<int[]> cells) { /** * @Fields m:用来标记当前读取的是第几个文件 */ int m = 0; /** * @Fields wwb:读取要写入数据的文件 */ jxl.write.WritableWorkbook wwb = null; /** * @Fields ws:拿到要写入文件的sheet工作表 */ jxl.write.WritableSheet ws = null; try { m = 0; wwb = Workbook.createWorkbook(new File(writeFileURL)); System.out.println("操作开始"); System.out.println("当前写入的文件名为:" + new File(writeFileURL).getName()); System.out.println("--------------------------------------"); ws = wwb.createSheet("第一页", 0); // 读取文件夹 File file = new File(readFolderURL);// 文件目录 //循环读取文件夹下的文件 for (File demoFile : file.listFiles()) { //判断读取的文件是否为后缀名为xls的excel文件 String[] str = demoFile.getName().split("\\."); if (str[str.length - 1].equals("xls")) { System.out.println("当前读取文件名称为:" + demoFile.getName()); InputStream instream = new FileInputStream(demoFile); jxl.Workbook readwb = null; readwb = Workbook.getWorkbook(instream); //得到当前sheet工作表 Sheet readsheet = readwb.getSheet(0); String str1 = null; /** * @Fields n:用来记录当前读取了几列数据 */ int n = 0; //循环读取当前文件中指定单元格的数据 for (int[] cell : cells) { //得到传入参数中制定的单元格数据 Cell c00 = readsheet.getCell(cell[0], cell[1]); str1 = c00.getContents(); System.out.println("当前读取的单元格行号和列号为:(" + cell[0] + "," + cell[1] + ")"); System.out.println("当前读取单元格内容为:" + c00.getContents()); //获得cell具体类型值的方式 if (c00.getType() == CellType.LABEL) { LabelCell labelc00 = (LabelCell) c00; str1 = labelc00.getString(); } else { str1 = str1 + ""; } // 将数据写入到指定文件中 Label label = new Label(n, m, c00.getContents()); System.out.println("当前写入的单元格行号和列号为:(" + m + "," + n + ")"); System.out.println(); ws.addCell(label); n++; } m++; System.out.println("-----------------------------------"); } } wwb.write(); wwb.close(); System.out.println("操作完毕"); } catch (Exception e) { e.printStackTrace(); } } }
HttpClient的循环发送请求,第一次成功,为什么第二次就Read timed out?
public String audits() throws Exception{ init(); /*String ids = "[" + condition.getIds() + "]"; String param="{" + "logId" + ":" + ids + "}";*/ String url = "http://192.168.1.220:8080/servlet/AuditServlet";//测试 PostMethod method = new PostMethod(url); HttpClient httpClient = new HttpClient(); //HttpClient httpClient = new HttpClient(new HttpClientParams(),new SimpleHttpConnectionManager(true)); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(600000); httpClient.getHttpConnectionManager().getParams().setSoTimeout(600000); try { int maxList = 5000; int lastIndex = maxList; Integer allTotal = 0; Integer allFaild = 0; Integer allSuccess = 0; List<String> lists = java.util.Arrays.asList(condition.getIds().split(",")); int count = lists.size(); List<List<String>> idList = new ArrayList<>(); for (int index = 0; index < count; ) { if (lastIndex >= count) { lastIndex = count; idList.add(lists.subList(index, lastIndex)); break; } else { idList.add(lists.subList(index, lastIndex)); index = lastIndex; // 设置下一批下标 lastIndex = index + (maxList - 1); } } if (CollectionUtils.isNotEmpty(idList)) { for (List<String> subList : idList) { String params="{" + "logId" + ":" + subList + "}"; System.out.println("请求接口参数:" + params); //循环发送请求 RequestEntity entity = new StringRequestEntity(params,"application/json","GBK"); System.out.println(1); method.setRequestEntity(entity); System.out.println(2); httpClient.executeMethod(method); System.out.println("请求接口路径url:" + method.getURI().toString()); System.out.println(3); InputStream in = method.getResponseBodyAsStream(); //下面将stream转换为String StringBuffer sb = new StringBuffer(); InputStreamReader isr = new InputStreamReader(in, "GBK"); char[] b = new char[4096]; for(int n; (n = isr.read(b)) != -1;) { sb.append(new String(b, 0, n)); } String returnStr = sb.toString(); System.out.println("返回接口参数:" + returnStr); JSONObject jasonObject = JSONObject.fromObject(returnStr); Map map = (Map)jasonObject; Object total = map.get("total"); Object faild = map.get("faild"); Object success = map.get("success"); allTotal = allTotal + Integer.valueOf(total.toString()); allFaild = allFaild + Integer.valueOf(faild.toString()); allSuccess = allSuccess + Integer.valueOf(success.toString()); } } String totals = allTotal.toString(); String failds = allFaild.toString(); String successs = allSuccess.toString(); condition.setTotal(totals); condition.setFaild(failds); condition.setSuccess(successs); return "index"; } catch (Exception e) { e.printStackTrace(); throw e; } finally { method.releaseConnection(); } } 第一次返回显示是成功的![图片说明](https://img-ask.csdn.net/upload/201912/25/1577256421_630516.png) 第二次就![图片说明](https://img-ask.csdn.net/upload/201912/25/1577256497_930744.png)
itext生成PDF 表格内容循环不出来 要不就是循环的JSON最后一个字段 传的是个JSON
![图片说明](https://img-ask.csdn.net/upload/201602/02/1454382728_597963.png) package com.pgs.core.util.print; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import net.sf.json.JSONArray; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import com.pgs.core.util.JsonUtil; import com.pgs.manage.system.bean.MainAreaCode; /** * * Title: PrinterBHD.java Description:补货单 * * @author songtao * @created 2016-1-29 下午1:45:47 */ public class PrinterBHD { /** * 导出pdf * * @throws Exception */ public static boolean printBHD(String json,int rownumber) { /* * Vector v = new Vector();//dao.selectEx(sql, 0); Map info = (HashMap) * v.get(0); */ // Map info = (HashMap)map.get("aaData"); Rectangle rectPageSize = new Rectangle(PageSize.A4); rectPageSize = rectPageSize.rotate(); Document doc = new Document(rectPageSize, 23, 25, 10, 10); Document document = null; try { BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 设置中文字体 // 第一步:创建一个document对象。 document = new Document(); // 第二步:创建一个PdfWriter实例,将文件输出流指向一个文件。 PdfWriter.getInstance(document, new FileOutputStream( "D:/test/1.pdf")); // 第三步:打开文档。 document.open(); rectPageSize = rectPageSize.rotate(); PdfPCell cell = new PdfPCell(); Font tf = new Font(bfChinese, 10, Font.NORMAL); // 标头 Paragraph tpar = new Paragraph("供应商补货单", new Font(bfChinese, 18, Font.NORMAL)); tpar.setAlignment(Paragraph.ALIGN_CENTER); // 描述. float[] w1 = { 50f, 50f, 50f }; PdfPTable table = new PdfPTable(w1); table.setWidthPercentage(100); // json = // "{\"name\":\"admin\",\"retries\":\"3fff\",\"testname\":\"ddd\",\"testretries\":\"asdasdadsdasdasd\"} "; String sss = "[{\"realInspecAmount\":\"0.0000\",\"skuBrand\":\"小米\",\"index\":\"1\",\"skuSpec\":\"50g\",\"skuName\":\"康师傅方便面\",\"hasGift\":\"0\",\"realInspecCount\":\"90\", \"barcode\":\"6973342956023\",\"skuUnit\": \"壶\",\"channelSkuId\":\"56fb08ffc53611e5a4bab82a72d0db4b\",\"skuCode\":\"7334\",\"purchDetailId\":\"4\",\"billDate\":\"\2016-01-28 00:49:28.0\"}]"; json = "{\"realInspecAmount\":\"0.0000\",\"skuBrand\":\"小米\",\"index\":\"1\",\"skuSpec\":\"50g\",\"skuName\":\"康师傅方便面\",\"hasGift\":\"0\",\"realInspecCount\":\"90\", \"barcode\":\"6973342956023\",\"skuUnit\": \"壶\",\"channelSkuId\":\"56fb08ffc53611e5a4bab82a72d0db4b\",\"skuCode\":\"7334\",\"purchDetailId\":\"4\",\"billDate\":\"\2016-01-28 00:49:28.0\"}"; HashMap<String, Object> map = JsonUtil.json2Map(json); // 第一行 cell = new PdfPCell(new Paragraph("供应商编码:" + map.get("realInspecAmount"), tf)); cell.setBorder(0); cell.setPaddingTop(6f); table.addCell(cell); cell = new PdfPCell( new Paragraph("供应商名称:" + map.get("skuBrand"), tf)); cell.setBorder(0); cell.setPaddingTop(6f); table.addCell(cell); cell = new PdfPCell(new Paragraph("送货地址:" + map.get("testretries"), tf)); cell.setBorder(0); cell.setPaddingTop(6f); table.addCell(cell); // 第二行 cell = new PdfPCell(new Paragraph("补货单号:" + "11111111", tf)); cell.setBorder(0); cell.setPaddingBottom(6f); table.addCell(cell); cell = new PdfPCell(new Paragraph("补货制单人:" + "11111111", tf)); cell.setBorder(0); cell.setPaddingBottom(6f); table.addCell(cell); cell = new PdfPCell( new Paragraph("打印日期:" + map.get("billDate"), tf)); cell.setBorder(0); cell.setPaddingBottom(6f); table.addCell(cell); // 表格 float[] width = { 30f, 150f, 150f, 150f, 150f, 150f, 150f, 150f }; PdfPTable table2 = new PdfPTable(width); table2.setWidthPercentage(100); // 头 String[][] titles = { { "序号", "i", "" }, { "商品编码 ", "sku_code", "" }, { "商品名称", "sku_name", "" }, { "条码", "barcode", "" }, { "规格", "sku_spec", "" }, { "销售单位", "sale_min_unit", "" }, { "需求数", "bhd_sum", "" }, { "实收数", "", "" } }; Paragraph content = null; for (int i = 0; i < titles.length; i++) { content = new Paragraph(titles[i][0], tf); content.setAlignment(Paragraph.ALIGN_LEFT); cell = new PdfPCell(content); table2.addCell(cell); } //String sss = "[{\"b\":\"55\",\"a\":\"55\"},{\"b\":\"55\",\"a\":\"55\"},{\"b\":\"55\",\"a\":\"55\"},{\"b\":\"55\",\"a\":\"55\"},{\"b\":\"55\",\"a\":\"55\"},{\"b\":\"55\",\"a\":\"55\"}]"; ArrayList lll = (ArrayList) JSONArray.toList( JSONArray.fromObject(sss), HashMap.class); System.out.println(((HashMap) lll.get(0)).get("skuBrand")); //创建一个N列的表格控件 PdfPTable pdfTable2 = new PdfPTable(titles[7].length); //设置表格占PDF文档100%宽度 pdfTable2.setWidthPercentage(100); //水平方向表格控件左对齐 pdfTable2.setHorizontalAlignment(PdfPTable.ALIGN_LEFT); //创建一个表格的表头单元格 PdfPCell pdfTableHeaderCell = new PdfPCell(); PdfPCell pdfTableContentCell = new PdfPCell(); pdfTableContentCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); pdfTableContentCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); //表格内容行数的填充 for(int i = 0;i < rownumber;i++){ for(String tableContentInfo : titles[1]){ pdfTableContentCell.setPhrase(new Paragraph(tableContentInfo, tf)); pdfTable2.addCell(pdfTableContentCell); } } // 脚 Paragraph fpar1 = new Paragraph("验货员:____________________" + "供应商送货人: ____________________" + "收货日期:____________________" + "合计 :_____", tf); // 第四步:在文档中增加一个段落。 document.add(tpar); document.add(table); document.add(table2); document.add(pdfTable2); document.add(fpar1); return true; }catch(FileNotFoundException de) { de.printStackTrace(); System.err.println("pdf file: " + de.getMessage()); return false; }catch(DocumentException de) { de.printStackTrace(); System.err.println("document: " + de.getMessage()); return false; }catch(IOException de) { de.printStackTrace(); System.err.println("pdf font: " + de.getMessage()); return false; }finally{ //关闭PDF文档流,OutputStream文件输出流也将在PDF文档流关闭方法内部关闭 if(document!=null){ document.close(); } } } public static void main(String[] args) { printBHD("", 3); } } /* for (int i = 0; i < lll.size(); i++) { for (int j = 0; j < titles.length; j++) { if (titles[j][1].equals("i")) content = new Paragraph(String.valueOf(i+1), tf); else { // 表格内容 for (Map.Entry<String, Object> entry : map.entrySet()) { content = new Paragraph(entry.getValue().toString(), tf); System.out.println(entry.getValue().toString()); } } content.setAlignment(Paragraph.ALIGN_CENTER); cell = new PdfPCell(content); table2.addCell(cell); } }*/ /*// 脚 Paragraph fpar1 = new Paragraph("验货员:____________________" + "供应商送货人: ____________________" + "收货日期:____________________" + "合计 :_____", tf); // 第四步:在文档中增加一个段落。 document.add(tpar); document.add(table); document.add(table2); document.add(fpar1); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (document != null) { // 第五步:关闭文档。 document.close(); } } return true; }*/
Java问题,升序输出的数值如何修改才能带一位小数?
``` package 实训3; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Scanner; public class 实训3_1 { public static void main(String[] args) { // TODO Auto-generated method stub DecimalFormat df=new DecimalFormat("#.0"); System.out.println(" ==== 求和及最大最小值 ===="); System.out.println("请输入逗号分隔的多个数值:"); List<Integer> list = new ArrayList<Integer>(); List<String> listErr = new ArrayList<String>(); Scanner scan = new Scanner(System.in); String read = scan.nextLine(); if (read.indexOf(",") > -1) { read = read.replaceAll(",", ","); } if (read.indexOf(",") > -1) { String[] arg = read.split(","); for (String key : arg) { try { int int_key = Integer.parseInt(key); list.add(int_key); } catch (Exception e) { listErr.add(key); } } if (!listErr.isEmpty()) { System.out.println("发现非数字字符串:" + listErr.toString() + "已经排除"); } if (!list.isEmpty()) { //System.out.println("检测到有效数据:" + list.toString()); Integer[] strings = new Integer[list.size()]; list.toArray(strings); List<Integer> listresult = Arrays.asList(s(strings)); System.out.println("按升序排序后的数值:\n" + listresult.toString()); System.out.println("总个数:" + listresult.size()); int count = 0; for (int i : listresult) { count += i; } System.out.println("各数和:" + df.format((count))); System.out.println("最大值:" + df.format(listresult.get(listresult.size() - 1))); System.out.println("最小值:" + df.format(listresult.get(0))); } } else { System.out.println("抱歉,输入有误"); } } public static Integer[] s(Integer[] arr) { for (int i = 0; i < arr.length - 1; i++) {// 外层循环控制排序趟数 for (int j = 0; j < arr.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次 if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } } ```
关于WebSocket的问题 为什么浏览器关闭后会出一下异常
错误信息 ```java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.net.SocketInputStream.read(SocketInputStream.java:90) at test.UserSocket.run(UserSocket.java:43) java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.net.SocketInputStream.read(SocketInputStream.java:90) at test.UserSocket.run(UserSocket.java:43) ``` 这是一个WebScoket 的小测试。我开了3个浏览器测试正常后,关闭其中一个就会这个异常以下是我的代码麻烦各位大神给看看 ``` package test; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import sun.applet.Main; public class ServerSocketTest { public static List<Socket> clientSocket = new ArrayList<Socket>(); public ServerSocketTest() throws IOException{ ServerSocket ss = new ServerSocket(30000); System.out.println("服务器启动等待客户端连接"); while(true){ Socket s =ss.accept();//等待客户端连接 clientSocket.add(s); System.out.println("客户端总人数"+clientSocket.size()); //为新用户启动线程 new UserSocket(s).start(); } } public static void main(String[] args) throws IOException { new ServerSocketTest(); } } ``` 下面是线程代码 ``` package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.SocketException; import java.security.MessageDigest; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import sun.misc.BASE64Encoder; public class UserSocket extends Thread{ private Socket socket; public UserSocket(Socket socke){ this.socket = socke; } @Override public void run() { try { InputStream is = socket.getInputStream();//获取用户输入流 OutputStream ops = socket.getOutputStream();//获取用户输出流 byte[] buff = new byte[1024];//字节 String red = ""; //用了存放客户端请求过来的内容(客户端信息) // 读取数据,此时建立与wabSocket的握手 int count = is.read(buff);//读取客户端请求内容的长度 if(count > 0){ //客户端请求数据转化字符串 red = new String(buff,0,count); //获取WebSocket的值 String seckey = getSecWebSocketKey(red); String response = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: " + "websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + getSecWebSocketAccept(seckey) + "\r\n\r\n"; //推送向客户端 ops.write(response.getBytes("utf-8")); int hasRedad = 0; // 不断读取WebSocket发送过来的数据 System.out.println("while循环前,等待前端推送数据。。。。。。。。。。。。"); while((hasRedad = is.read(buff))>0){//判断循环读取 System.out.println("后台接收到值,进入While循环处理"); /* * 因为WebSocket发送过来的数据遁寻了一定的协议格式, 其中第3~6个字节是数据掩码, * 从第七个字节开始才是真正的有效数据。 因此程序使用第3~6个字节对后面的数据进行了处理 */ for (int i = 0; i < hasRedad - 6; i++) { buff[i + 6] = (byte) (buff[i % 4 + 2] ^ buff[i + 6]); } //获得从浏览器发送过来的数据 String pushMsg = new String(buff,6,hasRedad - 6, "utf-8");//第一个值要读取的字节,从第几个开始读取,字符串的总长度,字符集 //便利Socket集合,向每个Socket对象发送信息 for (Iterator<Socket> it = ServerSocketTest.clientSocket.iterator();it.hasNext(); ) { try { Socket s = it.next(); byte[] pushHead = new byte[2]; pushHead[0] = buff[0]; pushHead[1] = (byte) pushMsg.getBytes("utf-8").length; //发送前两个字节 s.getOutputStream().write(pushHead); //发送有效数据 s.getOutputStream().write(pushMsg.getBytes("utf-8")); } catch (SocketException e) { //如果捕获到异常将其从集合中删除 // 如果捕捉到异常,表明该Socket已经关闭 it.remove(); } } } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } // 获取WebSocket请求的Seckey private String getSecWebSocketKey(String req) { // 构建正则表达式,获取Sec-WebSocket-Key:后面的内容 Pattern p = Pattern.compile("^(Sec-WebSocket-Key:).+", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); Matcher m = p.matcher(req); if (m.find()) { // 提取Sec-WebSocket-Key String foundstring = m.group(); return foundstring.split(":")[1].trim(); } else { return null; } } // 根据WebSocket请求的Seckey计算SecAccept private String getSecWebSocketAccept(String key) throws Exception { String guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; key += guid; MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(key.getBytes("ISO-8859-1"), 0, key.length()); byte[] shalHash = md.digest(); BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(shalHash); } } ``` 刚才又调试了几次,发现了一些新的东西。 同时开启多个页面进行程序测试。当其中一个页面关闭时,这个页面向后台发送了一条数据,后台接收后处理并发送给其他页面。但是这个页面关闭了,本线程下发送给其他页面的信息全部发送失败。由于发送信息发送不出去,本线程就在此处 ``` } catch (SocketException e) { //如果捕获到异常将其从集合中删除 // 如果捕捉到异常,表明该Socket已经关闭 it.remove(); } ``` 把其他的Socket对象全部删除了,导致所有的Socket对象连接都断开了。求教大神们有没有什么靠谱的解决办法
java WebSocket 相关 前端已经接收到值了,为什么后台代码还是会出异常呀
java Web Socket 初学者 最近遇到了一个问题 ,就是在后台向前端推送数据时前台页面明明接收到了值,但是后台代码还是会出异常这是为什么! 下面是我写的代码 这个是主线程代码 ``` package test; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ChatServer { // 记录所有客户端的Socket public static List<Socket> clientSocket = new ArrayList<Socket>(); public ChatServer() throws Exception { // 创建ServerSocket,准备接受客户端连接 ServerSocket ss = new ServerSocket(30000); while (true) { System.out.println(clientSocket.size()); // 接收客户端连接 Socket socket = ss.accept(); // 将客户端Socket添加到clientSocket集合中 clientSocket.add(socket); // 启动线程 new ServerThread(socket).start(); } } public static void main(String[] args) throws Exception { new ChatServer(); } } ``` 下面是线程内代码 ``` package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.security.MessageDigest; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import sun.misc.BASE64Encoder; public class ServerThread extends Thread{ private Socket socket; public ServerThread(Socket socket) { this.socket = socket; } private int as = 0; @SuppressWarnings("finally") public void run() { System.out.println("为用户:" + socket.getInetAddress().getHostName() + "开启线程"); try { // 得到Socket对应的输入流 InputStream is = socket.getInputStream(); // 得到Socket对应的输出流 OutputStream out = socket.getOutputStream(); byte[] buff = new byte[1024]; String req = ""; // 读取数据,此时建立与wabSocket的握手 int count = is.read(buff); // 如果读取的数据长度>0 if (count > 0) { // 将读取的数据转化为字符串 req = new String(buff, 0, count); // System.out.println("握手请求:" + req);// req = 客户端信息 // 获取WebSocket的值 String seckey = getSecWebSocketKey(req); String response = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: " + "websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + getSecWebSocketAccept(seckey) + "\r\n\r\n"; System.out.println("secAccept = " + getSecWebSocketAccept(seckey)); //推送客户端 out.write(response.getBytes("utf-8")); int hasRedad = 0; // 不断读取WebSocket发送过来的数据 System.out.println("while循环前,等待前端推送数据。。。。。。。。。。。。"); while ((hasRedad = is.read(buff)) > 0) { //必须这么写 System.out.println("接收到客户端" + socket.getInetAddress().getHostName() + "字节数:" + hasRedad); /* * 因为WebSocket发送过来的数据遁寻了一定的协议格式, 其中第3~6个字节是数据掩码, * 从第七个字节开始才是真正的有效数据。 因此程序使用第3~6个字节对后面的数据进行了处理 */ for (int i = 0; i < hasRedad - 6; i++) { buff[i+6] = (byte)(buff[i%4+2]^ buff[i+6]); } //获得从浏览器发送过来的数据 String pushMsg = new String(buff, 6, hasRedad-6, "utf-8"); //遍历Socket集合,依次向每个Socket发送数据 int a=1; for(Iterator<Socket> it = ChatServer.clientSocket.iterator();it.hasNext();){ //获得集合中的Socket对象 System.out.println("Socket集合中有:"+ChatServer.clientSocket.size()+"个对象等待发送信息"); Socket s = it.next(); //发送数据时,第一个字节必须与读到的第一个字节相同 byte[] pushHead = new byte[2]; pushHead[0] = buff[0]; //发送数据时,第二个字节记录 发送数据的长度 pushHead[1] = (byte)pushMsg.getBytes("utf-8").length; try { System.out.println("web推送前"); System.out.println("Socket 的InputStream值:"+is.available()); System.out.println("web推送中........"); //发送前两个字节 s.getOutputStream().write(pushHead); //发送有效数据 s.getOutputStream().write(pushMsg.getBytes("utf-8")); } catch (Exception e) { System.out.println("向前端推送数据后发生了异常"); e.printStackTrace(); }finally{ //如果s.getInputStream().available() == 0,表明该Scoket已经关闭 //将该Socket从Socket集合中删除 System.out.println("从集合中删除该Socket对象"); ChatServer.clientSocket.remove(s); a=2; break; } } System.out.println("WEB 推送后"); if(a==2){ break; } } } } catch (Exception e) { System.out.println("有一个Socket对象关闭了,该对象线程结束"); }finally{ try { //关闭Socket System.out.println("关闭该Socket对象"); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // 获取WebSocket请求的Seckey private String getSecWebSocketKey(String req) { // 构建正则表达式,获取Sec-WebSocket-Key:后面的内容 Pattern p = Pattern.compile("^(Sec-WebSocket-Key:).+",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); Matcher m = p.matcher(req); if (m.find()) { // 提取Sec-WebSocket-Key String foundstring = m.group(); return foundstring.split(":")[1].trim(); } else { return null; } } // 根据WebSocket请求的Seckey计算SecAccept private String getSecWebSocketAccept(String key) throws Exception { String guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; key += guid; MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(key.getBytes("ISO-8859-1"), 0, key.length()); byte[] shalHash = md.digest(); BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(shalHash); } } ``` 没有错误信息,不报错的 但是就是程序走不了了
三维装箱(Java)求优化或给出更好的代码方案
代码效率太低,货品一多会导致内存溢出.求优化或给出更好的解决方案 ``` package com.example.demo.box; import java.util.*; public class GoodsInBox { /*箱子的型号,盛放空间*/ private Map<Integer,Map<String,Object>> boxTypeArr; /*订单中的商品*/ private Map<Integer,Map<String,Integer>> orderItemArr; /*计算结果*/ private Map<String /*箱子型号*/,Integer/*需要几个*/> result=new HashMap<String,Integer>(); /*计算过程数据,有效的空间列表*/ private List<String> inboxinfo=new ArrayList<String>(); /** * 根据箱型以及订单中的商品,返回每个箱型需要箱子多少只。如果没有任何的箱子能装下某一款超大商品的时候,抛出异常 * * @param linkedHashMap * @param orderItemArr * @return */ public GoodsInBox(LinkedHashMap<Integer, Map<String, Object>> linkedHashMap, Map<Integer, Map<String, Integer>> orderItemArr){ this.boxTypeArr = linkedHashMap; this.orderItemArr=orderItemArr; //开始执行 run(); } /** * boxType.get(boxkey) value{boxcode=1, l=100, w=100, h=120} * boxType.get(boxkey) {boxcode=2, l=200, w=150, h=180} * boxType.get(boxkey) {boxcode=3, l=500, w=600, h=700} */ //执行装箱 private void run(){ Integer[] boxkeys=boxTypeArr.keySet().toArray(new Integer[]{}); aBoxType: for (Integer boxkey : boxkeys) { tryInSpance(boxTypeArr.get(boxkey), orderItemArr); } } /** * 每次测试1块空间,和全部商品,将商品一次向空间转移,放进去后产生新的3块空间,同时商品的数量再减少,直到商品全部转移; * @param boxMap * @param products */ private void tryInSpance(Map<String/* 长l宽w高h */, Object/* 厘米 */> boxMap/* 某1个盒子或者是1个剩餘空間 */, Map<Integer, Map<String, Integer>> products/* 多件商品,装进去一件,删除一件,直到删没了为止 */){ if (null == boxMap || null == products) { return; } java.util.Iterator<Integer> gks = products.keySet().iterator(); //对存储商品的Map进行遍历 while (gks.hasNext()) { Integer oid = gks.next(); //oid就是products的Key Map<String, Integer> g = products.get(oid); //g是具体的商品属性 // 商品数量 Integer num = g.get("n"); //获取某种商品的数量 if (0 == num) { return; } // 多少件商品就循环多少次,每次处理一件; for (int i = num; i > 0; i--) { String boxcode = boxMap.get("boxcode").toString().concat(":").concat(oid.toString()); //箱的Kye:商品的Key 1:1 Integer bl = Integer.valueOf(boxMap.get("l").toString()); //箱的长 Integer bw = Integer.valueOf(boxMap.get("w").toString()); //箱的宽 Integer bh = Integer.valueOf(boxMap.get("h").toString()); //箱的高 Integer gl = g.get("l"); //商品的长 Integer gw = g.get("w"); //商品的宽 Integer gh = g.get("h"); //商品的高 // 正面放置商品 if ((bl - gl) >= 0 && (bw - gw) >= 0 && (bh - gh) >= 0) { // 可以放入的情况下先减少商品的数量; g.put("n", i - 1); // 加入统计 inboxinfo.add(boxcode); // 正放的3块剩余空间 Map<String, Object> leftover; // 第一块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-1:").concat(oid.toString())); leftover.put("l", gl); leftover.put("w", gw); leftover.put("h", bh - gh); tryInSpance(leftover, products); // 第二块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-2:").concat(oid.toString())); leftover.put("l", gl); leftover.put("w", bw - gw); leftover.put("h", bh); tryInSpance(leftover, products); // 第三块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-3:").concat(oid.toString())); leftover.put("l", bl - gl); leftover.put("w", bw); leftover.put("h", bh); tryInSpance(leftover, products); // 侧面放置商品 } else if ((bl - gw) >= 0 && (bw - gl) >= 0 && (bh - gh) >= 0) { // 可以放入的情况下先减少商品的数量; g.put("n", i - 1); // 加入统计 inboxinfo.add(boxcode); // 侧放的3块剩余空间 Map<String, Object> leftover; // 第一块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-1:").concat(oid.toString())); leftover.put("l", gl); leftover.put("w", gw); leftover.put("h", bh - gh); tryInSpance(leftover, products); // 第二块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-2:").concat(oid.toString())); leftover.put("l", bw - gl); leftover.put("w", gw); leftover.put("h", bh); tryInSpance(leftover, products); // 第三块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-3:").concat(oid.toString())); leftover.put("l", bl - gw); leftover.put("w", bw); leftover.put("h", bh); tryInSpance(leftover, products); // 卧倒放置商品 } else if (g.get("t") == 1 && (bl - gh) >= 0 && (bw - gw) >= 0 && (bw - gl) >= 0) { // 可以放入的情况下先减少商品的数量; g.put("n", i - 1); // 加入统计 inboxinfo.add(boxcode); // 侧放的3块剩余空间 Map<String, Object> leftover; // 第一块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-1:").concat(oid.toString())); leftover.put("l", gh); leftover.put("w", gw); leftover.put("h", bh - gh); tryInSpance(leftover, products); // 第二块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-2:").concat(oid.toString())); leftover.put("l", bw - gw); leftover.put("w", gh); leftover.put("h", bh); tryInSpance(leftover, products); // 第三块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-3:").concat(oid.toString())); leftover.put("l", bl - gh); leftover.put("w", bw); leftover.put("h", bh); tryInSpance(leftover, products); // 侧卧放置商品 } else if (g.get("t") == 1 && (bl - gw) >= 0 && (bh - gl) >= 0 && (bw - gh) >= 0) { // 可以放入的情况下先减少商品的数量; g.put("n", i - 1); // 加入统计 inboxinfo.add(boxcode); // 侧放的3块剩余空间 Map<String, Object> leftover; // 第一块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-1:").concat(oid.toString())); leftover.put("l", gw); leftover.put("w", gh); leftover.put("h", bh - gl); tryInSpance(leftover, products); // 第二块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-2:").concat(oid.toString())); leftover.put("l", bw - gh); leftover.put("w", gw); leftover.put("h", bh); tryInSpance(leftover, products); // 第三块空间 leftover = new HashMap<String, Object>(); leftover.put("boxcode", boxcode.concat("-3:").concat(oid.toString())); leftover.put("l", bl - gw); leftover.put("w", bw); leftover.put("h", bh); tryInSpance(leftover, products); } } } } /** * 返回计算后得到的结果 * @return */ public Map<String/* 箱子的型号 */, Integer/* 需要几个 */> getResult(){ result.clear(); // 这里开始数数了! // 所有装入盒子的商品都放到列表中了, // length为特定长度(3)的为商品第一次装入箱子,其它过长(>3)的都是小件商品塞到之前的箱子里的。 // 以上运行的结果应该是:最少需要1号箱两个,3号箱1个, for (String code : inboxinfo) { if (code.length() == 3) { String boxno = String.valueOf(code.split(":")[0]); Integer num = result.get(boxno); if (null == num) num = 0; num = num + 1; result.put(boxno + "", num); } } return this.result; } public static void main(String[] arproducts) { GoodsInBox gb = new GoodsInBox(/* 箱子的规格 */new LinkedHashMap<Integer, Map<String, Object>>() { { // 假设有大中小三种型号的箱子,如下描述: /*- * 要求数据从数据库中取出来的时候是按照 箱子型号大小系数 (l长+w款+h高) 从小到大的顺序排好序的。這樣裝箱后可以得到近似合理的解 */ // 1,小箱 this.put(1, new LinkedHashMap<String, Object>() { { // 小箱 长 100厘米,宽100厘米,高120厘米; this.put("boxcode", 1); this.put("l", 100); this.put("w", 100); this.put("h", 120); } }); // 2,中箱 this.put(2, new LinkedHashMap<String, Object>() { { // 中箱 长200厘米,宽150厘米,高180厘米 this.put("boxcode", 2); this.put("l", 200); this.put("w", 150); this.put("h", 180); } }); // 3,大箱 this.put(3, new LinkedHashMap<String, Object>() { { // 大箱长500厘米宽600厘米高700厘米 this.put("boxcode", 3); this.put("l", 500); this.put("w", 600); this.put("h", 700); } }); } }, /* 订单 */ new LinkedHashMap<Integer, Map<String, Integer>>() { { /*- * 要求数据从数据库中取出来的时候是按照 商品大小系数 (l长+w款+h高) 从大到小的顺序排好序的。這樣裝箱后可以得到近似合理的解 */ // 1,卧室用的小冰箱1个 this.put(1, new LinkedHashMap<String, Integer>() { { // 长 400厘米,宽500厘米,高600厘米; this.put("l", 400); this.put("w", 500); this.put("h", 600); this.put("n", 10); this.put("t", 0);// 是否可以躺着放,0,否;1,是,这个不能躺着放,而且所有商品均不能倒置,而且倒置和正着放置所占用空间一样。 } }); // 1,电脑主机箱2台 this.put(2, new LinkedHashMap<String, Integer>() { { // 长 57厘米,宽21厘米,高52厘米; this.put("l", 1); this.put("w", 1); this.put("h", 1); this.put("n", 5); this.put("t", 1);// 是否可以躺着放,0,否;1,是 } }); // 2,苹果笔记本电脑10台 this.put(3, new LinkedHashMap<String, Integer>() { { // 长 33厘米,宽24厘米,高6厘米; this.put("l", 1); this.put("w", 1); this.put("h", 1); this.put("n", 5); this.put("t", 1);// 是否可以躺着放,0,否;1,是 } }); } }); // 1号箱子 2只,分别装笔记本和小键盘; 3号箱子:1只用来装冰箱 System.out.println(gb.getResult().toString()); } } ```
求强连通分量入门题hdu1269迷宫城堡wa掉了大神帮忙看看
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17155 Accepted Submission(s): 7507 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。 Input 输入包含多组数据,输入的第一行有两个数:N和M,接下来的M行每行有两个数a和b,表示了一条通道可以从A房间来到B房间。文件最后以两个0结束。 Output 对于输入的每组数据,如果任意两个房间都是相互连接的,输出"Yes",否则输出"No"。 Sample Input 3 3 1 2 2 3 3 1 3 3 1 2 2 3 3 2 0 0 Sample Output Yes No 下面是我写了 注释是我自己理解的不知道对不对 求指点! import java.util.ArrayList; import java.util.Scanner; import java.util.Stack; public class Main { private static int n; private static int m; private static int[] dfn; private static int[] low; private static int time; private static Stack<Integer> stack; private static int sum; private static ArrayList[] list; public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { scn(scanner);//输入 bud(); //算法 out(); //输出 } } private static void out() { // TODO 自动生成的方法存根 if (sum==1) { System.out.println("Yes"); }else { System.out.println("No"); } } private static void bud() { dfn = new int [n+1];//次序数组 low = new int [n+1];//记录此点所能到达最早栈中的值 time = 0;//时间戳 sum = 0;//记录此图有几个强连通分量 stack = new Stack<Integer>(); //强连通分量一定是个环 此栈相当于这个环中的任意一条弧 Targan_bfs(1); } private static void Targan_bfs(int i) { dfn[i] = low[i] = ++time;//low先初始跟次序相同 stack.push(i);//将点i压入栈 //之后进行bfs搜索 枚举每一种成环的可能 for (int j = 0; j <list[i].size() ; j++) { int k= (int) list[i].get(j); if(dfn[k]==0){ Targan_bfs(k); low[i] = Math.min(low[i], low[k]); //如果进行了递归存在下一个连通点并且这点不在栈里 //那么根据low的定义 low = min{low[i],low[k]} }else { low[i] = Math.min(low[i], dfn[k]); //不进行递归那么表示下一个连通点在栈中 //根据low的的定义 low = min{low[i],dnf[k]} } } if (low[i]==dfn[i]) { //当low[i]=dfn[i]表示他自身构成了环 所以他是一个独立的连通分量 sum ++;int k = 0; //为什么循环出栈呢 //如果所有的点都相互连通那么在最后搜到的点low【最后】=low【首先】 //同理 每当你找到一个强连通分量那么请都弹出去 do { k = stack.pop(); } while (low[k]!=dfn[k]&&!stack.isEmpty()); } } private static void scn(Scanner scanner) { n = scanner.nextInt(); m = scanner.nextInt(); if(n==0&&m==0){java.lang.System.exit(0);} list = new ArrayList[n+1]; for(int i=0;i<=n;i++){list[i]=new ArrayList<Integer>();} for (int i = 0; i <m; i++) { int a = scanner.nextInt(); int b = scanner.nextInt(); list[a].add(b); } } }
循环读取一个文件夹下的文件,一共不到两千文件只system.println出200多个来,希望大神指点问题所在
``` package com.ncs.util; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; public class GetDomainName { /** * * @param folderPath IP路径 * @param checkPath 检索路径 * @param outPath 输出路径(需创建一个空文件) */ public static void getDnsIp(String folderPath,String checkPath,String outPath) { int line=0; int line1=0; ArrayList<String> listIp = new ArrayList<>(); try { //System.out.println("读取文件"); // FileWriter fw = new FileWriter(outPath); File file = new File(folderPath); if(file.isFile()) { // System.out.println("获取文件"+file.getPath()); BufferedReader reader = new BufferedReader(new FileReader(file)); String tempString=null; while ((tempString = reader.readLine()) != null) { line++; System.out.println("第"+line+"个数据"); /*检索域名*/ listIp.add(tempString); } File file2 = new File(checkPath); if(file2.isDirectory()) { // System.out.println("取得检索文件夹:"+file2.getPath()); File[] tempList = file2.listFiles(); // System.out.println("文件总数:"+tempList.length); for (File file3:tempList) { if(file3.isFile()) { line1++; System.out.println("第"+line1+"个文件"); BufferedReader reader1 = new BufferedReader(new FileReader(file3)); String tempString1=null; // System.out.println("检索IP结果:"); while((tempString1 = reader1.readLine()) != null) { String[] split = tempString1.split("\\|"); // System.out.println("域名:"+split[0]); String str=null; for (int i = 0; i < listIp.size(); i++) { if(split[2].equals(listIp.get(i)) ) { //System.out.println("第"+line1+"行"+tempString1); // System.out.println("域名:"+split[0]+"IP:"+tempString); str=split[0]+"|"+listIp.get(i)+"\r\n"; FileWriter fw = new FileWriter(outPath, true); fw.write(str+"\r\n"); fw.close(); } } } reader1.close(); }else { System.out.println("出错"); return; } } } reader.close(); } } catch (Exception e) { // TODO: handle exception } System.out.println("结束"+line1); } public static void main(String[] args) { getDnsIp("C:\\Users\\zmz\\Desktop\\a.txt","C:\\Users\\zmz\\Desktop\\cqdx","C:\\Users\\zmz\\Desktop\\s.txt"); } } ```
推荐 130 个令你眼前一亮的网站,总有一个用得着
总结了大学生活两年来,发现的 130 余个黑科技网站,总有一个会让你眼前一亮,赶紧收藏!
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Flutter 会不会被苹果限制其发展?
这个可能性是存在的,而且不止是 flutter、react-native 、weex 、uni-app 、taro 、Hippy等都存在这个风险,虽然有些框架对比起 flutter 其他框架存在时间稍长,但是这不可否认它们一直都存在这个风向。 只要不是平台自己的亲儿子,那么肯定存在被限制发展的风险,所以这件事上是风险和收益之间的博弈,这是一个“后妈和前任之间的太极。” 先说现状 如今各大平台,如:...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
Linux必懂知识大总结(补)
关机 1. 数据同步写入磁盘 sync 为了加快对磁盘上文件的读写速度,位于内存中的文件数据不会立即同步到磁盘上,因此关机之前需要先进行 sync 同步操作。 2. shutdown # /sbin/shutdown [-krhc] [时间] [警告讯息] -k : 不会关机,只是发送警告讯息,通知所有在线的用户 -r : 将系统的服务停掉后就重新启动 -h : 将系统的服务停掉后就...
立即提问