02_Java语音进阶||day18_Java基础小节练习(17-20部分)数据类型转换&运算符&方法入门、数组、网络通信概述&TCP协议、线程池&lambda表达式

第一部分 数据类型转换&运算符&方法入门

第一题

  • 编写步骤:
  1. 定义类 Test1
  2. 定义 main方法
  3. 定义两个byte类型变量b1,b2,并分别赋值为10和20.
  4. 定义变量b3,保存b1和b2的和,并输出.
  5. 定义两个short类型变量s1,s2,并分别赋值为1000和2000.
  6. 定义变量s3,保存s1和s2的和,并输出.
  7. 定义一个char类型变量c1赋值为’a’,一个int类型变量i1赋值为30.
  8. 定义变量ch3,保存c1和i1的差,并输出.
  • 参考答案:

java

  	  public class Test1 {

	  public static void main(String[] args) {
	
	      // 定义两个 byte类型变量
	      byte b1 = 10;
	      byte b2 = 20;
	      // 定义int 类型变量 b3
	      int b3 = b1 + b2;
	      System.out.println("byte类型b1和b2的和为:");
	      System.out.println(b3);
	      
	      // 定义两个 short类型变量
	      short s1 = 1000;
	      short s2 = 2000;
	      // 定义int 类型变量 b3
	      int s3 = s1 + s2;
	      System.out.println("short类型s1和s2的和为:");
	      System.out.println(s3);
	
	      // 定义char类型变量
	      char ch1 = 'a';
	      // 定义int类型变量
	      int i1 = 30;
	      // 定义int 类型变量 ch3
	      int ch3 = ch1 - i1;
	      System.out.println("char类型ch1和int类型i1的差为:");
	      System.out.println(ch3);
		}
  	}	

第二题

  • 编写步骤:

    1. 定义类 Test2
    2. 定义 main方法
    3. 定义 int类型变量i1 和 long类型变量l1
    4. 定义变量add,保存i1和l1的和,并输出.
    5. 定义 long类型变量l2 和 float类型变量f2
    6. 定义变量add2,保存l2和f2的和,并输出.
    7. 定义 int类型变量i3 和 double类型变量d3
    8. 定义变量add3,保存i3和d3的和,并输出.
    9. 定义 float类型变量f4 和 double类型变量d4
    10. 定义变量add4,保存f4和d4的和,并输出.
  • 参考答案:
    java

      public class Test2 {
    
      	  public static void main(String[] args) {
      	      // 定义 int类型变量i1 和 long类型变量l1
      	      int i1 = 100;
      	      long l1 = 200;
      	      // 定义变量add,保存i1和l1的和,并输出.
      	      long add = i1 + l1;
      	      System.out.println("add 的值:"+add);
      	       // 定义 long类型变量l2 和 float类型变量f2
      	      long l2 = 1000000;
      	      float f2 = 0.45F;
      	      // 定义变量add2,保存l1和f1的和,并输出.
      	      float add2 = l2 + f2;
      	      System.out.println("add2的值:"+add2);
      	       // 定义 int类型变量i3 和 double类型变量d3
      	      int i3 = 1000000;
      	      double d3 = 0.45;
      	      // 定义变量add3,保存i2和d1的和,并输出.
      	      double add3 = i3 + d3;
      	      System.out.println("add3的值:"+add3);
      	      //定义 float类型变量f2 和 double类型变量d2
      	      float f4 = 1000000.789F;
      	      double d4 = 0.45;
      	      //定义变量add4,保存f2和d2的和,并输出.
      	      double add4 = f4 + d4;
      	      System.out.println("add4的值:"+add4);
      	  }
      }
    

