统计
  • 建站日期:2021-03-10
  • 文章总数:518 篇
  • 评论总数:151 条
  • 分类总数:32 个
  • 最后更新:4月20日
文章 未分类

第3天代码_code

梦幻书涯
首页 未分类 正文

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/*
 比较运算符:
  ==,!=,>,>=,<,<=
  
 特点:
  无论你的操作是简单还是复杂,结果是boolean类型。
  
 注意事项:
  "=="不能写成"="。
*/
class OperatorDemo {
 public static void main(String[] args) {
  int x = 3;
  int y = 4;
  int z = 3;
 
  System.out.println(x == y);
  System.out.println(x == z);
  System.out.println((x+y) == (x+z));
  System.out.println("------------");
  
  System.out.println(x != y);
  System.out.println(x > y);
  System.out.println(x >= y);
  System.out.println(x < y);
  System.out.println(x <= y);
  System.out.println("------------");
  
  int a = 10;
  int b = 20;
  
  //boolean flag = (a == b);
  //boolean flag = (a = b); //这个是有问题的,不兼容的类型
  //System.out.println(flag);
  
  int c = (a = b); //把b赋值给a,然后把a留下来
  System.out.println(c);
 }
}


/*
 逻辑运算符:
  &,|,^,!
  &&,||
  
 特点:
  逻辑运算符一般用于连接boolean类型的表达式或者值。
   
  表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
   算术表达式:a + b
   比较表达式:a == b
   
 结论:
  &逻辑与:有false则false。
  |逻辑或:有true则true。
  ^逻辑异或:相同为false,不同为true。
   举例:情侣关系。男男,男女,女男,女女
  !逻辑非:非false则true,非true则false。
   特点:偶数个不改变本身。
*/
class OperatorDemo {
 public static void main(String[] args) {
  int a = 3;
  int b = 4;
  int c = 5;
  
  //&逻辑与
  System.out.println((a > b) & (a > c)); //false & false = false
  System.out.println((a > b) & (a < c)); //false & true = false
  System.out.println((a < b) & (a > c)); //true & false = false
  System.out.println((a < b) & (a < c)); //true & true = true
  System.out.println("---------------");
  
  //|逻辑或
  System.out.println((a > b) | (a > c)); //false | false = false
  System.out.println((a > b) | (a < c)); //false | true = true
  System.out.println((a < b) | (a > c)); //true | false = true
  System.out.println((a < b) | (a < c)); //true | true = true
  System.out.println("---------------");
  
  //^逻辑异或
  System.out.println((a > b) ^ (a > c)); //false ^ false = false
  System.out.println((a > b) ^ (a < c)); //false ^ true = true
  System.out.println((a < b) ^ (a > c)); //true ^ false = true
  System.out.println((a < b) ^ (a < c)); //true ^ true = false
  System.out.println("---------------");
  
  //!逻辑非
  System.out.println(!(a > b)); //!false = true
  System.out.println(!(a < b)); //!true = false
  System.out.println(!!(a > b)); //!!false = false
  System.out.println(!!!(a > b)); //!!false = true
 }
}


/*
 &&和&的区别? 同理||和|的区别?
  A:最终结果一样。
  B:&&具有短路效果。左边是false,右边不执行。
  
 开发中常用的逻辑运算符:
  &&,||,!
*/
class OperatorDemo2 {
 public static void main(String[] args) {
  int a = 3;
  int b = 4;
  int c = 5;
  
  //&&双与
  System.out.println((a > b) && (a > c)); //false && false = false
  System.out.println((a > b) && (a < c)); //false && true = false
  System.out.println((a < b) && (a > c)); //true && false = false
  System.out.println((a < b) && (a < c)); //true && true = true
  System.out.println("----------------");
  
  int x = 3;
  int y = 4;
  
  //boolean b1 = ((x++ == 3) & (y++ == 4));
  //boolean b1 = ((x++ == 3) && (y++ == 4));
  //boolean b1 = ((++x == 3) & (y++ == 4));
  boolean b1 = ((++x == 3) && (y++ == 4));
  System.out.println("x:"+x);
  System.out.println("y:"+y);
  System.out.println(b1);
 }
}

 

 

