第四单元 语句与运算符
第一部分 运算符
一、动手任务
(一).如何使用算术运算符(opertor)?
-
1.加法(+):连接字符串,加法本意
- 示例如下:
//China34
System.out.println("China" + 3 + 4 + " ");
//7China
System.out.println(3 + 4 + "China");
-
2.减法(-):
- 示例如下:
//0.09999999999999998
System.out.println(1 - 0.9);
//0.10000000000000009
System.out.println(2.0 - 1.9);
注:由于浮点型在十进制转化成二进制的过程中产生了误差导致,所以只能接近于正确结果 。Java可以实现精确计算。
-
3.乘法(*):两个数相乘
-
4.除法(/):两个整数相除等于整数
- 示例如下:
//1
System.out.println(3 / 2);
//0
System.out.println(2 / 3);
//0.66666666666667
System.out.println(2.0 / 3);
//下边的那个输出语句错误
System.out.println(3 / 0);
//Infinity:无穷大
System.out.println(3.0 / 0);
-
5.取余(%):
- 示例如下:
//1
System.out.println(3 % 2);
//-1
System.out.println(-3 % 2);
//2
System.out.println(2 % 3);
//下边的那个输出语句错误
System.out.println(3 % 0);
//NAN(Not a Number)
System.out.println(3.0 %0);
-
6.自加(++)或自减(–):常量不能自加或自减,age++是先用age再+1;++age是先+1再用
-
7.编程实现两个整数的加减乘除求余运算,要求用户输入两个整数。
-
8.用户输入学生姓名、学号、年龄、成绩,要求一句话输出。
(二).使用赋值运算符?
-
1.赋值(=):注意两方面问题:
- (1)两侧类型问题
- (2)超范围问题
-
2.Java扩展赋值运算符(效率高)
-
常用扩展的赋值运算符:隐含强制类型转换
-
示例如下:
-
short num = 20;
num +=1;//可行,相当于在栈区内num这本单元里直接+1
num = num + 1;//错误!这意味着num+1,num+1再占用了一个栈的内存,为int型,再赋给short,需要进行强制转换
-
3.如何使用关系运算符?http://c.biancheng.net/view/778.html
-
常见的关系运算符:
-
示例如下:
-
//false
System.out.println(3 == 2);
//true
System.out.println(3 != 7);
//true
System.out.println(3 >= 0);
-
4.如何使用逻辑运算符?http://c.biancheng.net/view/777.html
-
(1)、& 一般的与: 所有的式子都要执行
-
(2)、&& 短路与:前面的式子能够确定最终结果,后面的就不执行了
-
(3)、| 一般的或:所有的式子都要执行
-
(4)、|| 短路或:前面的式子能够确定最终结果,后面的就不执行了
-
(5)、!:表示取反,整数不能取反,只能对boolean类型取反
-
常用的逻辑运算符:
-
示例如下:
-
public class LogicOperator {
/**
* 测试逻辑运算符
*/
public void calc() {
int a = 100;
int b = 200;
if(a < 38 && ++b > 10) {
System.out.println("&的使用");
}
System.out.println("b的值是:" + b);
if(a > 38 | ++b > 10) {
System.out.println("&的使用");
}
System.out.println("b的值是:" + b);
if(a > 38 || ++b > 10) {
System.out.println("&的使用");
}
System.out.println("b的值是:" + b);
if(!(a < 80)) {
System.out.println("hello");
}
}
public static void main(String[] args) {
LogicOperator logicOperator = new LogicOperator();
logicOperator.calc();
}
}
-
5.如何使用位运算符?(了解):对二进制操作
- (1)、与(&)
- (2)、或(|)
- (3)、异或(^):一样为0,不一样为1。
-
6.如何使用移位运算符?()
- (1)(>>右移):高位补符号位
- (2)(<<左移):低位补0
- (3)(>>>无符号右移):高位一律补0
二、准确口述
-
1.运算符优先级?
-
优先级最高的是括号,优先级可以通过括号提升
-
优先级图示如下:
-
-
2.&&和&;||和|的区别
- &:所有的式子都要执行
- &&(短路与):&&左边的一旦是false,直接短路,不执行右边。
- |:|的左右两边都要执行
- ||:||左边的一旦是true,直接短路,不执行右边。即||为短路或
-
3.能否以0为除数?
- 当被除数是小数时可以,当被除数是整数时不正确。示例如下:
//下边的那个输出语句错误
System.out.println(3 / 0);
//Infinity:无穷大
System.out.println(3.0 / 0);
-
4、3/2;2/3;2.0/3;3%2;2%3结果?
- 示例如下:
//1
System.out.println(3 / 2);
//0
System.out.println(2 / 3);
//0.66666666666667
System.out.println(2.0 / 3);
//下边的那个输出语句错误
System.out.println(3 / 0);
//Infinity:无穷大
System.out.println(3.0 / 0);
//1
System.out.println(3 % 2);
//-1
System.out.println(-3 % 2);
//2
System.out.println(2 % 3);
//下边的那个输出语句错误
System.out.println(3 % 0);
//NAN(Not a Number)
System.out.println(3.0 %0);
-
5.能否对常量做自加自减?
- 答:不能。
-
6.扩展的赋值运算符有啥优势和特点?
- 特点:赋值的同时,加入运算。
- 优势:效率高。
-
7、1-0.9的结果是什么?
- 示例:
//0.09999999999999998
System.out.println(1 - 0.9);
第二部分 语句
一、动手任务
(一).if语句
-
1.if语法规则:
- (1).if等这些句子后,如果是变量的定义语句,大括号是必须要加的
- (2).不能连着连个两个if语句,去返回 如 : if(){return true} if(){return true}
-
2.奇数判断:用户输入一个整数,输出其是否为奇数。
-
(1).在判断是否为奇数时,尽量写成是if(num % 2 != 0) ,而 if(num % 2 == 1) 此种方式也对,但存在bug不能判断负数的
-
(2).题目程序示例如下:
-
public class Odd1 {
/**
* 任意给定一个数,判断是否为奇数
*
* @param num 给定的整数
*/
public void isOdd(int num) {
int n = 2;
if (num % n != 0) {
System.out.println(num + "是奇数!");
} else {
System.out.println(num + "是偶数!");
}
}
public static void main(String[] args) {
System.out.println("奇偶的判断");
Odd1 o = new Odd1();
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个整数:");
int num1 = sc.nextInt();
o.isOdd(num1);
}
}
- 3.面试题:
- (1)示例一:
int first = 90;
int second = 98;
if(first > second)
int age = 21;
System.out.println(age++);
- 以上程序输出什么?答:上方程序是错误的,无法输出;因为if下有变量定义,无大括号;该规则对for、while都有效
- (2)示例二:
int age = 1;
int first = 90;
int second = 98;
if(first > second)
System.out.println("hello");
System.out.println(age++);
- 以上程序输出什么?答:输出1。
(二).if-else语句
- 1.注意代码规范,} else { else 左右都有空格
- 2.用户输入成绩,如果大于等于60输出及格,否则输出不及格。
public class Grade {
/**
* 任意给定成绩,判断是否及格
* @param score 给定的成绩
* @return 如果及格返回"您输入的成绩及格!",如果不及格返回"您输入的成绩不及格!".
*/
public String pass(int score) {
int s = 60;
if (score >= s) {
return "您输入的成绩及格!";
} else {
return "您输入的成绩不及格!";
}
}
public static void main(String[] args) {
Grade g = new Grade();
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
System.out.println(g.pass(score));
}
}
- 3.输入数学、英语和政治成绩,判断考研是否成功。
public class Yangrade {
/**
* 输入数学、英语和政治和专业课成绩,判断考研是否成功
* @param m 数学成绩
* @param e 英语成绩
* @param p 政治成绩
* @param i 专业课成绩
*/
public void pass(int m,int e,int p,int i) {
int sum=e+m+p+i;
int n = 280;
if (sum >= n) {
System.out.println("恭喜你考研成功!");
} else {
System.out.println("真的是太遗憾了,继续努力!");
}
System.out.println("您的总成绩为:"+sum);
}
public static void main(String[] args) {
System.out.println("判断考研是否成功");
Yangrade y = new Yangrade();
Scanner sc = new Scanner(System.in);
System.out.println("请您分别输入数学、英语、政治和专业课成绩:");
int m = sc.nextInt();
int e = sc.nextInt();
int p = sc.nextInt();
int i = sc.nextInt();
y.pass(m, e, p, i);
}
}
(三).switch语句
- 1.switch使用注意事项:注意变量定义要加大括号。
- (1).break可有可无
- (2).default可有可无
- (3).default位置不一定放在最后
- (4).switch的参数可以是哪些类型?byte、short、int、char、String。
- (5).switch 括号中可以放的是整数和字符串吗?
- 答:不正确,switch中绝不可以放long整型。
- 2.根据成绩等级输出分数段
public class Gradelevel {
public static void main(String[] args) {
System.out.println("请输入优秀、良好、中等、及格和不及格中的一个等级:");
Scanner sc = new Scanner(System.in);
String n = sc.next();
switch (n) {
case "优秀":
System.out.println("成绩分数段为:" + "90-100");
break;
case "良好":
System.out.println("成绩分数段为:" + "80-89");
break;
case "中等":
System.out.println("成绩分数段为:" + "70-79");
break;
case "及格":
System.out.println("成绩分数段为:" + "60-69");
break;
case "不及格":
System.out.println("成绩分数段为:" + "0-59");
break;
default:
System.out.println("您输入的都不匹配!!!");
break;
}
}
}
- 3.用户输入年份和月份,程序输出该月的天数。
public class Day {
public static void main(String[] args) {
System.out.println("请您分别输入年份和月份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
int month = sc.nextInt();
int a = 4,b = 100,c = 400;
boolean x = ((year % a ==0) && (year % b != 0));
if ( x || (year % c == 0)) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(year + "年的" + month + "月有" + "31天。");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(year + "年的" + month + "月有" + "30天。");
break;
case 2:
System.out.println(year + "的" + month + "月有" + "29天。");
break;
default:
System.out.println("您输入的数据不匹配。");
break;
}
} else {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(year + "年的" + month + "月有" + "31天。");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(year + "年的" + month + "月有" + "30天。");
break;
case 2:
System.out.println(year + "年的" + month + "月有" + "28天。");
break;
default:
System.out.println("您输入的数据不匹配。");
break;
}
}
}
}
(四).for语句
- 1.for使用注意事项:注意变量定义要加大括号。
- (1).for循环中第一式子只执行一次,第二个式子一定是布尔类型。
- (2).所有循环语句后不要加分号,加了就不往下执行语句中的内容了。
- 2.计算1+2+3+··········+500的和。
public class Add {
/**
* 计算1+2+3+··········+500
* @param sum 它们的和
* @return 返回和
*/
public int add(int sum) {
int s = 500;
for (int i = 1;i <= s;i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
Add add = new Add();
System.out.println(add.add(0));
}
}
- 以下示例都正确:
public class ForDemo {
public int getA() {
return 1;
}
public boolean getB() {
return true;
}
public void getC() {}
public void test() {
for(getA();getB();getC()) {
System.out.println("hello...");
}
}
public static void main(String[] args) {
//死循环
for(;;) {
System.out.println("success...");
}
http://www.qq.com
}
}
(五).break/continue语句
- 1.计算1-50以内的奇数相加的结果。
public class Addodd {
public void addOdd(int sum) {
int a = 50;
for (int i = 0;i <= a;i++) {
if (i % 2 == 1) {
sum += i;
}
}
System.out.println(sum);
}
public static void main(String[] args) {
Addodd ao = new Addodd();
ao.addOdd(0);
}
}
-
2.计算1-50以内的奇数相加,和大于90时终止计算。
-
break/continue:
public class Addoddend1 {
public static void main(String[] args) {
int a = 50;
int sum = 0;
for (int i = 1;i < a;i++) {
if (i % 2 == 0) {
continue;
} else {
sum += i;
if(sum > 90) {
break;
}
}
}
System.out.println(sum);
}
}
(六).while语句
- 1.语法规则:先看条件在执行,注意变量定义要加大括号。
- 示例如下:
int i = 100;
while (i < 10) {
System.out.println("China");
i++;
}
//死循环
while(true) {}
-
2.猜数字:要求猜一个介于1-10之间的数字,根据用户猜测的数与标准值进行对比,标准值设置为5,并给出提示,猜大了,猜小了,猜对了。
- 示例如下:
public class Guess {
public static void main(String[] args) {
System.out.println("下面游戏将开始");
System.out.println("请您输入1-10之间任何一个数字:");
Scanner sc = new Scanner(System.in);
while (true) {
int num = sc.nextInt();
if (num > 5) {
System.out.println("猜大了!" + "请您再次输入一个数:");
} else if (num < 5) {
System.out.println("猜小了!" + "请您再次输入一个数:");
} else {
System.out.println("恭喜您猜对了!游戏结束!");
break;
}
}
}
}
(七).do while语句
- 1.语法规则:先执行在看条件,注意变量定义要加大括号。
- 示例如下:
int i = 100;
do {
System.out.println("hello");
} while(i < 10);
-
2.猜数字:要求猜一个介于1-100之间的数字,标准值随机,并给出提示,猜大了,猜小了,猜对了。
- 示例如下:
public class Guess1 {
public static void main(String[] args) {
System.out.println("下面游戏即将开始");
System.out.println("请您输入1-100之间任何一个数字:");
//创建Random类变量,在1-100之间随机产生一个数
Random ran = new Random();
int rnum = ran.nextInt(100)+1;
//创建变量接收数据
Scanner sc = new Scanner(System.in);
while (true) {
int num = sc.nextInt();
if (num > rnum) {
System.out.println("猜大了!" + "请您再次输入一个数:");
} else if (num < rnum) {
System.out.println("猜小了!" + "请您再次输入一个数:");
} else {
System.out.println("bingou,恭喜您猜对了!");
break;
}
}
}
}
二、准确口述
- 1.结束循环的方式有哪些?
- 答:(1).break; (2).return; (3).System.exit(0):退出程序。
- 2.双重for循环嵌套,内层有break,跳出的是那个循环?
- 3.break和continue的区别?
- 答:break:结束整个循环;continue:跳过本次循环。
- 4.switch的参数可以是哪些类型?
- 答:switch的括号里可以是:byte、short、int、char、String。
- 5.switch 括号中可以放的是整数和字符串吗?
- 答:不正确,switch中绝不可以放long整型。
- 6.为什么在代码中可以写个http://www.qq.com,而不报错?
- 暂时不太懂(后续会继续补充)