用户交互Scanner

Scanner对象

  • 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是java5的新特性,我们可以通过Scanner类来获取用户的输入

  • 调用Scanner类时ctrl点击Scanner可以进入他的类文件查看其它方法

  • 基本语法:

  1. Scanner s = new Scanner(System.in);
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入饿数据。

hasNext()与next()

next()

  • 一定要读取到有效字符后才可以结束输入
  • 对输入有效字符之前遇到的空白,next()方法会自动将其抹去
  • 只有输入有效字符后才将其后输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串
  1. package com.shenxiaoyu.scanner;
  2. import java.util.Scanner;
  3. public class Demo001 {
  4. public static void main(String[] args) {
  5. //创建一个扫描器对象,用于接收键盘数据
  6. Scanner scanner = new Scanner(System.in);//接收用户输入并封装成Scanner对象
  7. System.out.println("请输入相关内容:");
  8. //判断用户有没有输入字符串
  9. if(scanner.hasNext()){
  10. //使用next方法接收
  11. String str = scanner.next();
  12. System.out.println("输入的内容为:"+str);
  13. }
  14. scanner.close();//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
  15. }
  16. }

输出结果:

hasNextLine()与nextLine()

nextLine()

  • 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
  • 可以获得空格/空白
  1. package com.shenxiaoyu.scanner;
  2. import java.util.Scanner;
  3. public class Demo002 {
  4. public static void main(String[] args) {
  5. //从键盘接收数据
  6. Scanner scanner = new Scanner(System.in);
  7. System.out.println("请输入相关内容:");
  8. //判断是否还有输入
  9. if(scanner.hasNextLine()){
  10. //使用nextLine方法接收
  11. String str = scanner.nextLine();
  12. System.out.println("输入的内容为:"+str);
  13. }
  14. scanner.close();
  15. }
  16. }

输出结果:

不加if语句也可以实现输入输出,前面if语句是为了判断用户是否输入字符串

  1. package com.shenxiaoyu.scanner;
  2. import java.util.Scanner;
  3. public class Demo003 {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. System.out.println("请输入相关内容:");
  7. String str = scanner.nextLine();
  8. System.out.println("输入的内容为:"+str);
  9. scanner.close();
  10. }
  11. }

结果和刚才是一样的:

Scanner进阶用法

输入整型和浮点型

  1. package com.shenxiaoyu.scanner;
  2. import java.util.Scanner;
  3. public class Demo004 {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. //从键盘接收数据
  7. int i = 0;
  8. float f = 0.0f;
  9. System.out.println("请输入整数:");
  10. if(scanner.hasNextInt()){
  11. i = scanner.nextInt();
  12. System.out.println("整数数据:"+i);
  13. }else{
  14. System.out.println("输入的不是整数数据!");
  15. }
  16. System.out.println("请输入小数:");
  17. if(scanner.hasNextFloat()){
  18. f = scanner.nextFloat();
  19. System.out.println("小数数据:"+f);
  20. }else{
  21. System.out.println("输入的不是小数数据!");
  22. }
  23. scanner.close();
  24. }
  25. }

结果:

求和与平均数

  1. package com.shenxiaoyu.scanner;
  2. import java.util.Scanner;
  3. public class Demo005 {
  4. public static void main(String[] args) {
  5. //我们可以输入多个数字,并求总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束并输出执行结果:
  6. Scanner scanner = new Scanner(System.in);
  7. //和
  8. double sum =0;
  9. //计算输入了多少个数字
  10. int m =0;
  11. //通过循环判断是否还有输入,并在里面对每一个进行求和和统计
  12. while(scanner.hasNextDouble()){
  13. double x = scanner.nextDouble();
  14. m++;//m+1
  15. sum=sum+x;
  16. System.out.println("你输入了第"+m+"个数据,然后当前结果sum="+sum);
  17. }
  18. System.out.println(m+"个数的和为:"+sum);
  19. System.out.println(m+"个数的平均值为:"+(sum/m));
  20. scanner.close();
  21. }
  22. }

结果为:

顺序结构

  • JAVA的基本结构就是顺序结构,除非特别指明,否则,就按照顺序一句一句执行
  • 顺序结构是最简单的算法结构
  • 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。

选择结构

if单选择结构

我们很多时候需要判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示

语法:

  1. if(布尔表达式){
  2. //如果布尔表达式为true将执行括号{}里的语句,否则将不执行
  3. }

