为什么在try外面声明Scanner对象,只能在try中使用一次,第二次就不能用了,try在一个死循环中
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int age;
                //这里是为了判断他输入的是否为int数值
                //不是的话报错提示进入下一次输入
        for (;;){
            System.out.println("请输入年龄:");
            try {
                //Scanner放外面内部访问不到
                //第一次进来正常使用
                //循环第二次进来就没有输入操作了
                age = sc.nextInt();
            }catch (Exception e){
                e.printStackTrace();
                continue;
            }
            break;
        }

//一次错误的输入之后就会循环报错,循环没有问题 但是再没有输入操作了

请输入年龄:
asf
java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.work.EX.main(EX.java:13)
请输入年龄:
java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.work.EX.main(EX.java:13)
请输入年龄:
java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.work.EX.main(EX.java:13)
请输入年龄:
java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.work.EX.main(EX.java:13)

3个回答

把Scanner sc = new Scanner(System.in);放进for循环里

weixin_43082585
weixin_43082585 不对,那你把Scanner sc = new Scanner(System.in);放进for循环里啊,你第二次循环的时候又没有输入,所以一直是之前输进去的
6 个月之前 回复
weixin_43082585
weixin_43082585 回复weixin_45452861: 你把for循环放在try里试试
6 个月之前 回复
weixin_45452861
weixin_45452861 不是报错之后continue不会走到break进入下一次循环了就,问题是他会一直循环报错下一步进来没办法 进行输入
6 个月之前 回复

呃呃呃,最后break跳出循环了

for循环里没加条件,然后下面用了break,直接跳出循环了