/*
 ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
*/
class OperatorDemo2 {
 public static void main(String[] args) {
  int a = 10;
  int b = 20;
  
  System.out.println(a ^ b ^ b); //10
  System.out.println(a ^ b ^ a); //20
 }
}

 

 

/*
 面试题:
  short s=1;s = s+1;
  
  short s=1;s+=1;
  上面两个代码有没有问题,如果有,那里有问题。
  
  为什么第二个木有问题呢?
   扩展的赋值运算符其实隐含了一个强制类型转换。
   
   s += 1;
   不是等价于 s = s + 1;
   而是等价于 s = (s的数据类型)(s + 1);
*/
class OperatorTest {
 public static void main(String[] args) {
  //short s = 1;
  //s = s + 1;
  //System.out.println(s);
  
  short s = 1;
  s += 1; //好像是 s = s + 1;
  System.out.println(s);
 }
}

 

 

 

/*
 位运算符:
  &,|,^,~
  <<,>>,>>>
  
 注意:
  要做位运算,首先要把数据转换为二进制。
*/
class OperatorDemo {
 public static void main(String[] args) {
  //&,|,^,~
  
  int a = 3;
  int b = 4;
  
  System.out.println(3 & 4);
  System.out.println(3 | 4);
  System.out.println(3 ^ 4);
  System.out.println(~3);
 }
}
/*
 分析:因为是位运算,所以我们必须先把数据换算成二进制。
 
 3的二进制:11
  00000000 00000000 00000000 00000011
 4的二进制:100
  00000000 00000000 00000000 00000100
 
 &位与运算:有0则0。
  00000000 00000000 00000000 00000011
    &00000000 00000000 00000000 00000100
  -----------------------------------
  00000000 00000000 00000000 00000000
  结果是:0
  
 |位或运算:有1则1。
  00000000 00000000 00000000 00000011
    |00000000 00000000 00000000 00000100
  -----------------------------------
  00000000 00000000 00000000 00000111
  结果是:7
  
 ^位异或运算:相同则0,不同则1。
  00000000 00000000 00000000 00000011
    &00000000 00000000 00000000 00000100
  -----------------------------------
  00000000 00000000 00000000 00000111
  结果是:7
  
 ~按位取反运算符:0变1,1变0
  00000000 00000000 00000000 00000011
    ~11111111 11111111 11111111 11111100 (补码)
   
    补码:11111111 11111111 11111111 11111100
    反码:11111111 11111111 11111111 11111011
    原码:10000000 00000000 00000000 00000100
  结果是:-4
*/

 


/*
 单目运算符:~3
 双目运算符:3 + 4

 三目运算符:
  格式:比较表达式?表达式1:表达式2;
  
  比较表达式:结果是一个boolean类型。
  
  执行流程:
   根据比较表达式的计算返回一个true或者false。
   如果是true,就把表达式1作为结果。
   如果是false,就把表达式2作为结果。
*/
class OperatorDemo {
 public static void main(String[] args) {
  int x = 100;
  int y = 200;
  
  int z = ((x > y)? x: y);
  
  //int z = ((x < y)? x: y);
  
  //int z = ((x == y)? x: y);
  
  //报错
  //int z = ((x = y)? x : y);
  
  System.out.println("z:"+z);
 }
}

 

 

/*
 面试题:
  请自己实现两个整数变量的交换
  注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
*/
class OperatorTest {
 public static void main(String[] args) {
  int a = 10;
  int b = 20;
  
  System.out.println("a:"+a+",b:"+b);
  
  //方式1:使用第三方变量(开发中用的)
  /*
  int c = a;
  a = b;
  b = c;
  System.out.println("a:"+a+",b:"+b);
  System.out.println("------------");
  */
  
  //方式2:用位异或实现(面试用)
  //左边:a,b,a
  //右边:a ^ b
  /*
  a = a ^ b;
  b = a ^ b; //a ^ b ^ b = a
  a = a ^ b; //a ^ b ^ a = b
  System.out.println("a:"+a+",b:"+b);
  */
  
  //方式3:用变量相加的做法
  /*
  a = a + b; //a=30
  b = a - b; //b=10
  a = a - b; //a=20
  System.out.println("a:"+a+",b:"+b);
  */
  
  //方式4:一句话搞定
  b = (a+b) - (a=b); //b=30-20=10,a=20
  System.out.println("a:"+a+",b:"+b);
 }
}