运用scanner练习if单选择结构:

  1. package com.shenxiaoyu.struct;
  2. import java.util.Scanner;
  3. public class IfDemo01 {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. System.out.println("请输入内容:");
  7. String s = scanner.nextLine();
  8. //equals:判断字符串是否相等
  9. if (s.equals("Hello")){
  10. System.out.println(s);
  11. }
  12. System.out.println("End");
  13. scanner.close();
  14. }
  15. }

结果:

if-else双选择结构

那现在有个需求,成功了,我要A,失败了,我要B,这样的需求用一个if就搞不定了,我们需要有两个判断,需要一个双选择结构,所以有了if-else结构

语法:

  1. if(布尔表达式){
  2. //如果布尔表达式为true
  3. }else{
  4. //如果布尔表达式为false
  5. }

运用scanner练习if-else双选择结构:

  1. package com.shenxiaoyu.struct;
  2. import java.util.Scanner;
  3. public class IfDemo02 {
  4. public static void main(String[] args) {
  5. //考试分数大于60就是及格,小于60分就是不及格
  6. Scanner scanner = new Scanner(System.in);
  7. System.out.println("请输入成绩:");
  8. int score = scanner.nextInt();
  9. if(score>60){
  10. System.out.println("及格");
  11. }else{
  12. System.out.println("不及格");
  13. }
  14. scanner.close();
  15. }
  16. }

结果:

if多选择结构

在生活中我们很多时候的选择不仅仅只有两个,所以我们需要一个多选择结构来处理这个问题

语法:

  1. if(布尔表达式 1){
  2. //如果布尔表达式 1的值为true执行代码
  3. }else if(布尔表达式 2){
  4. //如果布尔表达式 2的值为true执行代码
  5. }else if(布尔表达式 3){
  6. //如果布尔表达式 3的值为true执行代码
  7. }....
  8. else {
  9. //如果以上布尔表达式都不为true执行代码
  10. }

运用scanner练习if多选择结构:

  1. package com.shenxiaoyu.struct;
  2. import java.util.Scanner;
  3. public class IfDemo03 {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. System.out.println("请输入成绩:");
  7. int score = scanner.nextInt();
  8. if(score==100){
  9. System.out.println("恭喜满分");
  10. }else if(score<100 && score>=90){
  11. System.out.println("A级");
  12. }else if(score<90 && score>=80){
  13. System.out.println("B级");
  14. }else if(score<80 && score>=70){
  15. System.out.println("C级");
  16. }else if(score<70 && score>=60){
  17. System.out.println("D级");
  18. }else if(score<60 && score>=0){
  19. System.out.println("不及格");
  20. }else {
  21. System.out.println("成绩不合法");
  22. }
  23. scanner.close();
  24. }
  25. }

结果:

注意点:

  • if语句至多有1个else语句,else语句在所有else if语句之后
  • if语句可以有若干个else if语句,它们必须在else语句之前
  • 一旦其中一个else if语句检测为true,其他的else if以及else语句都将跳过执行

嵌套的if结构

使用嵌套的if-else语句是合法的,也就是说你可以在另一个if或者else if语句中使用if或者else if语句。你可以像if语句一样嵌套else if....else

语法:

  1. if(布尔表达式 1){
  2. //如果布尔表达式 1的值为true执行代码
  3. if(布尔表达式 2){
  4. //如果布尔表达式 2的值为true执行代码
  5. }
  6. }

运用scanner练习嵌套的if结构:

  1. package com.shenxiaoyu.struct;
  2. import java.util.Scanner;
  3. //查找输入0-100数的范围
  4. public class IfDemo04 {
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. System.out.println("请输入0-100的数字:");
  8. int num = scanner.nextInt();
  9. if(num<=100 && num>50){
  10. System.out.println("你输入的数大于50");
  11. if(num<=100 && num>75){
  12. System.out.println("你输入的数大于75");
  13. }else if (num==75){
  14. System.out.println("你输入的数等于75");
  15. }else{
  16. System.out.println("你输入的数小于75");
  17. }
  18. }else if(num==50){
  19. System.out.println("你输入的数等于50");
  20. }else if(num<50&& num>=0){
  21. System.out.println("你输入的数小于50");
  22. if(num<50 && num>25){
  23. System.out.println("你输入的数大于25");
  24. }else if (num==25){
  25. System.out.println("你输入的数等于25");
  26. }else{
  27. System.out.println("你输入的数小于25");
  28. }
  29. }else {
  30. System.out.println("你输入的数不合法");
  31. }
  32. scanner.close();
  33. }
  34. }

结果:

switch多选择结构

  • switch case 语句判断一个变量与一系列值中某个值是否相等,每个值都为一个分支
  • switch语句中变量的类型可以是:
    • byte,short,int或char
    • 从javaSE 7开始,switch支持字符串String类型了
    • 同时case标签必须为字符串常量或字面量