第三题

  • 编写步骤:

    1. 定义类 Test3
    2. 定义 main方法
    3. 定义char类型变量ch,赋值为’J’
    4. 使用强制转换的方式,将变量ch转换为小写’j’,并输出
    5. 定义char类型变量ch2,赋值为’a’
    6. 使用+=的方式,将变量ch2转换为大写’A’,并输出
    7. 定义double类型变量d3,int类型变量i3
    8. 定义double变量sum3,保存d3与i3的和,输出sum3的值和sum3去除小数部分的值
    9. 定义double类型变量d4,int类型变量i4
    10. 定义int变量mul4,保存d4和i4乘积的整数部分,并输出
  • 参考答案:

java

public class Test3 {
    public static void main(String[] args) {
        // 定义char类型变量ch,赋值为'J'
        char ch = 'J';
        // 将变量ch转换为小写'j',并输出
        ch = (char) (ch + 32);
        System.out.println(ch);


        // 定义char类型变量ch2,赋值为'a'
        char ch2 = 'a';
        // 将变量ch2转换为大写'A',并输出
        ch2 -= 32;
        System.out.println(ch2);


        // 定义double类型变量d3,int类型变量i3
        double d3 = 3.5;
        int i3 = 100;

        // 定义变量sum3,保存d3和i3的和,将sum3去除小数部分并输出.
        double sum3 = d3 + i3;
        System.out.println("sum3的的值:"+ sum3);
        System.out.println("sum3的整数部分的值:"+(int) sum3);


        // 定义double类型变量d4,int类型变量i4
        double d4 = 5.8;
        int i4 = 300;
        // 定义int变量mul4,保存d4和i4乘积的整数部分,并输出
        int mul4 = (int) (d4 * i4);
        System.out.println("mul4的整数部分值:"+mul4);

    }
}

第四题

  • 编写步骤:

    1. 定义类 Test4
    2. 定义 main方法
    3. 定义两个int类型变量a1和a2,分别赋值10,11,判断变量是否为偶数,拼接输出结果
    4. 定义两个int类型变量a3和a4,分别赋值12,13,判断变量是否为奇数,拼接输出结果
  • 参考答案:

    public class Test4 {
      	public static void main(String[] args) {
            // 定义两个int类型变量a1和a2,分别赋值10,11,判断变量是否为偶数,拼接输出结果
            int a1 = 10;
            int a2 = 11;
            boolean b1 = a1 % 2 == 0;
            boolean b2 = a2 % 2 == 0;
            System.out.println("10是偶数?" + b1);
            System.out.println("11是偶数?" + b2);
            // 定义两个int类型变量a3和a4,分别赋值12,13,判断变量是否为奇数,拼接输出结果
            int a3 = 12;
            int a4 = 13;
            boolean b3 = a3 % 2 == 1;
            boolean b4 = a4 % 2 == 1;
            System.out.println("12是奇数?" + b3);
            System.out.println("13是奇数?" + b4);
      	}
    }
    

第五题

  • 编写步骤:

    1. 定义类 Test5
    2. 定义 main方法
    3. 定义一个int类型变量a,变量b,都赋值为20.
    4. 定义boolean类型变量bo , 判断++a 是否被3整除,并且a++ 是否被7整除,将结果赋值给bo
    5. 输出a的值,bo的值.
    6. 定义boolean类型变量bo2 , 判断b++ 是否被3整除,并且++b 是否被7整除,将结果赋值给bo2
    7. 输出b的值,bo2的值.
  • 参考答案:

    public class Test5 {
      	public static void main(String[] args) {
            //定义一个int类型变量a,赋值为20.
            int a = 20;
            //定义boolean类型变量bo , 判断++a 是否被3整除,并且a++ 是否被7整除,将结果赋值给bo
            boolean bo = ++a % 3 == 0 && a++ % 7 == 0;
            //输出a的值,bo的值.
            System.out.println("bo的值:" + bo);
            System.out.println("a的值:" + a);
            System.out.println("-------------");
            //定义一个int类型变量b,赋值为20.
            int b = 20;
            //定义boolean类型变量bo2 , 判断b++ 是否被3整除,并且++b 是否被7整除,将结果赋值给bo2
            boolean bo2 = b++ % 3 == 0 && ++b % 7 == 0;
            //输出b的值,bo2的值.
            System.out.println("bo2的值:" + bo2);
            System.out.println("b的值:" + b);
      	}
    }
    