/*
 +的用法:
  A:加法
  B:正号
  C:字符串连接符
*/
class OperatorDemo3 {
 public static void main(String[] args) {
  //加法
  System.out.println(3+4);
  
  //正号
  System.out.println(+4);
  
  System.out.println('a');
  System.out.println('a'+1); //这里是加法
  
  //字符串连接符
  System.out.println("hello"+'a'+1);
  System.out.println('a'+1+"hello");
 }
}

/*
 <<:左移 左边最高位丢弃,右边补齐0
 >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
 >>>:无符号右移 无论最高位是0还是1,左边补齐0
 
 面试题:
  请用最有效率的方式写出计算2乘以8的结果?
   2 * 8
   
   2 << 3

*/
class OperatorDemo3 {
 public static void main(String[] args) {
  //<< 把<<左边的数据乘以2的移动次幂
  System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
 
  //>> 把>>左边的数据除以2的移动次幂
  System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
  System.out.println(24 >>> 2);
  
  System.out.println(-24 >> 2);
  System.out.println(-24 >>> 2);
 }
}
/*
 计算出3的二进制:11
  00000000 00000000 00000000 00000011
 (00)000000 00000000 00000000 0000001100
  
 >>的移动: 
 计算出24的二进制:11000
  原码:10000000 00000000 00000000 00011000
  反码:11111111 11111111 11111111 11100111
  补码:11111111 11111111 11111111 11101000
  
  11111111 11111111 11111111 11101000
  1111111111 11111111 11111111 111010(00) 补码
  
  补码:1111111111 11111111 11111111 111010
  反码:1111111111 11111111 11111111 111001
  原码:1000000000 00000000 00000000 000110
  
  结果:-6
  
 >>>的移动:
  计算出24的二进制:11000
  原码:10000000 00000000 00000000 00011000
  反码:11111111 11111111 11111111 11100111
  补码:11111111 11111111 11111111 11101000
  
  11111111 11111111 11111111 11101000
  0011111111 11111111 11111111 111010(00)
  
  结果:
*/

 

 

/*
 练习:
  获取两个整数中的最大值
  获取三个整数中的最大值
  比较两个整数是否相同
*/
class OperatorTest {
 public static void main(String[] args) {
  //获取两个整数中的最大值
  int x = 100;
  int y = 200;
  
  int max = (x > y? x: y);
  System.out.println("max:"+max);
  System.out.println("--------");
  
  //获取三个整数中的最大值
  int a = 10;
  int b = 30;
  int c = 20;
  
  //分两步:
  //A:先比较a,b的最大值
  //B:拿a,b的最大值在和c进行比较
  int temp = ((a > b)? a: b);
  //System.out.println(temp);
  int max1 = (temp > c? temp: c);
  System.out.println("max1:"+max1);
  
  //一步搞定
  //int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
  //这种做法不推荐。
  //int max2 = a > b?a > c? a: c:b > c? b: c;
  //System.out.println("max2:"+max2);
  System.out.println("--------");
  
  //比较两个整数是否相同
  int m = 100;
  int n = 200;
  
  //boolean flag = (m == n)? true: false;
  boolean flag = (m == n);
  System.out.println(flag);
 }
}

/*
 为了让程序的数据更符合开发的数据,我们就加入了键盘录入。
 让程序更灵活一下。
 
 那么,我们如何实现键盘数据的录入呢?
  A:导包
   格式:
    import java.util.Scanner;
   位置:
    在class上面。
  B:创建键盘录入对象
   格式:
    Scanner sc = new Scanner(System.in);
  C:通过对象获取数据 
   格式:
    int x = sc.nextInt();
*/
import java.util.Scanner;