语法:

  1. switch(expression){
  2. case value:
  3. //语句
  4. break;//可选
  5. case value:
  6. //语句
  7. break;//可选
  8. //你可以有任意数量的case语句
  9. default://可选
  10. //语句
  11. }

switch多选择结构语句char练习:

  1. package com.shenxiaoyu.struct;
  2. public class SwitchDemo01 {
  3. public static void main(String[] args) {
  4. //switch匹配一个具体的值
  5. char grade = 'C';
  6. switch (grade){
  7. case 'A':
  8. System.out.println("优秀");
  9. break;
  10. case 'B':
  11. System.out.println("良好");
  12. break;
  13. case 'C':
  14. System.out.println("及格");
  15. break;
  16. case 'D':
  17. System.out.println("再接再厉");
  18. break;
  19. case 'E':
  20. System.out.println("挂科");
  21. break;
  22. default:
  23. System.out.println("未知等级");
  24. }
  25. }
  26. }

结果:

switch多选择结构语句String练习:

  1. package com.shenxiaoyu.struct;
  2. public class SwitchDemo02 {
  3. public static void main(String[] args) {
  4. String name = "油炸蘑菇鱼";
  5. switch(name){
  6. case "沈小榆":
  7. System.out.println("沈小榆是小可爱");
  8. break;
  9. case "油炸蘑菇鱼":
  10. System.out.println("快来关注油炸蘑菇鱼");
  11. break;
  12. default:
  13. System.out.println("弄啥嘞!");
  14. }
  15. }
  16. }

结果:

循环结构

while循环

  • while是最基本的循环,它的结构为:
  1. while(布尔表达式){
  2. //循环内容
  3. }
  • 只要布尔表达式为true,循环就会一直执行下去
  • 我们大多情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等
  • 循环条件一直为true就会造成无线循环【死循环】,我们正常业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死奔溃!

while循环实现1~100总和

  1. public class WhileDemo01 {
  2. public static void main(String[] args) {
  3. //输出1~100的和
  4. int i =0;
  5. int sum = 0;
  6. while(i<=100){
  7. sum=sum+i;
  8. i++;
  9. }
  10. System.out.println(sum);//5050
  11. }
  12. }

do...while循环

  • 对于while语句而言,如果不满足条件,则不进入循环,但有时候我们需要即使不满足条件,也至少执行一次。
  • do-while循环和while循环相似,不同的是,do-while循环至少会执行一次

语法:

  1. do{
  2. //代码语句
  3. }while(布尔表达式);

do-while循环实现1~100总和

  1. public class DoWhileDemo {
  2. public static void main(String[] args) {
  3. int i=0;
  4. int sum =0;
  5. do{
  6. sum=sum+i;
  7. i++;
  8. }while (i<=100);
  9. System.out.println(sum);//5050
  10. }
  11. }

while和do-while的区别:

  • while先判断后执行,do-while是先执行后判断
  • do-while总是保证循环体会被至少执行一次!
  1. public class DoWhileDemo01 {
  2. public static void main(String[] args) {
  3. int a = 0;
  4. while(a<0){
  5. System.out.println(a);
  6. a++;
  7. }
  8. System.out.println("==============================");
  9. do{
  10. System.out.println(a);
  11. a++;
  12. }while(a<0);
  13. }
  14. }

从结果就能看出while和do-while的区别:

for循环

  • 虽然所有循环结构都可以用while或者do-while表示,但java提供了for循环,使一些循环结构变得更加简单
  • for循环语句支持迭代的一种通用结构,是最有效,最灵活的循环结构
  • for循环执行的次数是在执行前就确定的

语法:

  1. for(初始化;布尔表达式;更新){
  2. //代码语句
  3. }

快捷键:100.for+enter

while和for循环对比:

  1. public class ForDemo01 {
  2. public static void main(String[] args) {
  3. int a = 1;//初始化条件
  4. while(a<=100){//条件判断
  5. System.out.println(a);//循环体
  6. a+=2;//迭代
  7. }
  8. System.out.println("while循环结束!");
  9. //初始化 条件判断 迭代
  10. for(int i=1;i<=100;i++){
  11. System.out.println(i);
  12. }
  13. System.out.println("for循环结束!");
  14. }
  15. }

for循环注意点:

  • 最先执行初始化步骤。可以声明一种类型,但可以初始化一个或多个循环控制变量,也可以是空语句
  • 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句
  • 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
  • 再次检测布尔表达式,循环执行上面的过程