第六题

  • 编写步骤:
  1. 定义类 Test6
  2. 定义 main方法
  3. 定义方法printNum,在main方法中调用printNum方法
  4. printNum方法中,定义int变量a赋值为9,b也赋值为9
  5. printNum方法中,定义int变量num赋值为++a.
  6. printNum方法中,定义boolean变量bo,使用三元运算符赋值,当num>=10,赋值为true,否则为false,打印bo的值
  7. printNum方法中,定义int变量num2赋值为b++.
  8. printNum方法中,定义boolean变量bo2,使用三元运算符赋值,当num2>=10,赋值为true,否则为false.打印bo2的值
  • 参考答案:

      	public class Test6 {
      	    public static void main(String[] args) {
      	//        在main方法中调用printNum方法
      	        printNum();
      	    }
      	
      	    private static void printNum() {
      	
      	//        printNum方法中,定义int变量a赋值为9,b也赋值为9
      	        int a = 9;
      	        int b = 9;
      	
      	//        printNum方法中,定义int变量num赋值为++a.
      	        int num = ++a;
      	//        printNum方法中,定义boolean变量bo,使用三元运算符赋值,当num>=10,赋值为true,否则为false,打印bo的值
      	        boolean bo = (num >= 10) ? true : false;
      	        System.out.println("bo的值"+bo);
      	
      	//        printNum方法中,定义int变量num2赋值为b++.
      	        int num2 = b++;
      	//        printNum方法中,定义boolean变量bo2,使用三元运算符赋值,当num2>=10,赋值为true,否则为false,打印bo2的值
      	        boolean bo2 = (num2 >= 10) ? true : false;
      	        System.out.println("bo2的值"+bo2);
      	    }
      	}
    


第七题

  • 编写步骤:

    1. 定义类 Test7
    2. 定义 main方法
    3. 定义方法printNum,在main方法中调用printNum方法
    4. printNum方法中,定义float变量f1赋值12345.01
    5. printNum方法中,定义float变量f2赋值12345.00
    6. printNum方法中,定义float 变量 var1 , 使用三元运算符赋值,当f1大于等于f2时,赋值12456 ,当f1小于f2赋值12456.02
    7. printNum方法中,定义float 变量 var2 , 保存var1 与1024的和.
    8. printNum方法中,同时输出var1,var2的值.
  • 参考答案:

    public class Test7 {
    
        public static void main(String[] args) {
    //        在main方法中调用printNum方法
            printNum();
    
        }
    
        public static void printNum() {
    //        定义float变量f1赋值12345.01,定义float变量f2赋值12345.00
            float f1 = 12345.01F;
            float f2 = 12345.00F;
    
    //        定义float变量var1 , 使用三元运算符赋值,当f1大于等于f2时,赋值12456 ,当f1小于f2赋值12456.02
            float var1 = (f1 >= f2) ? 12456 : 12456.02F;
    //        定义float 变量 var2 , 保存var1 与1024的和.
            float var2 = var1 + 1024;
    //        输出var1,var2的值.
            System.out.println("var1的值为: " + var1 + " var2的值为:" + var2);
        }
    }
    

第八题

  • 按步骤编写代码,效果如图所示:
  • 编写步骤:

    1. 定义类 Test8
    2. 定义 main方法
    3. 定义printNum方法,在main方法中调用printNum方法
    4. printNum方法中,定义int类型变量i赋值为10,j 赋值为20;
    5. printNum方法中,将 i/5 的商 与 j的和 赋值给j
    6. printNum方法中,定义int类型变量k,将j赋值给k.
    7. printNum方法中,最后同时输出 i, j ,k 的值,查看结果.
  • 参考答案:

public class Test8 {
public static void main(String[] args) {
printNum();
}

public static void printNum() {

    int i = 10;
    int j = 20;
    j += i / 5;
    int k = j;

    System.out.println("i:" + i + " j:" + j + " k:" + k);

}

}