class ScannerDemo {
 public static void main(String[] args) {
  //创建键盘录入数据对象
  Scanner sc = new Scanner(System.in);
  
  System.out.println("请你输入一个数据:");
  int x = sc.nextInt();
  
  System.out.println("你输入的数据是:"+x);
 }
}


/*
 键盘录入练习:
  键盘录入两个数据,并对这两个数据求和,输出其结果
*/
import java.util.Scanner;

class ScannerTest {
 public static void main(String[] args) {
  //键盘录入两个数据,并对这两个数据求和,输出其结果
  //创建键盘录入对象
  Scanner sc = new Scanner(System.in);
  
  System.out.println("请输入第一个数据:");
  int x = sc.nextInt();
  
  System.out.println("请输入第二个数据:");
  int y = sc.nextInt();
  
  //把键盘录入的数据进行相加即可
  int sum = (x + y);
  System.out.println("sum:"+sum);
 }
}

/*
 练习:
  键盘录入三个数据,获取这三个数据中的最大值
  键盘录入两个数据,比较这两个数据是否相等
*/
import java.util.Scanner;

class ScannerTest3 {
 public static void main(String[] args) {
  //键盘录入三个数据,获取这三个数据中的最大值
 
  //创建键盘录入对象
  Scanner sc = new Scanner(System.in);
  
  System.out.println("请输入第一个数据:");
  int a = sc.nextInt();
  
  System.out.println("请输入第二个数据:");
  int b = sc.nextInt();
  
  System.out.println("请输入第三个数据:");
  int c = sc.nextInt();
  
  //获取这三个数据中的最大值
  int temp = ((a > b)? a: b);
  int max = (temp > c? temp : c);
  System.out.println("max:"+max);
  System.out.println("------------------");
  
  //键盘录入两个数据
  System.out.println("请输入第一个数据:");
  int x = sc.nextInt();
  
  System.out.println("请输入第二个数据:");
  int y = sc.nextInt();
  
  //比较这两个数据是否相等
  boolean flag = (x == y);
  System.out.println("flag:"+flag);
 }
}/*
 流程控制语句:可以控制程序的执行流程。
 
 分类:
  顺序结构
  选择结构
  循环结构
  
 顺序结构:
  从上往下,依次执行。
*/
class ShunXuJieGouDemo {
 public static void main(String[] args) {
  System.out.println("程序开始了");
  
  System.out.println("我爱Java");
  
  System.out.println("程序结束了");
 }
}

/*
 键盘录入练习:键盘录入两个数据,获取这两个数据中的最大值
*/

import java.util.Scanner;

class ScannerTest2 {
 public static void main(String[] args) {
  //创建键盘录入对象
  Scanner sc = new Scanner(System.in);
  
  System.out.println("请输入第一个数据:");
  int a = sc.nextInt();
  
  System.out.println("请输入第二个数据:");
  int b = sc.nextInt();
  
  //获取这两个数据中的最大值
  int max = (a > b? a: b);
  System.out.println("max:"+max);
 }
}


/*
 选择结构:
  if语句
  switch语句
  
 if语句:
  格式1
  格式2
  格式3
  
 if语句的格式:
  if(比较表达式) {
   语句体;
  }
  
  执行流程:
   先计算比较表达式的值,看其返回值是true还是false。
   如果是true,就执行语句体;
   如果是false,就不执行语句体;
*/
class IfDemo {
 public static void main(String[] args) {
  int x = 10;
  
  if(x == 10) {
   System.out.println("x等于10");
  }
  
  if(x == 20) {
   System.out.println("x等于20");
  }
  
  System.out.println("over");
 }
}

/*
 if语句格式2:
  if(比较表达式) {
   语句体1;
  }else {
   语句体2;
  }
 执行流程:
  首先计算比较表达式的值,看其返回值是true还是false。
  如果是true,就执行语句体1;
  如果是false,就执行语句体2;
  
 注意:else后面是没有比较表达式的,只有if后面有。
*/
class IfDemo3 {
 public static void main(String[] args) {
  //判断两个数据是否相等
  
  int a = 10;
  int b = 20;
  
  if(a == b) {
   System.out.println("a等于b");
  }else {
   System.out.println("a不等于b");
  }
 }
}