计算0到100之间的奇数和偶数和

  1. public static void main(String[] args) {
  2. //练习:计算0到100之间的奇数和偶数和
  3. int oddSum = 0;
  4. int evenSum = 0;
  5. for (int i = 0; i <=100; i++) {
  6. if(i%2!=0){
  7. oddSum+=i;
  8. }else{
  9. evenSum+=i;
  10. }
  11. }
  12. System.out.println("奇数和为:"+oddSum);//奇数和为:2500
  13. System.out.println("偶数和为:"+evenSum);//偶数和为:2550
  14. }

用while或for循环输出1~1000之间能被5整除的数,并且每行输出3个

  1. public class ForDemo03 {
  2. public static void main(String[] args) {
  3. //练习:用while或for循环输出1~1000之间能被5整除的数,并且每行输出3个
  4. for (int i = 0; i <=1000; i++) {
  5. if (i%5==0){
  6. System.out.print(i+"\t");
  7. }
  8. //每行输出3个
  9. if(i%(5*3)==0){
  10. System.out.println();//System.out.print("\n");
  11. }
  12. }
  13. //println 输出完会换行
  14. //print 输出完不会换行
  15. }
  16. }

打印九九乘法表

  1. public class ForDemo04 {
  2. public static void main(String[] args) {
  3. for (int i = 1; i <=9; i++) {
  4. //j<=i用来排除重复项
  5. for (int j =1; j <=i; j++) {
  6. System.out.print(i+"*"+j+"="+(i*j)+"\t");
  7. }
  8. System.out.println();
  9. /*
  10. 1*1=1
  11. 2*1=2 2*2=4
  12. 3*1=3 3*2=6 3*3=9
  13. 4*1=4 4*2=8 4*3=12 4*4=16
  14. 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
  15. 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
  16. 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
  17. 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
  18. 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
  19. */
  20. }
  21. }
  22. }

增强型for循环

  • java5引入了一种主要用于数组或者集合的增强型for循环

java增强for循环语法格式如下:

  1. for(声明语句:表达式){
  2. //代码句子
  3. }
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
  • 表达式:表达式是要访问的数组名,或者返回值为数组的方法
  1. public class ForDemo05 {
  2. public static void main(String[] args) {
  3. int[] numbers = {10,20,30,40,50,60};//定义了一个数组
  4. //遍历数组的元素
  5. for(int x:numbers){
  6. System.out.println(x);
  7. }
  8. System.out.println("=======================");
  9. for (int i = 0; i < 5; i++) {
  10. System.out.println(numbers[i]);
  11. }
  12. }
  13. }

和for对比结果相同:

break & continue & goto

break

在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

用于强行跳出循环语句但后续语句还是会被执行

  1. public class BreakDemo {
  2. public static void main(String[] args) {
  3. int i =0;
  4. while(i<100){
  5. i++;
  6. System.out.println(i);
  7. if (i==30){
  8. break;
  9. }
  10. }
  11. System.out.println("123我是测试");
  12. }
  13. }

结果:

continue语句

在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定

用于结束当前循环,但还是会继续其他循环

  1. public class ContinueDemo {
  2. public static void main(String[] args) {
  3. int i = 0;
  4. while(i<100){
  5. i++;
  6. if(i%10==0){
  7. System.out.println();
  8. continue;
  9. }
  10. System.out.print(i);
  11. }
  12. }
  13. }

结果:

关于goto关键字

  • goto关键字很早就在程序设计语言中出现,尽管goto仍是java的一个保留字,但并未在语言中得到正式使用;java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子---带标签的break和continue
  • “标签”是指后面跟一个冒号的标识符,例如:label:
  • 对于java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,他就会中断存在标签的地方。
  1. public class LabelDemo {
  2. public static void main(String[] args) {
  3. //打印101~150之间所有的质数
  4. //质数就是指大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
  5. int count =0 ;
  6. outer:for(int i=101;i<150;i++){
  7. for(int j=2;j<i/2;j++){
  8. if(i%j==0){
  9. continue outer;//i%j==0则跳回到for循环标签标记处
  10. }
  11. }
  12. System.out.print(i+" ");//101 103 107 109 113 127 131 137 139 149
  13. }
  14. }
  15. }

拓展:打印三角形

  1. public class TestDemo {
  2. public static void main(String[] args) {
  3. //打印三角形 5行
  4. for (int i = 1; i <= 5; i++) {
  5. for (int j = 5; j >=i; j--) {
  6. System.out.print(" ");
  7. }
  8. for (int j = 1; j <=i; j++) {
  9. System.out.print("*");
  10. }
  11. for (int j = 1; j <i; j++) {
  12. System.out.print("*");
  13. }
  14. System.out.println();
  15. /*
  16. *
  17. ***
  18. *****
  19. *******
  20. *********
  21. */
  22. }
  23. }
  24. }