### 后俩扩展题目:
### 第九题

- 按步骤编写代码,效果如图所示:

- 编写步骤:

1. 定义类 Test9
2. 定义 main方法
3. 定义printString方法
4. printNum方法中,定义String 类型变量str.
5. printNum方法中,定义int类型变量num,赋为任意整数值.
6. printNum方法中,通过三元运算符,判断num为偶数,将"偶数"赋值给str,否则将"奇数"赋值给str
7. printNum方法中,输出拼接效果

- 参考答案:

```java

public class Test9 {
    public static void main(String[] args) {

        printString();

    }

    public static void printString() {
        String  str ;
        int num = 69;
        str = (num % 2== 0)? "偶数": "奇数";
        System.out.println("num:"+num+"是"+str);
    }
}

第十题

  • 编写步骤:

    1. 定义类 Test10
    2. 定义 main方法
    3. 定义add方法,打印两个变量的和
    4. 定义sub方法,打印两个变量的差
    5. 定义mul方法,打印两个变量的积
    6. 定义div方法,打印两个变量的商
    7. 定义remain方法,打印两个变量的余数
    8. main方法中,依次调用add方法,sub方法,mul方法,div方法,remain方法
  • 参考答案:

public class Test10 {
    public static void main(String[] args) {
        add();
        sub();
        mul();
        div();
        remain();
    }
  public static void add() {
      int x = 100;
      int y = 200;

      // 打印x和y的和 到控制台
      System.out.println("x,y的和为:" + (x + y));
  }

  public static void sub() {
      int x = 100;
      int y = 200;

      // 打印x和y的和 到控制台
      System.out.println("x,y的差为:" + (x - y));
  }

  public static void mul() {
      int x = 100;
      int y = 200;

      // 打印x和y的积 到控制台
      System.out.println("x,y的积为:" + (x * y));
  }

  public static void div() {
      int x = 100;
      int y = 200;

      // 打印x和y的商 到控制台
      System.out.println("x,y的商为:" + (x / y));
  }

  private static void remain() {
      int x = 100;
      int y = 200;

      // 打印x和y的余数 到控制台
      System.out.println("x,y的余数为:" + (x % y));

  }
}

第二部分 数组

第一题:需求实现

  • 模拟大乐透号码:

    • 一组大乐透号码由10个1-99之间的数字组成
    • 定义方法,打印大乐透号码信息
  • 开发提示:

    • 使用数组保存录入的号码
  • 参考答案:


	public class Test1 {
	    public static void main(String[] args) {
	        int[] arr  = {10,20,30,40,50, 60,66,70,80,99};
	        printNum(arr);
	    }
	
	    public static void printNum(int[] arr) {
	        System.out.println("您的大乐透号码为:");
	        for (int i = 0; i < arr.length; i++) {
	            System.out.print(arr[i]+" ");
	        }
	    }
	}

第二题:需求实现

  • 打印扑克牌.

  • 开发提示:

    • 使用两个字符串数组,分别保存花色和点数

	public class Test2 {
	    public static void main(String[] args) {
	        // 花色数组
	        String[] hs  = {"黑桃","红桃","梅花","方片"};
	        // 点数数组
	        String[] ds = {"A","2","3","4", "5","6","7","8","9","10","J","Q","K"};
	        printCard(hs,ds);
	    }
	    public static void printCard(String[] hs ,String[] ds){
	        for (int hs_index = 0; hs_index < hs.length; hs_index++) {
	            for (int ds_index = 0; ds_index < ds.length; ds_index++) {
	                // 拼接字符串
	                System.out.print(  hs[hs_index] + ds[ds_index]+" ");
	            }
	            // 输出换行
	            System.out.println();
	        }
	    }
	}

第三题:需求实现

  • 模拟在一副牌中,抽取第1张,第5张,第50张扑克牌。

  • 参考答案:


	public class Test3 {
	    public static void main(String[] args) {
	        // 获取所有扑克牌
	        String[] puke = getPuke();
	
	        // 抽取指定的三种扑克牌
	        int num1 = 1;
	        int num2 = 5;
	        int num3 = 50;
	        String[] pk3 = get3(puke , num1 ,num2,num3);
	        // 打印抽取的牌
	        for (int i = 0; i < pk3.length; i++) {
	            System.out.print(pk3[i] + " ");
	        }
	    }
	
	    private static String[] getPuke() {
	
	        String[] colors={"黑色","红桃","梅花","方块"};
	        String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
	
	        String[] puke = new String[54];
	        int index = 0;
	        for (int i = 0; i < colors.length; i++) {
	            for (int j = 0; j < nums.length; j++) {
	                puke[index] = colors[i]+nums[j];
	                index ++;
	            }
	        }
	        puke[52] = "小王";
	        puke[53] = "大王";
	
	        return puke;
	
	    }
	
	    public static String[] get3(String[] puke, int i, int i2, int i3) {
	        String[] pk3 = new String[3];
	        pk3[0] = puke[i - 1];
	        pk3[1] = puke[i2 - 1];
	        pk3[2] = puke[i3 - 1];
	        return pk3;
	    }
	}

第四题:需求实现

  • 统计字符

    • 字符数组:{‘a’,‘l’,‘f’,‘m’,‘f’,‘o’,‘b’,‘b’,‘s’,‘n’}
    • 定义printCount方法,统计每个字符出现的次数并打印到控制台。
  • 开发提示:

    • 将数字强制转换,根据ASCII码表转换为字符。
    • 可以定义长度26的数组,每个元素,对应去保存每种字符的出现次数,比如0索引保存a的次数,1索引保存b的次数,以此类推。
  • 参考答案:

    
        public class Test4 {
            public static void main(String[] args) {
                //  获取长度100的字符数组
                char[] charArray = {'a','l','f','m','f','o','b','b','s','n'};
                //  统计字符数组中字母出现次数
                printCount(charArray);
            }
            public static void printCount(char[] charArray) {
                int[] count= new int[26];
                // 对应保存字母出现的次数
                for (int i = 0; i < charArray.length; i++) {
                    int c  = charArray[i];
                    count[c- 97]++;
                }
                // 打印字母和次数
                for (int i = 0, ch = 97; i < count.length; i++, ch++) {
                    if (count[i] != 0 ) {
                        System.out.println((char) ch + "--" + count[i]);
                    }
                }
            }
        }
    

第五题:需求实现

  • 统计高于平均分的分数有多少个。

    • 定义数组[95, 92, 75, 56, 98, 71, 80, 58, 91, 91]。
    • 定义getAvg方法,获取一个数组中的平均数
  • 参考答案:

    
        public class Test5 {
            public static void main(String[] args) {
                // 获取随机分数
                int[] score = {95, 92, 75, 56, 98, 71, 80, 58, 91, 91};
                // 获取平均分
                int avg = getAvg(score);
                // 定义计数的变量
                int count = 0 ;
                for (int i = 0; i < score.length; i++) {
                    if (score[i] > avg){
                        count++;
                    }
                }
                System.out.println("高于平均分:"+avg+" 的 个数有" + count+" 个");
            }
            // 获取平均分的方法
            public static int getAvg(int[] arr) {
                int sum = 0;
                for (int i = 0; i < arr.length; i++) {
                    sum += arr[i];
                }
                return sum / arr.length;
            }  
        }
    

第六题:需求实现

  • 定义sym方法,判断数组中的元素值是否对称.

  • 开发提示:

    • 数组中元素首尾比较。
  • 参考答案:

    
        public class Test6 {
            public static void main(String[] args) {
                int[] arr = {1,2,3,4,3,2,1};
                System.out.println(Arrays.toString(arr) +" 是否对称:" +sym(arr) );
      
                int[] arr2 = {1,2,3,4,5,2,1};
                System.out.println(Arrays.toString(arr2) +" 是否对称:" +sym(arr2) );
            }
      
            public static boolean sym(int[] arr) {
                /*
                start : 数组头
                end :数组尾 
                 */
                for (int start = 0 , end = arr.length -1 ; start <= end; start++, end--) {
                    // 如果两端一旦有元素不等,就返回false
                    if (arr[start] != arr[end]) {     
                        return false;
                    }
                }
                return true;
            }
        }
    

第七题:需求实现

  • 定义equals方法,比较数组内容是否完全一致。

  • 开发提示:

    • 长度一致,内容一致,定义为完全一致。
  • 参考答案:

    
        public class Test7 {
            public static void main(String[] args) {
      
                int[] arr = {1,2,3,4,3,2,1};
                int[] arr2 = {1,2,3,4,3,2,1};
                System.out.println(" 是否一致:" +equals(arr ,arr2) );
      
            }
            //  比较数组的内容
            public static boolean equals(int[] arr1, int[] arr2) {
        	// 长度不同,返回false
                if (arr1.length != arr2.length) {
                    return false;
                }
        	
        	//
                for (int i = 0; i < arr1.length; i++) {
                    // arr1[i] 和 arr2[i]比较
                    /*
                     * 所有元素都相同才相同,也就是只要有一个不同,这两个数组就是不同
                     */
                    if (arr1[i] != arr2[i]) {
                        return false;
                    }
                }
                return true;
            }
        }
    

第三部分 网络通信概述&TCP协议

第一题:ip地址和端口号概念

  1. 概述:
    • 请写出IP地址的概念:
    • 请写出端口号的概念:
  2. 解答:
    • IP地址:互联网协议地址(Internet Protocol Address),俗称IP.IP地址用来给一个网络中的计算机设备做唯一的编号.
    • 端口号:端口号用来给计算机里的应用程序(进程)做唯一的标识,用2个字节表示的整数,取值范围0~65535.

第二题:UDP协议

  1. 概述:判断下列说法是否正确
    • 由于UDP面向无连接的协议,可以保证数据完整性,因此在传输重要数据时采用UDP协议.
  2. 解答:错
    • 因为面向无连接,容易丢失包,所以不能保证数据完整.

第三题:TCP协议

  1. 概述:
    • TCP协议中”三次握手”,第一次握手指的是什么
  2. 解答:
    • 第一次握手:客户端向服务器发送请求,等待服务器确认

第四部分 线程池&lambda表达式

第一题:线程池概念

  1. 概述:
    • 请描述什么是线程池。
  2. 解答:
    • 线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。

第二题:线程池优点

  1. 概述:
    • 请描述合理利用线程池能够带来的三个好处。
  2. 解答:
    1. 降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
    2. 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
    3. 提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。

第三题:Lambda表达式

  1. 概述:
    • 请列举Lambda语法的省略规则
  2. 解答:
    • 在Lambda标准格式的基础上,使用省略写法的规则为:
      1. 小括号内参数的类型可以省略;
      2. 如果小括号内有且仅有一个参,则小括号可以省略;
      3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

第四题:Lambda表达式

  1. 概述:
    • 请列举Lambda表达式的3个组成部分,并解释说明。
  2. 解答:
    • Lambda标准格式 Lambda省去面向对象的条条框框,格式由3个部分组成:一些参数,一个箭头,一段代码。
    • Lambda表达式的标准格式为:格式说明:
      1. 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
      2. ->是新引入的语法格式,代表指向动作。
      3. 大括号内的语法与传统方法体要求基本一致。

第五题:Lambda表达式

  1. 概述:
    • 请描述Lambda的使用前提
  2. 解答:
    • Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:
      1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
      2. 使用Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

第六题:多线程

02_Java语音进阶||day18_Java基础小节练习(17-20部分)数据类型转换&运算符&方法入门、数组、网络通信概述&TCP协议、线程池&lambda表达式_第1张图片

你可能感兴趣的:(笔记)