/*
 if语句的注意事项:
  A:比较表达式无论简单还是复杂,结果必须是boolean类型
  B:if语句控制的语句体如果是一条语句,大括号可以省略;
    如果是多条语句,就不能省略。建议永远不要省略。
  C:一般来说:有左大括号就没有分号,有分号就没有左大括号
*/
class IfDemo2 {
 public static void main(String[] args) {
  int x = 10;
  
  if(x == 10) {
   System.out.println("x等于10");
  }
  
  if((x > 5) || (x == 10)) {
   System.out.println("x大于或者等于10");
  }
  System.out.println("-------------------");
  
  int a = 100;
  
  /*
  if(a == 100) {
   System.out.println("a的值是100");
  }
  */
  
  if(a != 100) {
   System.out.println("a的值是100");
   System.out.println("over");
  }
  System.out.println("-------------------");
  
  int b = 100;
  if(b != 100);  //这里其实是有语句体的,只不过是空语句体。
  
  //代码块
  {
   System.out.println("b的值是100");
   System.out.println("over");
  }
 }
}


/*
 由于if语句的第二种格式刚才也完成了三元运算符可以完成的效果。
 所以,我们就认为他们可以完成一样的操作。
 但是,他们就一点区别没有吗?肯定不是。
 
 区别:
  三元运算符实现的,都可以采用if语句实现。反之不成立。
  
  什么时候if语句实现不能用三元改进呢?
   当if语句控制的操作是一个输出语句的时候就不能。
   为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
*/
class IfDemo4 {
 public static void main(String[] args) {
  //获取两个数据的最大值
  int a = 10;
  int b = 20;
  
  //用if语句实现
  int max1;
  if(a > b) {
   max1 = a;
  }else {
   max1 = b;
  }
  System.out.println("max1:"+max1);
  
  //用三元改进
  int max2 = (a > b)? a: b;
  System.out.println("max2:"+max2);
  System.out.println("----------");
  
  //判断一个数据是奇数还是偶数,并输出是奇数还是偶数
  int x = 100;
  
  if(x%2 == 0) {
   System.out.println("100是一个偶数");
  }else {
   System.out.println("100是一个奇数");
  }
  
  //用三元改进
  //这种改进是错误的。
  //String s = (x%2 == 0)?System.out.println("100是一个偶数");:System.out.println("100是一个奇数");;
 }
}


/*
 if语句的格式3:
  if(比较表达式1) {
   语句体1;
  }else if(比较表达式2) {
   语句体2;
  }else if(比较表达式3) {
   语句体3;
  }
  ...
  else {
   语句体n+1;
  }
  
 执行流程:
  首先计算比较表达式1看其返回值是true还是false,
  如果是true,就执行语句体1,if语句结束。
  如果是false,接着计算比较表达式2看其返回值是true还是false,
  
  如果是true,就执行语句体2,if语句结束。
  如果是false,接着计算比较表达式3看其返回值是true还是false,
  ...
  
  如果都是false,就执行语句体n+1。
*/
import java.util.Scanner;