Java流程控制以及顺序、选择、循环结构的更多相关文章

  1. Java基础-程序流程控制第二弹(循环结构)

    Java基础-程序流程控制第二弹(循环结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制有三种基本结构:顺序结构,选择结构和循环结构.一个脚本就是顺序结构执行的,选择结 ...

  2. Java流程控制:顺序结构

    一.流程控制 Java中的流程控制语句可以这样分类:顺序结构.选择结构.循环结构.这三种结构就足够解决所有的问题了! 二.顺序结构 描述: Java流程控制的基本结构就是顺序结构,除非特别指明,否则J ...

  3. java 基本语法(五) 流程控制(二) 循环结构

    1.循环结构的四要素① 初始化条件② 循环条件 --->是boolean类型③ 循环体④ 迭代条件说明:通常情况下,循环结束都是因为②中循环条件返回false了. 2.三种循环结构:2.1 fo ...

  4. Java流程控制:三种基本结构

    顺序结构: Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的, ...

  5. Java流程控制之顺序结构

    概述 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说,程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执行顺序 ...

  6. Java流程控制04——Switch选择结构

    switch 多选择结构 switch case 语句判断一个变量与一系列值中某个值是否相等,每个支撑位一个分支. switch语句中的变量类型可以是: byte short int 或者 char ...

  7. Java流程控制02——顺序结构

  8. JavaScript 流程控制(二)循环结构

    一.while 语句 语法结构: 声明循环变量:while (循环条件) { //循环体 // 迭代条件 } 当循环条件为 true 时,执行循环体:当循环条件为false时,结束循环. 二.do.. ...

  9. Java流程控制:增强for循环,break&continue,打印99乘法表

    增强for循环:java5引入了一种主要用于数组或集合的增强for循环for(声明语句:表达式){//代码句子} 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配.其作用域限定在循环语 ...

随机推荐

  1. java在指定区间内生成随机数

    Random对象生成随机数 首先需要导入包含Random的包 import java.util.Random; nextInt(int)方法将生成0~参数之间的随机整数但不包括参数. 例如生成0~99 ...

  2. 3.PEP 8是什么?

    PEP 8是什么? PEP 8 is a coding convention, a set of recommendation, about how to write your Python code ...

  3. 《Arduino实战》——2.4 反应速度计:谁真正拥有最快的反应时间

    本节书摘来异步社区<Arduino实战>一书中的第2章,第2.4节,作者:[美]Martin Evans ,Joshua Noble ,Jordan Hochenbaum,更多章节内容可以 ...

  4. 【K8S】K8S部署Metrics-Server服务

    写在前面 在新版的K8S中,系统资源的采集均使用Metrics-Server服务,可以通过Metrics-Server服务采集节点和Pod的内存.磁盘.CPU和网络的使用率等信息. 读者可参考< ...

  5. Vim Configuration

    安装原生态的Vim之后,界面是这样的: 行号,没有:自动缩进,没有:括号匹配,没有~ 为了我们使用的方便,进行一些基本的配置: sudo vim /etc/vim/vimrc 进入配置界面: 如下图进 ...

  6. CodeForces - 1245 B - Restricted RPS(贪心)

    Codeforces Round #597 (Div. 2) Let nn be a positive integer. Let a,b,ca,b,c be nonnegative integers ...

  7. Jenkins 节点配置

    1.配置代理 系统管理---configure Global Security(全局安全设置)---Tcp port for inbound agents---指定端口 服务器防火墙中开放此端口(li ...

  8. 一只简单的网络爬虫(基于linux C/C++)————socket相关及HTTP

    socket相关 建立连接 网络通信中少不了socket,该爬虫没有使用现成的一些库,而是自己封装了socket的相关操作,因为爬虫属于客户端,建立套接字和发起连接都封装在build_connect中 ...

  9. ubuntu16.04安装FastDFS-5.08

    fastdfs github地址: https://github.com/happyfish100/ 1.FastDFS上传原理 - storage定时向tracker上传状态信息 - client上 ...

  10. D. Carousel(分类+构造)

    \(题目的要求似乎很低:只需要不同类的相邻元素不同色就行了.\) 下面的讨论的话,实际上最后一个点是关键,要想到怎么让最后一个点不开新的颜色就简单了. \(分情况讨论:\) \(\color{Red} ...