weixin_45452861
weixin_45452861 catchl里面有continue 报错之后会进入下一次循环的 但是循环会继续 但是从第二次开始就没有办法输入了 只是一直在报错输出语句也会正常输出
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于Java中使用Scanner读取文件内容不准确的问题
我使用Scanner创建了一个有几万个数据的文本文件的input,然后依次读取每个数据并打印,为什么最开始打印出的数据和我文件中的数据不同,请大神解答 ``` try(Scanner input = new Scanner(new File("data0.txt"));){ while(input.hasNext()) { System.out.println(input.nextDouble()); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201710/15/1508031597_802826.png) ![图片说明](https://img-ask.csdn.net/upload/201710/15/1508031608_937949.png)
java中的try-catch-finally中的问题
就是在java中,比如要求两个数的余数的简单例子。 public class task2 { public static void main(String args[]) { Scanner s=new Scanner(System.in); int a,b,c; try { while(true) { a=s.nextInt(); b=s.nextInt(); c=a%b; System.out.println("余数为:"+c); } } catch (Exception e) { System.out.println("输入有误,请重新输入,只能输入数字,并且除数不能为0"); } } } 这样只能是在输入正确的情况下,不断地输入,如果捕获了异常,就不能继续输入, 不要说while()放外面,因为while()循环的是数据,而不是一直捕获异常~~ 求大神帮助~~~
Java基础学习中Scanner类nextInt方法问题
``` import java.util.*; public class Practice { public static String prompt = "How are you? "; public static void main(String[] args) { Scanner console = new Scanner(System.in); System.out.print(prompt); //int year=getYourAge(console); System.out.println("Your age is "+getYourAge(console)); } public static int getYourAge(Scanner console){ while(!console.hasNextInt()){ console.next(); System.out.println("Not an integer;try again!"); System.out.print(prompt); } return console.nextInt(); } } ``` 我想问的是,当程序运行到return语句的时候,为什么不等待新的一次输入呢? ![图片说明](https://img-ask.csdn.net/upload/201510/21/1445426553_319276.png) 这是某次我的运行结果,为什么我输入18之后,到了return语句,不等待 我新的一次输入?平时无论何时运行类似的nextInt()语句都会等待输入的。 我哪里理解出错了?
求教,关于scanner的close方法弹 NoSuchElementException
先谢谢各位大神,代码如下: import java.util.Scanner; import java.util.Calendar; public class Test { static int i,j; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("欢迎光临!"); long begin=Calendar.getInstance().getTimeInMillis(); //预定房间 Hostel h=new Hostel(); //调用房间显示方法 h.show(); //选择房间 while(true){ try{ select1(); select2(); //调用房间预订方法 if(h.book(i,j)) break; }catch (OutIndexOfException e){ e.printStackTrace(); } } //退订房间 while(true){ try{ select1(); select2(); if(h.unsubscribe(i,j)) break; }catch (OutIndexOfException e){ e.printStackTrace(); } } System.gc(); long end=Calendar.getInstance().getTimeInMillis(); System.out.println(end-begin); } public static int select1() throws OutIndexOfException{ Scanner s1=new Scanner(System.in); i=s1.nextInt()-1; // s1.close(); if(i<0||i>4){ throw new OutIndexOfException("第"+(i+1)+"层没有房间"); } return i; } public static int select2() throws OutIndexOfException{ Scanner s2=new Scanner(System.in); j=(s2.nextInt())-1; //s2.close(); if(j<0||j>9){ throw new OutIndexOfException("第"+(j+1)+"间房不对外预定"); } return j; } } 代码中注释掉的s1,s2方法,如果不注释掉就会爆异常Exception in thread "main" java.util.NoSuchElementException,如果注释掉可以运行,但是扫描器没关闭,感觉不安全!!! 还有个问题是显示问题两个select方法中的i4和j9是i<0或者j>4,j<0或者j>9;![图片说明](https://img-ask.csdn.net/upload/201509/29/1443539958_166963.gif)![图片说明](https://img-ask.csdn.net/upload/201509/29/1443539973_21712.gif)
java try-catch 新手求助
public static void main(String[] args) { Scanner input1=new Scanner(System.in); String[] books={"","军事","历史","建筑","文学","数学","计算机","小说","百科"}; label1: while(true){ Chaintest t1=new Chaintest(); Chaintest t2=new Chaintest(); System.out.println("请选择查询方法:a.图书信息 b.图书序号"); String choose=input1.next(); if(choose .equals ( "a")==true ){ System.out.println("选择了a方法"); try { t1.getBookname(books); } catch (Exception e) { e.printStackTrace(); } private static String getBookname(String[] newBooks) throws Exception{ Scanner input2=new Scanner(System.in);//储存图书名字信息 label2: while(true) System.out.println("请输入书名:"); String choose2=input2.next(); int i=0; if (newBooks [i] .contentEquals(choose2)==false) throw new Exception("很抱歉,您所输入的书籍不存在。请查询其他书目"); else System.out.println("您所需要的书籍为:"+newBooks[i]); } } 想请教一下。 我在main方法中创建一个一位数组(用于保存图书信息),需要用户输入书籍名称检测该图书是否存在数组中。如果我输入的图书名称在数组里找不到,想重新返回getBookname中输入,在catch块中应该添加什么语言呢? 感谢回答!
Java中抛出异常后,catch中的解决办法不是很懂
public static void main(String[] args) { int xuan; Scanner in=new Scanner(System.in); while (true) { System.out.println("请选择A冒险,B查看人物属性,C恢复体力"); System.out.println("====================================="); try{ xuan = in.nextInt(); if (xuan==1) { System.out.println("1"); } else if (xuan==2) { System.out.println("2"); } else if (xuan==3) { System.out.println("你的血和魔法值都已恢复到满值状态!"); System.out.println("====================================="); } else { System.out.println("你的选择有误!"); } }catch(Exception e){ //in=new Scanner(System.in); System.out.println("11"); } } } # catch中的new了一个Scanner对象,不知道为什么new了就可以达到我想要的结果,就是在循环中如果输入了一个错误的类型,提示错误,下一次循环可以再一次输入,然后再来try catch输入的类型符合不符合想要的类型.解决的办法有了就是在catch中new一个新的Scanner对象,为什么要新new一个就可以了呢?不new就会死循环.
有人帮看一下吗,为什么这边请求不到数据,是读取的代码不能写在run里面吗,初学者,轻喷,谁能解决,给80个币
我这边只有客户端代码,请求服务端, 服务端返回结构如下,已经能够发送, 最主要问题是打日志, 但是接收不了返回,返回结构如图: ![图片说明](https://img-ask.csdn.net/upload/201912/13/1576218172_423143.png) ``` import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client extends Thread { Socket socket = null; public String result = ""; public String realString = ""; public BufferedReader RD = null; InputStream inputRealStream = null; // public static String in = "1003200172{\"trxZone\":\"00502\",\"programName\":\"e\",\"id\":\"abcd1234\",\"img1\":\"jhskagkfhdsklgjhaglhlkjdghlksdhflsdhfihoefrgih\",\"imgFace1\":\"50,60,100,120\",\"hack1\":1,\"customerAgreement\":1}"; public String in = ""; public Client(String host, int port, String in) { try { in = new String(in.getBytes(),"GBK"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.in = in; try { socket = new Socket(host, port); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // public void shutDown() throws IOException { // if (socket != null) { // synchronized (socket) { // socket.close(); // } // } // System.out.println("StopClose.shutDown() complete"); // } @Override public void run() { new sendMessThread().start(); super.run(); try { InputStream s = socket.getInputStream(); byte[] buf = new byte[1024]; int len = 0; while ((len = s.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } class sendMessThread extends Thread{ @Override public void run() { super.run(); Scanner scanner=null; OutputStream os= null; try { scanner=new Scanner(System.in); os= socket.getOutputStream(); // String in; // do { // in=scanner.next(); // os.write((""+in).getBytes()); // os.flush(); // } while (!in.equals("bye")); for(int i =0;i<1;i++) { os.write((""+in).getBytes()); os.flush(); } BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK")); String str = ""; InputStream inputStream = socket.getInputStream(); System.out.println("RESULT AS FOLLOWING:"); String realStr = ""; while ((str = rd.readLine()) != null) { System.out.println(str); realStr = realStr + str; } setRealString(realStr); setRD(rd); // 4、关闭资源 rd.close(); os.close(); socket.close(); // str = rd.readLine(); Client.this.result = str; System.out.println("Client.this.result:"+Client.this.result); rd.close(); } catch (IOException e) { e.printStackTrace(); } scanner.close(); try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // Client clientTest=new Client("88.6.13.66", 13000); // Client clientTest=new Client("127.0.0.1", 1234,""); // clientTest.start(); } public String getRealString() { return realString; } public void setRealString(String realString) { this.realString = realString; } public BufferedReader getRD() { return RD; } public void setRD(BufferedReader rD) { RD = rD; } public InputStream getInputRealStream() { return inputRealStream; } public void setInputRealStream(InputStream inputRealStream) { this.inputRealStream = inputRealStream; } } ``` 日志打出如下,为什么收不到值? ![图片说明](https://img-ask.csdn.net/upload/201912/13/1576218520_357171.png)
如何从键盘输入一系列字符,保存在文件里,最终显示在屏幕上
从键盘终端依次输入 a b c d e 然后要在屏幕上看到 a b c d e 这样的输出 ``` public static void main(String[] args) { File f=new File("f:"+File.separator+"abc.txt"); try { OutputStream fout=new FileOutputStream(f); OutputStream out=System.out; Scanner scan=new Scanner(System.in); PrintStream ps=new PrintStream(fout); String content; while(true){ content=scan.nextLine(); ps.print(content); if(content==null){ break; } //out.write(content.getBytes()); } out.write(content.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ``` 我目前出现的问题是不能在输入完所有的字母之后,一次性的在屏幕上显示 a b c d e 这样的输出。只是输入一个a屏幕上就输出一个a 希望有大佬看到后,帮忙想想解决办法,谢谢啦
JAVA新手,关于自定义异常的问题,求大神解答!
我发现只要键盘输入的字符不是“java“,就会一直循环 System.out.println("请输入字符串:"); String str = input.nextLine();这两个代码行,输入java后catch才会执行,这是为什么,我现在还不太懂在try里面用throw new 的意思,求解答! package 测试多态; import java.util.Scanner; public class exceptiontest2 extends Exception { public exceptiontest2() throws exceptiontest2 { Scanner input = new Scanner(System.in); System.out.println("请输入字符串:"); String str = input.nextLine(); if(str.equals("java")) { System.out.println("正常");} else { throw new exceptiontest2(); } } public static void main(String args[]) { try { throw new exceptiontest2(); //改成exceptiontest2 a=new exceptiontest2();程序执行结果一样,为什么会这样? } catch (exceptiontest2 a) { a.printStackTrace(); } } }
帮忙看下导入导出 和排序有问题 没有 本人新手也看不出啥问题,就运行不出来 ,学生类我放在后面的。
package xuejiguanli; import jxl.*; import jxl.Workbook; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.format.VerticalAlignment; import jxl.read.biff.BiffException; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Scanner; import javax.swing.GroupLayout.Alignment; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; //-------------------------------------------------------------------这是成绩管理系统的主界面 public class xueshengdei{ public static void main(String[] args) { List<Student> Students = new ArrayList<>(); while(true) { //----------------------------------------------------------------------菜单 System.out.println("-----------------学生管理系统----------------"); 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-------------查看所有学生的信息"); System.out.println(" 6-------------对当前所有学生进行升序排序"); System.out.println(" 7-------------查看学校通知"); System.out.println(" 8-------------导入学生信息"); System.out.println(" 9-------------导出学生信息"); System.out.println(" 10------------退出该系统"); Scanner sc =new Scanner(System.in); System.out.println("请输入序号选择其对应的功能:"); String j = sc.nextLine(); switch (j) { case "1": //增加学生 addstudent(Students); break; case "2": //删除学生 deletestudent(Students); break; case "3": //修改学生 changestudent(Students); break; case "4": //单独查找 singlefind(Students); break; case "5": //查看所有学生 findstudent(Students); break; case "6": //排序 System.out.println("请输入你要是实现的排序功能:"); Scanner s =new Scanner(System.in); System.out.println("1---------------成绩排序:"); System.out.println("2---------------年龄排序:"); System.out.println("3---------------学号排序:"); String second=s.nextLine(); switch(second) { case "1": paixu(Students);break; case "2": paixu3(Students); break; case "3": paixu2(Students); break; } break; case "7": tongzhi(Students); //查看学校通知 break; case "8": exceldaoru(Students); //导入学生信息 break; case "9": daochu(Students); //导出学生信息 break; case "10": System.out.println("谢谢你的使用!"); System.exit(0);//退出 default: System.out.println("输入错误请重新输入!"); break; } } } //--------------------------------------------------------------导出 public static void daochu(List<Student> Students) { String excelpath; Scanner scanner=new Scanner(System.in); System.out.println("操作:导出数据"); System.out.println("请输入导出Excel文件路径:"); excelpath = scanner.next(); try { FileOutputStream fos = new FileOutputStream(excelpath); WritableWorkbook wwb = Workbook.createWorkbook(fos); // 创建工作表 WritableSheet ws = wwb.createSheet("学生学籍表", 10); // 设置单元格的文字格式 WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); WritableCellFormat wcf = new WritableCellFormat(wf); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); ws.setColumnView(4, 10); ws.setColumnView(5, 16); ws.setColumnView(0, 14); ws.addCell(new Label(0, 0, "学号", wcf)); ws.addCell(new Label(1, 0, "姓名", wcf)); ws.addCell(new Label(2, 0, "年龄", wcf)); ws.addCell(new Label(3, 0, "性别", wcf)); ws.addCell(new Label(4, 0, "成绩", wcf)); // 填充数据的内容 // 匹配学生学号 System.out.println("所有学生学籍信息如下:"); int cnt = 1; while (cnt <= Students.size()) { Student s = (Student) Students.get(cnt - 1); ws.addCell(new Label(4, cnt, String.valueOf(s.getId()), wcf)); ws.addCell(new Label(1, cnt, String.valueOf(s.getName()), wcf)); ws.addCell(new Label(2, cnt, String.valueOf(s.getAge()), wcf)); ws.addCell(new Label(3, cnt, String.valueOf(s.getSex()), wcf)); ws.addCell(new Label(4, cnt, String.valueOf(s.getScore()), wcf)); cnt++; if (cnt == 0) wcf = new WritableCellFormat(); } wwb.write(); wwb.close(); System.out.println("学生信息导出成功!"); } catch (IOException e) { e.printStackTrace(); } catch (RowsExceededException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } //---------------------------------------------------------------导入 public static void exceldaoru(List<Student> Students) { Scanner scanner=new Scanner(System.in); String excelpath; excelpath = scanner.next(); WritableWorkbook book = null; try { // 创建一个Excel文件对象 FileOutputStream fos = new FileOutputStream(excelpath); // 创建Excel第一个选项卡对象 WritableWorkbook book1 = Workbook.createWorkbook(new File(excelpath)); WritableSheet sheet = book1.createSheet("第一页", 0); // 设置表头,第一行内容 // Label参数说明:第一个是列,第二个是行,第三个是要写入的数据值,索引值都是从0开始 Label label1 = new Label(0, 0, "学号");// 对应为第1列第1行的数据 Label label2 = new Label(1, 0, "姓名");// 对应为第2列第1行的数据 Label label3 = new Label(2, 0, "年龄");// 对应为第3列第1行的数据 Label label4 = new Label(3, 0, "性别");// 对应为第4列第1行的数据 // 添加单元格到选项卡中 sheet.addCell(label1); sheet.addCell(label2); sheet.addCell(label3); sheet.addCell(label4); // 遍历集合并添加数据到行,每行对应一个对象 for (int i = 0; i < Students.size(); i++) { Student s = Students.get(i); // 表头占据第一行,所以下面行数是索引值+1 // 跟上面添加表头一样添加单元格数据,这里为了方便直接使用链式编程 sheet.addCell(new Label(0, i + 1, s.getId()+"")); sheet.addCell(new Label(1, i + 1, s.getName())); sheet.addCell(new Label(2, i + 1, s.getAge()+"")); sheet.addCell(new Label(3, i + 1, s.getSex())); sheet.addCell(new Label(4, i + 1, s.getScore()+"")); } // 写入数据到目标文件 book.write(); } catch (Exception e) { e.printStackTrace(); } finally { try { // 关闭 book.close(); } catch (Exception e) { e.printStackTrace(); } } } //----------------------------------------------------------------------------------通知 public static void tongzhi(List<Student> Students) { int index = -1; if(Students.size()==0) { System.out.println("请你输入学生后再来查看通知,谢谢!"); return; } int[] point = new int[100]; for (int i = 0; i < Students.size(); i++) { Student s = Students.get(i); point[i] = s.getScore(); } for (int i = 0; i < Students.size(); i++) { if (point[i]<60){ Student s = Students.get(i); System.out.println(s.getName()+"同学,你收到的通知如下:"); System.out.println("恭喜你挂科了"); System.out.println("恭喜你挂科了"); System.out.println("恭喜你挂科了"); System.out.println("重要的事情说三遍"); } else { Student s = Students.get(i); System.out.println(s.getName()+"同学,你收到的通知如下:"); System.out.println("哎呦不错哟"); System.out.println("恭喜你没有挂科"); } } } //-----------------------------------------------------------------------------------成绩排序 public static void paixu(List<Student> Students) { if(Students.size()==0) { System.out.println("不好意思,目前还没有学生的信息可供排序,请返回重新操作!"); return; } int[] point = new int[100]; for (int i = 0; i < Students.size(); i++) { Student s = Students.get(i); point[i] = s.getScore(); Arrays.sort(point); } for (int j = 0; j < point.length; j++) { for (int i = 0; i < Students.size(); i++) { if (point[j]==Students.get(i).getScore()){ Student s = Students.get(i); System.out.println("学号\t姓名\t年龄\t性别\t成绩"); System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getSex()+"\t"+s.getScore()); } } } } //--------------------------------------------------------------------学号排序 public static void paixu2(List<Student> Students) { if(Students.size()==0) { System.out.println("不好意思,目前还没有学生的信息可供排序,请返回重新操作!"); return; } int[] point = new int[10000000]; for (int i = 0; i < Students.size(); i++) { Student s = Students.get(i); point[i] = s.getId(); Arrays.sort(point); } for (int j = 0; j < point.length; j++) { for (int i = 0; i < Students.size(); i++) { if (point[j]==Students.get(i).getId()){ Student s = Students.get(i); System.out.println("学号\t姓名\t年龄\t性别\t成绩"); System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getSex()+"\t"+s.getScore()); } } } } //---------------------------------------------------------------------------------------年龄排序 public static void paixu3(List<Student> Students) { if(Students.size()==0) { System.out.println("不好意思,目前还没有学生的信息可供排序,请返回重新操作!"); return; } int[] point = new int[100]; for (int i = 0; i < Students.size(); i++) { Student s = Students.get(i); point[i] = s.getAge(); Arrays.sort(point); } for (int j = 0; j < point.length; j++) { for (int i = 0; i < Students.size(); i++) { if (point[j]==Students.get(i).getAge()){ Student s = Students.get(i); System.out.println("学号\t姓名\t年龄\t性别\t成绩"); System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getSex()+"\t"+s.getScore()); } } } } //-------------------------------------------------------------------------------------------添加 public static void addstudent(List<Student> Students) { //创建键盘录入对象 Scanner sc= new Scanner(System.in); while(true) { System.out.println("请输入学号:"); int id= sc.nextInt(); System.out.println("请输入姓名:"); String name = sc.nextLine(); System.out.println("请输入年龄:"); int age = sc.nextInt(); System.out.println("请输入性别:"); String sex = sc.nextLine(); System.out.println("请输入成绩:"); int score = sc.nextInt(); //创建学生对象 Student s = new Student(); s.setId(id); s.setName(name); s.setAge(age); s.setSex(sex); s.setScore(score); //把学生对象添加到集合 Students.add(s); break; } System.out.println("添加学生成功!"); } //-----------------------------------------------------------------------------------------(查找所有学生) public static void findstudent(List<Student> Students) { if(Students.size()==0) { System.out.println("不好意思,目前还没有学生的信息可供查询,请返回重新操作!"); return; } for(int i=0;i<Students.size();i++) { Student s = Students.get(i); System.out.println("学号:"+s.getId()+"\n姓名:"+s.getName()+"\n性别:"+s.getSex()+"\n年龄:"+s.getAge()+"\n成绩:"+s.getScore()); } } //----------------------------------------------单独查找----------------------------------------------- public static void singlefind(List<Student> students) { Scanner sc=new Scanner(System.in); System.out.println("请输入要查找的学号"); int findId=sc.nextInt(); int index = -1; for(int i=0;i<students.size();i++) { Student s = students.get(i); if(s.getId()==findId) { index=i; } if (index == -1) { System.out.println("你要查找的学生不存在,请重新选择!"); }else { System.out.println("学号:"+s.getId()+"\n姓名:"+s.getName()+"\n性别:"+s.getSex()+"\n年龄:"+s.getAge()+"\n成绩:"+s.getScore()); } } } //------------------------------------------------------------------------------------------------删除 public static void deletestudent(List<Student> Students) { Scanner sc= new Scanner(System.in); System.out.print("请输入要删除的学号:"); int deleId = sc.nextInt(); int index = -1; for(int i=0;i<Students.size();i++) { Student s = Students.get(i); if(s.getId()==deleId) { index=i; } if (index == -1) { System.out.println("你要删除的学生不存在,请重新选择!"); } else { Students.remove(index); System.out.println("删除学生成功!!"); } } } //---------------------------------------------------------------------------------------修改 public static void changestudent(List<Student> students) { Scanner sc= new Scanner(System.in); System.out.print("请输入要改变的学号:"); int changeId = sc.nextInt(); int index = -1; for(int i=0;i<students.size();i++) { Student s = students.get(i); if(s.getId()==changeId) { index = i; } } if (index == -1) { System.out.println("您要改变的学生不存在,请重新操作!"); } else { System.out.println("请输入新的姓名:"); String name = sc.nextLine(); System.out.println("请输入新的年龄:"); int age = sc.nextInt(); System.out.println("请输入新的性别:"); String sex = sc.nextLine(); System.out.println("请输入新的成绩:"); int score = sc.nextInt(); //创建学生对象 Student s = new Student(); s.setId(changeId); s.setName(name); s.setAge(age); s.setSex(sex); s.setScore(score); //修改学生对象 students.set(index,s); System.out.println("修改学生成功!!!"); } } } //学生类 package xuejiguanli; public class Student { private String name; private int Id; private int age; private String sex; private int score; public Student() { } public Student(String name, int Id, int age, String sex,int score) { super(); this.name = name; this.Id = Id; this.age = age; this.sex = sex; this.score =score; } public String getName() { return name; }//姓名 public int getId() { return Id; }//学号 public int getAge() { return age; }//年龄 public String getSex() { return sex; }//性别 public int getScore() { return score; }//成绩 public void setName(String name) { this.name = name; } public void setId(int Id) { this.Id = Id; } public void setAge(int age) { this.age = age; } public void setSex(String sex) { this.sex = sex; } public void setScore(int score) { this.score = score; } }
try catch 提示未初始化错误
/*分别给cl 和li初始化为null后运行又有nullpointerexception 总而言之,就是觉得try{}里面的赋值没有成功*/ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Scanner; public class Exercise21 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); System.out.println("用户名:"); String name=sc.nextLine(); System.out.println("密码:"); String password=sc.nextLine(); if(new LoginCheck().login(name, password)) System.out.println("登陆成功!"); else System.out.println("登陆失败!"); } } @Retention(value=RetentionPolicy.RUNTIME) @interface LoginInfo { public String name(); public String password(); } class LoginCheck { @LoginInfo(name="zmx",password="123456") public boolean login(String name,String password) { Class<?> cl=null; try { cl=Class.forName("LoginCheck"); } catch (ClassNotFoundException e) { e.printStackTrace(); } LoginInfo li=null;//这里不初始化会报错 try { li = cl.getMethod("login").getAnnotation(LoginInfo.class);//将这里的getMethod("login")改成getMethod("login",String.class,String.class)就ok了 } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } return li.name().equals(name)&&li.password().equals(password); } }
关于控制台打印1-9数字
在个是要求 ![图片说明](https://img-ask.csdn.net/upload/201911/26/1574772065_938343.png) 这个是案例的演示 ![图片说明](https://img-ask.csdn.net/upload/201911/26/1574772105_804097.jpg) 放大和缩小这个东西想破脑袋也想不出来,求各位路过的大神和大佬救救这个可怜的孩子吧 这是我写的代码,可是放大的功能实现不了,请各位路过的大佬和大神指点迷津 ``` import java.util.Scanner; public class dsa { static void printNumber(int[][] data, String symbol){ for(int i =0;i<data.length;i+=1) { for(int j=0;j<data[i].length;j+=1) { if(data[i][j]==0){ System.out.print(" "); } else { System.out.print(symbol); } } System.out.println(); } } public static void main(String[] args) { System.out.println("请输入数字"); int[][][] numbers=new int[][][]{ // 0 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 1, 1, 1} }, new int[][]{ // 1 new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1} }, // 2 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 0}, new int[]{1, 1, 1, 1} }, // 3 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{1, 1, 1, 1} }, // 4 new int[][]{ new int[]{1, 0, 0, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1} }, // 5 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 0}, new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{1, 1, 1, 1} }, // 6 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 0}, new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 1, 1, 1} }, // 7 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1}, new int[]{0, 0, 0, 1} }, // 8 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 1, 1, 1} }, // 9 new int[][]{ new int[]{1, 1, 1, 1}, new int[]{1, 0, 0, 1}, new int[]{1, 1, 1, 1}, new int[]{0, 0, 0, 1}, new int[]{1, 1, 1, 1} } }; String symbol = "#"; int num =0; Scanner scanner = new Scanner(System.in); while (true) { String line = scanner.nextLine(); if(line.equals("*")){ symbol="*"; } else if(line.equals("#")){ symbol="#"; } else if(line.equals("-") ){ } else if (line.equals("+")){ } else { try { num = Integer.parseInt(line); } catch (Exception e){ System.out.println("输入错误"); } } printNumber(numbers[num],symbol); } } } ```
重金求解,为什么我接收不到socket服务端返回的信息,代码如下,这个logger.debug("result:"result)为什么总是空,确认了服务端的确返回到了socket,怎样才能正确从socket取到值呢?
这是socket客户端代码 ``` import java.io.BufferedReader; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client extends Thread { Socket socket = null; public String result = ""; public String in = ""; public Client(String host, int port, String in) { try { in = new String(in.getBytes(),"GBK"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.in = in; try { socket = new Socket(host, port); socket.setSoTimeout(1000); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // public void shutDown() throws IOException { // if (socket != null) { // synchronized (socket) { // socket.close(); // } // } // System.out.println("StopClose.shutDown() complete"); // } @Override public void run() { new sendMessThread().start(); super.run(); try { InputStream s = socket.getInputStream(); byte[] buf = new byte[1024]; int len = 0; while ((len = s.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } class sendMessThread extends Thread{ @Override public void run() { super.run(); Scanner scanner=null; OutputStream os= null; try { scanner=new Scanner(System.in); os= socket.getOutputStream(); // String in; // do { // in=scanner.next(); // os.write((""+in).getBytes()); // os.flush(); // } while (!in.equals("bye")); for(int i =0;i<1;i++) { os.write((""+in).getBytes()); os.flush(); } BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK")); String str = ""; System.out.println("RESULT AS FOLLOWING:"); while ((str = rd.readLine()) != null) { System.out.println(str); } // str = rd.readLine(); Client.this.result = str; System.out.println("Client.this.result:"+Client.this.result); rd.close(); } catch (IOException e) { e.printStackTrace(); } scanner.close(); try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // Client clientTest=new Client("88.6.13.66", 13000); // Client clientTest=new Client("127.0.0.1", 1234,""); // clientTest.start(); } } ``` 这是调用的代码 ``` import java.io.BufferedReader; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.sql.Connection; import java.sql.Types; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; public class FaceCheckManage { private final static String DB_ALIAS = "ALIAS";//数据源 private static final String TRXZONE = "trxZone";//输入|地区号 private static final String TYPE = "type";//输入|操作类型 add-注册 check-识别 del-删除 private static final String IMG = "img";//输入|人脸数据 private static final String ID = "id";//输入|编号 private static final String VALUE = "VALUE";//输出|转发数据 public String process(IWFEngine engine, WFActivity activity, WFData wfd, String wfName) throws ParamNotExistException, com.zjft.bpe.stdlib.exception.UnrecognizedScopeException { BizDataModule dm = wfd.getDataModule(); ZjLogger logger = LoggerUtil.getLog(dm.getChannelId(), dm.getTxCode()); ModuleUtil moduleUtil = new ModuleUtil(wfd, wfd.getDataModule(), activity, logger); String trxZone = moduleUtil.getParamValue(TRXZONE); logger.debug("trxZone:"+trxZone); String type = moduleUtil.getParamValue(TYPE); String imgBase64 = moduleUtil.getParamValue(IMG); String id = moduleUtil.getParamValue(ID); Connection conn = wfd.getTxConnection(moduleUtil.getParamValue(DB_ALIAS)); try { /*是否已注册*/ boolean registedFlag = isRegisted(id, conn, logger); if("add".equals(type)&&registedFlag==true) { CommonUtil.setResponseMsg("FFFFF", "用户已注册,请先删除人脸数据", moduleUtil); return "fail"; }else if(("check".equals(type)||"del".equals(type))&&registedFlag==false) { CommonUtil.setResponseMsg("FFFFF", "用户人脸数据未注册", moduleUtil); return "fail"; } } catch (Exception e) { logger.error("查询是否已注册发生异常",e); CommonUtil.setResponseMsg("FFFFF", "查询是否已注册发生异常", moduleUtil); return "fail"; } JSONObject sysParams = null;//系统参数列表 try { //获取人脸识别配置参数 sysParams = getSysParam(type,conn, logger); }catch (TradeException e) { CommonUtil.setResponseMsg("FFFFF", e.getMessage(), moduleUtil); return "fail"; } catch (Exception e) { logger.error("查询人脸识别系统参数发生异常",e); CommonUtil.setResponseMsg("FFFFF", "查询人脸识别系统参数发生异常", moduleUtil); return "fail"; } String ip = sysParams.getString("ip"); String url =sysParams.getString("url"); //组参数 JSONObject paramMap = new JSONObject(); if("add".equals(type)) { paramMap.put("trxZone", trxZone); paramMap.put("programName", "e"); paramMap.put("id", id); paramMap.put("img1", imgBase64); paramMap.put("imgFace1", "50,60,100,120"); paramMap.put("hack1", 1); paramMap.put("customerAgreement", 1); String trxString = "10032"; String jsonString = paramMap.toJSONString(); int length = jsonString.length()+10; String lenString = getLenString(length); String totalString = trxString+lenString+jsonString; logger.debug("totalString:"+totalString); Client client = new Client("88.6.13.66", 13000,totalString); client.start(); String result = client.result; logger.debug("result:"+result); result = result.substring(5,result.length()); moduleUtil.setParamValue(VALUE, result); logger.debug("VALUE:"+result); JSONObject resultJsonObject = JSONObject.parseObject(result); logger.debug("resultJsonObject:"+resultJsonObject); //新增参数 }else if("check".equals(type)) { paramMap.put("trxZone", trxZone); paramMap.put("programName", "e"); paramMap.put("id", id); paramMap.put("img1", imgBase64); paramMap.put("imgFace1", "50,60,100,120"); paramMap.put("threshold", 0.001); paramMap.put("hack1", 1); String trxString = "10034"; String jsonString = paramMap.toJSONString(); int length = jsonString.length()+10; String lenString = getLenString(length); String totalString = trxString+lenString+jsonString; logger.debug("totalString:"+totalString); Client client = new Client("88.6.13.66", 13000,totalString); client.start(); String result = client.result; logger.debug("result:"+result); result = result.substring(5,result.length()); moduleUtil.setParamValue(VALUE, result); logger.debug("VALUE:"+result); JSONObject resultJsonObject = JSONObject.parseObject(result); logger.debug("resultJsonObject:"+resultJsonObject); }else if("del".equals(type)){ paramMap.put("trxZone", trxZone); paramMap.put("programName", "e"); paramMap.put("id", id); String trxString = "10035"; String jsonString = paramMap.toJSONString(); int length = jsonString.length()+10; String lenString = getLenString(length); String totalString = trxString+lenString+jsonString; logger.debug("totalString:"+totalString); try { totalString = new String(totalString.getBytes(),"GBK"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } Client client = new Client("88.6.13.66", 13000,totalString); client.start(); String result = client.result; logger.debug("result:"+result); result = result.substring(5,result.length()); moduleUtil.setParamValue(VALUE, result); logger.debug("VALUE:"+result); JSONObject resultJsonObject = JSONObject.parseObject(result); logger.debug("resultJsonObject:"+resultJsonObject); }else { CommonUtil.setResponseMsg("FFFFF", "错误的操作类型", moduleUtil); return "fail"; } String param = paramMap.toJSONString(); try { param = "params="+URLEncoder.encode(param,"UTF-8"); } catch (UnsupportedEncodingException e) { logger.error("转换为请求数据失败"); return "fail"; } return "ok"; } /** * <p> 函数名:isRegisted </p> * <p> 函数功能:查询该编号用户人脸信息是否已注册 </p> * <p> 处理过程:(描述这个方法的处理逻辑)</p> * <p> 输入参数描述: </p> * <p> 输出参数描述: </p> * <p> 异常处理描述: </p> * <p> 创建信息:liuyuan/2019年6月4日 下午3:29:48/versoin</p> * <p> 修改信息:(修改人名、修改人名.../最后修改时间/修改版本号)</p> * <p> 多个版本修改,则每次新增一行修改信息</p> * @throws Exception */ private boolean isRegisted(String id,Connection conn,ZjLogger logger) throws Exception { String sql = "select t.id from USER_FACE_RECORD t where t.id_number=? or t.user_no=?"; List<SQLPara> sqlParas = new ArrayList<>(); sqlParas.add(new SQLPara("id_number", Types.VARCHAR, id)); sqlParas.add(new SQLPara("user_no", Types.VARCHAR, id)); CachedRowSet rlt = DbOperate.executeQueryByParamName(sql, sqlParas, conn, logger); return rlt.next(); } /** * * <p>Title: getSysParam</p> * <p>Description: 查询人脸识别相关参数 </p> * @param type * @param conn * @param logger * @return * @throws TradeException * @throws Exception */ private JSONObject getSysParam(String type,Connection conn, ZjLogger logger) throws TradeException,Exception { JSONObject sysParam = new JSONObject(); String qrySysParamSQL = " select t.param_value from SYS_PARAM t where t.param_name=? "; List<SQLPara> sqlParas = new ArrayList<>(); // 查询ip sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_ip")); CachedRowSet ipRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!ipRlt.next()) { throw new TradeException("请先配置人脸识别服务器地址(faceCheck_ip)"); } sysParam.put("ip",ipRlt.getString("param_value")); sqlParas.clear(); // 查询url sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_url")); CachedRowSet urlRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!urlRlt.next()) { throw new TradeException("请先配置人脸识别转发url(faceCheck_url)"); } sysParam.put("url",urlRlt.getString("param_value")); sqlParas.clear(); // 查询baseFlag sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_baseFlag")); CachedRowSet baseFlagRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!baseFlagRlt.next()) { throw new TradeException("请先配置人脸识基准照标示(faceCheck_baseFlag)"); } sysParam.put("baseFlag",baseFlagRlt.getInt("param_value")); sqlParas.clear(); // 查询threshold sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_threshold")); CachedRowSet thresholdRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!thresholdRlt.next()) { throw new TradeException("请先配置人脸识误识率阈值(faceCheck_threshold)"); } sysParam.put("threshold",thresholdRlt.getString("param_value")); sqlParas.clear(); //查询channel sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_channel")); CachedRowSet channelRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!channelRlt.next()) { throw new TradeException("请先配置人脸识别转发业务渠道编号(faceCheck_channel)"); } sysParam.put("channel",channelRlt.getString("param_value")); sqlParas.clear(); //交易编号写死,加操作类型大写进行区分 sysParam.put("trCode","SXFH-BF-SWXJ-ITMS-FACE-"+type.toUpperCase()); //查询appName sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_appName")); CachedRowSet appNameRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!appNameRlt.next()) { throw new TradeException("请先配置人脸识别应用名(faceCheck_appName)"); } sysParam.put("appName",appNameRlt.getString("param_value")); sqlParas.clear(); //查询appInfo sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_appInfo")); CachedRowSet appInfoRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!appInfoRlt.next()) { throw new TradeException("请先配置人脸识别客户端APP信息(faceCheck_appInfo)"); } sysParam.put("appInfo",appInfoRlt.getString("param_value")); sqlParas.clear(); //查询retentionTime sqlParas.add(new SQLPara("param_name", Types.VARCHAR, "faceCheck_retentionTime")); CachedRowSet retentionTimeRlt = DbOperate.executeQueryByParamName(qrySysParamSQL, sqlParas, conn, logger); if (!retentionTimeRlt.next()) { throw new TradeException("请先配置人脸识清理时间(faceCheck_retentionTime)"); } sysParam.put("retentionTime",retentionTimeRlt.getString("param_value")); sqlParas.clear(); logger.debug("sysParam:"+sysParam); return sysParam; } public String getLenString (int length) { NumberFormat formatter = NumberFormat.getNumberInstance(); formatter.setMinimumIntegerDigits(5); formatter.setGroupingUsed(false); String lenString = formatter.format(length); return lenString; } } ``` 这个地方为什么总是空的 ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576144606_651895.png)
如何在一个方法内返回UTF-8格式的字符串,在另一个方法中调用输出?
``` package com.secutiry.rsa; import java.util.Scanner; public class Prtest { public String Phintx(){ Scanner cc =new Scanner(System.in); //下马这行会报错,选择try catch 或者 throw declaration //选择try catch 则无法return ,选择throw declaration 则在主方法中会报异常 String tt =new String(cc.next().getBytes(),"utf-8"); return tt; } public static void main(String[] args) { Prtest prtest = new Prtest(); String tx = prtest.Phintx(); System.out.println(tx); } } ```
Socket获取outputStream 抛出异常
## **0)功能简介:** 利用 socket 模拟qq 的消息发送和接收功能。既可以接收消息,也可以发送消息,无论是server 还是 client。在server 和 client 端都开启了两个线程, 一个线程用于接收并打印消息,一个线程用于发送消息。 ## **1)问题简介:** 先启动 server ,后启动client 去连接server, client 端抛出异常,说, socket 获取outputStream失败。。找不到原因啊。。oh。 求高手解答。 ![图片说明](https://img-ask.csdn.net/upload/201601/30/1454165643_917664.png) ## **2)client代码如下:** ``` package com.corejava.chapter3; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class AnalogQQClient { public static void main(String[] args) throws IOException { try(Socket socket = new Socket("127.0.0.1", 8189)) { new Thread(new Runnable() // print server's info { @Override public void run() { try { Scanner scanner = new Scanner(socket.getInputStream()); while(true) { if(scanner.hasNext()) { String line = scanner.nextLine(); System.out.println("from client: " + line); if(line.equals("bye")) { break; } } } } catch (IOException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() // send info typed to the server { @Override public void run() { try { PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); while(true) { Scanner scanner = new Scanner(System.in); if(scanner.hasNext()) { writer.println("from server: " + scanner.nextLine()); } } } catch (IOException e) { e.printStackTrace(); } } }).start(); } finally { System.out.println("the client is closed !"); } } } ``` ## **3)server 代码如下:** ``` package com.corejava.chapter3; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class AnalogQQServer { public static void main(String[] args) throws IOException { try(ServerSocket serverSocket = new ServerSocket(8189)) { Socket socket = serverSocket.accept(); new Thread(new Runnable() // print client's info { @Override public void run() { try { Scanner scanner = new Scanner(socket.getInputStream()); while(true) { if(scanner.hasNext()) { String line = scanner.nextLine(); System.out.println("from client: " + line); if(line.equals("bye")) { break; } } } } catch (IOException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() // send info typed to the client { @Override public void run() { try { PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); while(true) { Scanner scanner = new Scanner(System.in); if(scanner.hasNext()) { writer.println("from server: " + scanner.nextLine()); } } } catch (IOException e) { e.printStackTrace(); } } }).start(); } finally { System.out.println("the server is closed !"); } } } ```
给这个Java代码插入登录和注册能力,且账号和密码都在TXT文件里?请大神帮助?着急/?wuwuwu?
import java.awt.Choice; import java.awt.Container; import java.awt.GridLayout; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.print.Printable; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.Collator; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.WindowConstants; class MyAddBook { public static JFrame frame; public MyAddBook(){ frame=new JFrame("通讯录"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); JMenuBar menubar=new JMenuBar(); JMenu edit=new JMenu("编辑"); JMenuItem edit1=new JMenuItem("录入"); JMenuItem edit2=new JMenuItem("查询"); JMenuItem edit3=new JMenuItem("删除"); JMenuItem edit4=new JMenuItem("修改"); JMenuItem edit5=new JMenuItem("排序"); edit1.addActionListener(new Typein()); JMenu show=new JMenu("显示信息"); JMenuItem show1=new JMenuItem("同学"); JMenuItem show2=new JMenuItem("同事"); JMenuItem show3=new JMenuItem("朋友"); JMenuItem show4=new JMenuItem("亲戚"); JMenuItem show5=new JMenuItem("全体人员"); Container c=frame.getContentPane(); JPanel pane=new JPanel(); c.add(pane); pane.add(menubar); menubar.add(edit); edit.add(edit1); edit.add(edit2); edit.add(edit3); edit.add(edit4); edit.add(edit5); menubar.add(show); show.add(show1); show.add(show2); show.add(show3); show.add(show4); show.add(show5); frame.setSize(300,100); //frame.pack(); //查询修改删除 class Search{ JDialog dialog=new JDialog(frame,"查询对话框",true); public Search(String str,int n){ dialog.setSize(250,200); Container c=dialog.getContentPane(); dialog.setLayout(new GridLayout(2,1,5,5)); JLabel Lsearch=new JLabel("请输入要"+str+"人员的名字:"); final JTextField Tname=new JTextField(10); JButton certain=new JButton("确定"); JButton cancel=new JButton("取消"); //final String in=Tname.getText(); JPanel pane1=new JPanel(); JPanel pane2=new JPanel(); c.add(pane1); c.add(pane2); pane1.add(Lsearch); pane1.add(Tname); pane2.add(certain); pane2.add(cancel); dialog.setDefaultCloseOperation(dialog.DISPOSE_ON_CLOSE); //dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); if(n==2){ certain.addActionListener(new ActionListener() //查询 { public void actionPerformed(ActionEvent e) { try { FileReader file=new FileReader("D:\\AddressBook.txt"); Scanner find=new Scanner(file); while(find.hasNext()){ if(find.next().equals(Tname.getText())){ dialog.dispose(); Typein fd=new Typein(); fd.frame=new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); fd.Cgroup.select(find.next()); fd.Cbirthyear.select(find.next()); fd.Cbirthmonth.select(find.next()); fd.Cbirthday.select(find.next()); fd.Tphone.setText(find.next()); fd.Temail.setText(find.next()); fd.Tother.setText(find.next()); fd.typein(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block //e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if(n==3){ certain.addActionListener(new ActionListener() //删除 { public void actionPerformed(ActionEvent e) { try { File file=new File("D:\\AddressBook.txt"); Scanner find=new Scanner(file); FileWriter file1=new FileWriter("D:\\AddressBook1.txt",true); PrintWriter write=new PrintWriter(file1); while(find.hasNext()){ String s=find.next(); if(!(s.equals(Tname.getText()))){ write.print(s+'\t'); write.print(find.next()+'\t'); write.print(find.next()+' '); write.print(find.next()+' '); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.println(find.next()); } else { find.next();find.next();find.next();find.next(); find.next();find.next();find.next(); } } //file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2=new File("D:\\AddressBook1.txt"); file2.renameTo(new File( "D:\\AddressBook.txt")); JOptionPane.showMessageDialog(null,"删除成功", "删除结果",JOptionPane.INFORMATION_MESSAGE); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); JOptionPane.showMessageDialog(null, "未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block //e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if(n==4){ certain.addActionListener(new ActionListener() //修改 { public void actionPerformed(ActionEvent e) { try {File file=new File("D:\\AddressBook.txt"); Scanner find=new Scanner(file); FileWriter file1=new FileWriter("D:\\AddressBook1.txt",true); PrintWriter write=new PrintWriter(file1); while(find.hasNext()){ String s=find.next(); if(!(s.equals(Tname.getText()))){ write.print(s+'\t'); write.print(find.next()+'\t'); write.print(find.next()+' '); write.print(find.next()+' '); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.println(find.next()); } else{ dialog.dispose(); Typein fd=new Typein(); Typein.y=1; fd.frame=new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); String s1=find.next(); fd.Cgroup.select(s1); String s2=find.next(); fd.Cbirthyear.select(s2); String s3=find.next(); fd.Cbirthmonth.select(s3); String s4=find.next(); fd.Cbirthday.select(s4); String s5=find.next(); fd.Tphone.setText(s5); String s6=find.next(); fd.Temail.setText(s6); String s7=find.next(); fd.Tother.setText(s7); fd.typein(); if(Typein.z==1){ write.print(Tname.getText()+'\t'); write.print(s1+'\t'); write.print(s2+' '); write.print(s3+' '); write.print(s4+'\t'); write.print(s5+'\t'); write.print(s6+'\t'); write.println(s7); Typein.z=2; } } } //file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2=new File("D:\\AddressBook1.txt"); file2.renameTo(new File( "D:\\AddressBook.txt")); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block //e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } cancel.addActionListener(new ActionListener() //取消 { public void actionPerformed(ActionEvent e) {System.out.println("fdas"); //dialog.dispose(); } }); } } edit2.addActionListener(new ActionListener() //监听查询 { public void actionPerformed(ActionEvent e) { new Search("查询",2).dialog.setVisible(true); } }); edit3.addActionListener(new ActionListener() //监听删除 { public void actionPerformed(ActionEvent e) { new Search("删除",3).dialog.setVisible(true); } }); edit4.addActionListener(new ActionListener() //监听修改 { public void actionPerformed(ActionEvent e) { new Search("修改",4).dialog.setVisible(true); } }); //输出类 class Print{ public JTextArea area; public Print(String st,int n){ JFrame frame = new JFrame(st+"信息如下"); frame.setSize(800, 400); //frame.setLocation(350, 150); area = new JTextArea(); frame.add(area); frame.setVisible(true); if(n==2) try //排序 {int i,j,k; String []all; all=new String[1000]; BufferedReader read=new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓名"+'\t'+"组别"+'\t'+"生日"+'\t'+"电话"+'\t'+"Email"+'\t'+"其他"+'\n'); int z=1,count=0; while(z==1){ for(i=0;i<1000;i++){ String str=read.readLine(); if(str!=null) {all[i]=str;count++;} else z=0; } } String[] bll; bll=new String[count]; for(i=0;i<count;i++) bll[i]=all[i]; getSortOfChinese(bll); for (i = 0; i < count; i++) area.append(bll[i]+'\n'); read.close(); }catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e2){ e2.printStackTrace(); } if(n==1) try //各类人员 { FileReader file=new FileReader("D:\\AddressBook.txt"); Scanner find=new Scanner(file); area.append("姓名"+'\t'+"组别"+'\t'+"生日"+'\t'+"电话"+'\t'+"Email"+'\t'+"其他"+'\n'); while(find.hasNext()){ String str1=find.next(); String str2=find.next(); if(str2.equals(st)){ area.append(str1+'\t'); area.append(str2+'\t'); area.append(find.next()+' '); area.append(find.next()+' '); area.append(find.next()+'\t'); area.append(find.next()+'\t'); area.append(find.next()+'\t'); area.append(find.next()+'\n'); } else{ find.next();find.next();find.next();find.next(); find.next();find.next(); } } file.close(); find.close(); }catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e2){ e2.printStackTrace(); } if(n==0) try //全体人员信息 { BufferedReader read=new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓名"+'\t'+"组别"+'\t'+"生日"+'\t'+"电话"+'\t'+"Email"+'\t'+"其他"+'\n'); int z=1; while(z==1){ String str=read.readLine(); if(str!=null) area.append(str+'\n'); else z=0; } read.close(); }catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e2){ e2.printStackTrace(); } } } edit5.addActionListener(new ActionListener() //监听排序 { public void actionPerformed(ActionEvent e) { new Print("按姓名排序后",2); } }); show1.addActionListener(new ActionListener() //监听同学 { public void actionPerformed(ActionEvent e) { new Print("同学",1); } }); show2.addActionListener(new ActionListener() //监听同事 { public void actionPerformed(ActionEvent e) { new Print("同事",1); } }); show3.addActionListener(new ActionListener() //监听朋友 { public void actionPerformed(ActionEvent e) { new Print("朋友",1); } }); show4.addActionListener(new ActionListener() //监听亲戚 { public void actionPerformed(ActionEvent e) { new Print("亲戚",1); } }); show5.addActionListener(new ActionListener() //监听全体人员 { public void actionPerformed(ActionEvent e) { new Print("全体人员",0); } }); } public static void main(String []args){ new MyAddBook(); } public static String[] getSortOfChinese(String[] a) { // Collator 类是用来执行区分语言环境这里使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); // JDKz自带对数组进行排序。 Arrays.sort(a, cmp); return a; } } //输入类 class Typein implements ActionListener{ public static int z=2; public static int y=0; public JLabel Lname,Lgroup,Lbirthday,Lphone,Lemail,Lother,Lnote; public JTextField Tname=new JTextField(10),Tphone=new JTextField(15), Temail=new JTextField(15),Tother=new JTextField(15); public Choice Cgroup=new Choice(),Cbirthyear=new Choice(),Cbirthmonth=new Choice(), Cbirthday=new Choice(); public JButton certain,cancel; public JFrame frame=new JFrame("录入联系人信息"); public Typein(){ Cgroup.addItem("无"); Cgroup.addItem("同学"); Cgroup.addItem("同事"); Cgroup.addItem("朋友"); Cgroup.addItem("亲戚"); Cbirthyear.addItem("1985"); Cbirthyear.addItem("1986"); Cbirthyear.addItem("1987"); Cbirthyear.addItem("1988"); Cbirthyear.addItem("1989"); Cbirthyear.addItem("1990"); Cbirthyear.addItem("1991"); Cbirthyear.addItem("1992"); Cbirthyear.addItem("1993"); Cbirthyear.addItem("1994"); Cbirthyear.addItem("1995"); Cbirthyear.addItem("1996"); Cbirthyear.addItem("1997"); Cbirthyear.addItem("1998"); Cbirthyear.addItem("1999"); Cbirthyear.addItem("2000"); Cbirthmonth.addItem("01"); Cbirthmonth.addItem("02"); Cbirthmonth.addItem("03"); Cbirthmonth.addItem("04"); Cbirthmonth.addItem("05"); Cbirthmonth.addItem("06"); Cbirthmonth.addItem("07"); Cbirthmonth.addItem("08"); Cbirthmonth.addItem("09"); Cbirthmonth.addItem("10"); Cbirthmonth.addItem("11"); Cbirthmonth.addItem("12"); Cbirthday.addItem("01"); Cbirthday.addItem("02"); Cbirthday.addItem("03"); Cbirthday.addItem("04"); Cbirthday.addItem("05"); Cbirthday.addItem("06"); Cbirthday.addItem("07"); Cbirthday.addItem("08"); Cbirthday.addItem("09"); Cbirthday.addItem("10"); Cbirthday.addItem("11"); Cbirthday.addItem("12"); Cbirthday.addItem("13"); Cbirthday.addItem("14"); Cbirthday.addItem("15"); Cbirthday.addItem("16"); Cbirthday.addItem("17"); Cbirthday.addItem("18"); Cbirthday.addItem("19"); Cbirthday.addItem("20"); Cbirthday.addItem("21"); Cbirthday.addItem("22"); Cbirthday.addItem("23"); Cbirthday.addItem("24"); Cbirthday.addItem("25"); Cbirthday.addItem("26"); Cbirthday.addItem("27"); Cbirthday.addItem("28"); Cbirthday.addItem("29"); Cbirthday.addItem("30"); Cbirthday.addItem("31"); } public void typein(){ Container c=frame.getContentPane(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500,300); frame.setLayout(new GridLayout(5,1,5,5)); frame.setVisible(true); Lname=new JLabel("姓名:"); Lgroup=new JLabel("组别:"); Lbirthday=new JLabel("生日:"); Lphone=new JLabel("电话:"); Lemail=new JLabel("Email:"); Lother=new JLabel("其他:"); Lnote=new JLabel("注释:”其他“中输入所在学校 /共事单位/认识地方/亲戚称呼"); certain=new JButton("确定"); cancel=new JButton("取消"); JPanel pane1=new JPanel(); JPanel pane2=new JPanel(); JPanel pane3=new JPanel(); JPanel pane4=new JPanel(); JPanel pane5=new JPanel(); c.add(pane1); c.add(pane2); c.add(pane3); c.add(pane4); c.add(pane5); pane1.add(Lname); pane1.add(Tname); pane1.add(Lgroup); pane1.add(Cgroup); pane2.add(Lbirthday); pane2.add(Cbirthyear); pane2.add(Cbirthmonth); pane2.add(Cbirthday); pane2.add(Lphone); pane2.add(Tphone); pane3.add(Lemail); pane3.add(Temail); pane3.add(Lother); pane3.add(Tother); pane4.add(Lnote); pane5.add(certain); pane5.add(cancel); certain.addActionListener(new ActionListener() //设置监听器 { public void actionPerformed(ActionEvent e) //用匿名内部类实现监听器 { if(Tname.getText().equals("")) JOptionPane.showMessageDialog(null,"录入失败,姓名必须填写!", "录入结果",JOptionPane.INFORMATION_MESSAGE); else{ try { FileWriter AddressBook=new FileWriter("D:\\AddressBook.txt",true); PrintWriter add=new PrintWriter(AddressBook); String s1,s2,s3,s4; if(Tname.getText().equals(""))s1="无";else s1=Tname.getText(); if(Tphone.getText().equals(""))s2="无";else s2=Tphone.getText(); if(Temail.getText().equals(""))s3="无";else s3=Temail.getText(); if(Tother.getText().equals(""))s4="无";else s4=Tother.getText(); /*add.println(Tname.getText()+'\t'+Cgroup.getSelectedItem()+'\t'+Cbirthyear.getSelectedIt em()+ ' '+Cbirthmonth.getSelectedItem()+' '+Cbirthday.getSelectedItem()+ '\t'+Tphone.getText()+'\t'+Temail.getText()+'\t'+Tother.getText());*/ add.println(s1+'\t'+Cgroup.getSelectedItem()+'\t'+Cbirthyear.getSelectedItem()+ ' '+Cbirthmonth.getSelectedItem()+' '+Cbirthday.getSelectedItem()+ '\t'+s2+'\t'+s3+'\t'+s4); add.close(); AddressBook.close(); z=1; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if(y==0){ JOptionPane.showMessageDialog(null,"录入成功", "录入结果",JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null,"修改成功", "修改结果",JOptionPane.INFORMATION_MESSAGE); } Tname.setText(""); Tphone.setText(""); Temail.setText(""); Tother.setText(""); //Cgroup.setName("无"); //Cbirthyear.setName("1985"); //Cbirthmonth.setName("1"); //Cbirthday.setName("1"); } } }); cancel.addActionListener(new ActionListener() //设置监听器 { public void actionPerformed(ActionEvent e) //用匿名内部类实现监听器 { frame.dispose(); z=0; } }); } public void actionPerformed(ActionEvent e) { new Typein().typein(); } }
JAVA方法递归调用后,对象的值没改变
``` void CreateBiTree(BiTree T){ Scanner in = new Scanner(System.in); T = new BiTree(); try{ T.data = in.nextInt(); } catch(InputMismatchException e){ T = null; return ; } CreateBiTree(T.lchild); CreateBiTree(T.rchild); } ``` 输入153 . .后,T的值仍是null 我其实是输入了153 第一个输入的INT是153 然后 . 这是个字符...就会异常处理,然后把子树变成NULL 但是当整个递归完了之后,T这个对象应该是只有一个根结点的树 不过运行的时候它却是null
为什么在同一局域网下的不同电脑上边运行该程序,不可以实现网络通信!?
import java.net.*; import java.io.*; import java.util.*; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ // 让该类实现Runnable接口,该类的实例可作为线程的target public class MulticastSocketTest implements Runnable { // 使用常量作为本程序的多点广播IP地址 private static final String BROADCAST_IP = "230.0.0.1"; // 使用常量作为本程序的多点广播目的的端口 public static final int BROADCAST_PORT = 30000; // 定义每个数据报的最大大小为4K private static final int DATA_LEN = 4096; //定义本程序的MulticastSocket实例 private MulticastSocket socket = null; private InetAddress broadcastAddress = null; private Scanner scan = null; // 定义接收网络数据的字节数组 byte[] inBuff = new byte[DATA_LEN]; // 以指定字节数组创建准备接受数据的DatagramPacket对象 private DatagramPacket inPacket = new DatagramPacket(inBuff , inBuff.length); // 定义一个用于发送的DatagramPacket对象 private DatagramPacket outPacket = null; public void init()throws IOException { try( // 创建键盘输入流 Scanner scan = new Scanner(System.in)) { // 创建用于发送、接收数据的MulticastSocket对象 // 由于该MulticastSocket对象需要接收数据,所以有指定端口 socket = new MulticastSocket(BROADCAST_PORT); socket.setTimeToLive(1); broadcastAddress = InetAddress.getByName(BROADCAST_IP); // 将该socket加入指定的多点广播地址 socket.joinGroup(broadcastAddress); // 设置本MulticastSocket发送的数据报会被回送到自身 socket.setLoopbackMode(false); // 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组 outPacket = new DatagramPacket(new byte[0] , 0 , broadcastAddress , BROADCAST_PORT); // 启动以本实例的run()方法作为线程体的线程 new Thread(this).start(); // 不断读取键盘输入 while(scan.hasNextLine()) { // 将键盘输入的一行字符串转换字节数组 byte[] buff = scan.nextLine().getBytes(); // 设置发送用的DatagramPacket里的字节数据 outPacket.setData(buff); // 发送数据报 socket.send(outPacket); } } finally { socket.close(); } } public void run() { try { while(true) { // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。 socket.receive(inPacket); // 打印输出从socket中读取的内容 System.out.println("聊天信息:" + new String(inBuff , 0 , inPacket.getLength())); } } // 捕捉异常 catch (IOException ex) { ex.printStackTrace(); try { if (socket != null) { // 让该Socket离开该多点IP广播地址 socket.leaveGroup(broadcastAddress); // 关闭该Socket对象 socket.close(); } System.exit(1); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { new MulticastSocketTest().init(); } }
JAVA实现简陋聊天室为什么输出两次输入一次?
import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; /** * 聊天室客户端 * @author Administrator * */ public class Client { private Socket socket; /** * 构造方法,用来初始化客户端 */ public Client() { try { System.out.println("正在连接服务端........"); socket =new Socket("localhost",8088); System.out.println("已连接服务端"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 客户端开始工作的方法 */ public void start() { try { OutputStream out=socket.getOutputStream(); OutputStreamWriter osw=new OutputStreamWriter(out,"UTF-8"); BufferedWriter bw=new BufferedWriter(osw); PrintWriter pw=new PrintWriter(bw,true); Scanner scan=new Scanner(System.in); String line; System.out.println("输入exit即可退出服务器"); while(true) { line=scan.nextLine(); if("exit".equals(line.toLowerCase())) { pw.println("exit"); break; } pw.flush(); pw.println(line); } pw.close(); }catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Client client=new Client(); client.start(); } } import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; /** * 聊天室服务端 * @author Administrator * */ public class Server { private ServerSocket server; /** * 构造方法,用来初始化服务端 */ public Server() { try { System.out.println("正在启动客户端......"); server=new ServerSocket(8088); System.out.println("客户端启动完毕 !"); } catch (IOException e) { e.printStackTrace(); } } /** * 服务端开始工作的方法 */ public void start() { try { System.out.println("等待客户端连接......"); Socket socket=server.accept(); System.out.println("一个客户端连接了"); InputStream in=socket.getInputStream(); InputStreamReader isr=new InputStreamReader(in,"UTF-8"); BufferedReader br=new BufferedReader(isr); while(true) { if("exit".equals(br.readLine())) { System.out.println("客户端已退出"); break; } System.out.println(br.readLine()); } br.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Server server=new Server(); server.start(); } }
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 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...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
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)需要把备份的数据同步到远程备份中心,假如...
聊聊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 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
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...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问