class IfDemo5 {
 public static void main(String[] args) {
  //需求:键盘录入一个成绩,判断并输出成绩的等级。
  /*
   90-100 优秀
   80-90  好
   70-80  良
   60-70  及格
   0-60   不及格
  */
  
  //创建键盘录入对象
  Scanner sc = new Scanner(System.in);
  
  //录入数据
  System.out.println("请输入你的考试成绩:");
  int score = sc.nextInt();
  
  /*
  if(score>=90 && score<=100) {
   System.out.println("优秀");
  }else if(score>=80 && score<90) {
   System.out.println("好");
  }else if(score>=70 && score<80) {
   System.out.println("良");
  }else if(score>=60 && score<70) {
   System.out.println("及格");
  }else {
   System.out.println("不及格");
  }
  */
  //这样写已经满足我的基本要求,但是可能别人在使用的时候,不会按照你要求的数据给出了。
  //在做一个程序的基本测试的时候,一定要考虑这样的几个问题:
  //正确数据,错误数据,边界数据。
  //而我们刚才写的程序并没有处理错误数据,所以这个程序不是很好,要改进
  /*
  if(score>=90 && score<=100) {
   System.out.println("优秀");
  }else if(score>=80 && score<90) {
   System.out.println("好");
  }else if(score>=70 && score<80) {
   System.out.println("良");
  }else if(score>=60 && score<70) {
   System.out.println("及格");
  }else if(score>=0 && score<60){
   System.out.println("不及格");
  }else {
   System.out.println("你输入的成绩有误");
  }
  */
  
  //另一种判断改进
  if(score<0 || score>100) {
   System.out.println("你输入的成绩有误");
  }else if(score>=90 && score<=100) {
   System.out.println("优秀");
  }else if(score>=80 && score<90) {
   System.out.println("好");
  }else if(score>=70 && score<80) {
   System.out.println("良");
  }else if(score>=60 && score<70) {
   System.out.println("及格");
  }else {
   System.out.println("不及格");
  }
 }
}

/*
 if语句格式2的练习:
  A:获取两个数据中较大的值
  B:判断一个数据是奇数还是偶数,并输出是奇数还是偶数
*/
import java.util.Scanner;

class IfTest {
 public static void main(String[] args) {
  //创建键盘录入对象
  Scanner sc = new Scanner(System.in);
  
  //获取两个数据中较大的值
  System.out.println("请输入第一个数据:");
  int a = sc.nextInt();
  
  System.out.println("请输入第二个数据:");
  int b = sc.nextInt();
  
  //定义一个变量接收最大值
  int max;
  
  if(a > b) {
   max = a;
  }else {
   max = b;
  }
  
  System.out.println("max:"+max);
  System.out.println("----------------");
  
  //判断一个数据是奇数还是偶数
  System.out.println("请输入你要判断的数据:");
  int x = sc.nextInt();
  
  if(x%2 == 0) {
   System.out.println(x+"这个数据是偶数");
  }else {
   System.out.println(x+"这个数据是奇数");
  }
 }
}


/*
 获取三个数据中的最大值
 
 由此案例主要是为了讲解if语句是可以嵌套使用的。而且是可以任意的嵌套。
*/
class IfTest4 {
 public static void main(String[] args) {
  int a = 10;
  int b = 30;
  int c = 20;
  
  //三元实现
  //int temp = (a>b)? a: b;
  //int max = (temp>c)? temp: c;
  //System.out.println("max:"+max);
  //System.out.println("--------");
  
  //用if语句实现
  int max;
  if(a > b) {
   if(a > c) {
    max = a;
   }else {
    max = c;
   }
  }else {
   if(b > c) {
    max = b;
   }else {
    max = c;
   }
  }
  System.out.println("max:"+max);
 }
}


/*
 三种if语句分别适合做什么事情呢?
  格式1:适合做单个判断
  格式2:适合做两个判断
  格式3:适合做多个判断
  
 需求:
  键盘录入x的值,计算出y的并输出。
  
  x>=3 y = 2x + 1;
  -1<=x<3 y = 2x;
  x<=-1 y = 2x – 1;
  
 分析:
  A:由于数据要键盘录入,所以必须使用Scanner。
  B:由于是三种判断,所以我们选择if语句格式3。
*/
import java.util.Scanner;

class IfTest2 {
 public static void main(String[] args) {
  //创建键盘录入对象
  Scanner sc = new Scanner(System.in);
  
  System.out.println("请输入x的值:");
  int x = sc.nextInt();
  
  //定义一个y
  int y;
  
  //用if语句格式3进行判断
  if(x >= 3) {
   y = 2*x + 1;
  }else if(x>=-1 && x<3) {
   y = 2*x;
  }else {
   y = 2*x - 1;
  }
  
  System.out.println("y:"+y);
 }
}

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2019-5-29,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
第4天代码_code
« 上一篇
第2天代码——code
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。
Array

日历

热门文章