1.根据运算符的功能,我们把运算符分成哪几类?
- 算数运算符(+加、-减、*乘、/除、%取余)
- 赋值运算符(=赋值、+=加后赋值、-=减后赋值、*=乘后赋值、/除后赋值、%取余后赋值)
- 自增自减运算符(++、--)
- 关系运算符(==、!=、>、>=、<、<=)
- 逻辑运算符(&逻辑与、|逻辑或、!逻辑非、^逻辑异或、&&短路与、||短路或)
- 三元运算符(格式:关系表达式? 表达式1∶表达式2; 范例: a > b ?a : b;)
2.“&”和“&&”的异同
-
- 相同点:左右两端条件均为true时,结果为true
- 逻辑与&,无论左边真假,右边都要执行。
- 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
3.程序输出
class OperatorTest { public static void main(String[] args) { boolean x = true; boolean y = false; short z = 40; if ((z++ == 40) && (y = true)) { z++; } if ((x = false) || (++z == 43)) { z++; } System.out.println("z = " + z); } } |
结果为:
4.自己定义一个int型三位数的变量并赋值(例如:int a = 123),先将这个变量拆分出个,十,百位,再使用三元运算符将这三个数中的较大数实现。
/*多行注释
Java程序中最基本的组成单位是类
类的定义格式:
public class 类名{}
定义一个类:OperatorTest02*/
public class OperatorTest02{
public static void main(String[] args){
//定义一个int型三位数变量并赋值
int heightA=156;
// 我的身高
//在计算之前获取三位数中每个数位上的值
int geA=heightA%10;
int shiA = heightA/10%10;
int baiA = heightA/100%100;
/*用三元运算符比较大小:拆分出数位以后,
先两两比较百位,百位大的输出;
若百位相同,则比较十位,十位大的输出;
若十位相同,则比较个位,个位大的输出。*/
int teamHeight= ((baiA>shiA)?baiA:shiA);
System.out.println((teamHeight>geA)?teamHeight:geA);
}
}
解题思路:拆分出数位以后,先两两比较百位,百位大的输出;若百位相同,则比较十位,十位大的输出;若十位相同,则比较个位,个位大的输出。
5.
写出输出结果:
class Demo{
public static void main(String[] args){
int a=3,b=8;
int c=(a>b)?a++:b++;
System.out.println("a="+a+"\tb="+b+"\tc="+c); //
int d=(a>b)?++a:++b;
System.out.println("a="+a+"\tb="+b+"\td="+d); //
int e=(a<b)?a++:b++;
System.out.println("a="+a+"\tb="+b+"\te="+e); //
int f=(a<b)?++a:++b;
System.out.println("a="+a+"\tb="+b+"\tf="+f); //
}}
if语句
-
岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断
/*小明的考试成绩未知,可以使用键盘录入的方式获取值 使用键盘录入功能需要导包,创建对象,接收数据*/ import java.util.Scanner; public class KaoShiJiangLi { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个分数:"); int score = sc.nextInt(); /*由于奖励种类较多,属于多种判断,采用if...else...if格式实现*/ if (score>100||score<0){ //数据测试:正确数据,边界数据,错误数据 System.out.println("您输入的分数有误"); }else if(score==100){ System.out.println("奖励一辆BMW"); } else if(score>80 && score<=99){ System.out.println("奖励一台iphone xs max"); }else if(score>=60 && score<=80){ System.out.println("奖励一个 iPad"); }else { System.out.println("什么奖励也没有"); } } }
-
编写程序,声明2个int型变量并赋值。判断两数之和,如果大于等 于50,打印“hello world!” 其他情况打印 “hello China!”
public class IfDemo2 { public static void main(String[] args) { //先声明2个int型变量并赋值 int i=16; int j=12; //使用if函数判断两数之和是否大于50 if (i+j>50){ System.out.println("hello world!"); }else{ System.out.println("hello China!"); } } }
-
编写程序,声明2个double型变量并赋值。判断第一个数大于10.0, 且第2个数小于20.0,打印两数之和。否则,打印两数的乘积
public class IfDemo3 {
public static void main(String[] args) {
// 声明2个double型变量并赋值。
double a=9.6;
double b=20.3;
//判断第一个数大于10.0, 且第2个数小于20.0用到逻辑与“&”和if语句
if(a>10.0&b<20.0){
System.out.println(a+b);
}else {
System.out.println(a*b);
}
}
}
4.编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
import java.util.Scanner;
public class IfDemo4 {
public static void main(String[] args) {
// 2.创建对象
Scanner sc=new Scanner(System.in);
// 3.接收数据
System.out.println("请输入第一个整数num1:");
int num1=sc.nextInt();
System.out.println("请输入第一个整数num2:");
int num2=sc.nextInt();
System.out.println("请输入第一个整数num3:");
int num3=sc.nextInt();
//三个数两两比较,小的输出排列,一共6种情况:
// 123,132,213,231,312,321
if (num1<num2 & num1<num3){
System.out.println(num1);
if (num2<num3){
System.out.println(num2);
System.out.println(num3);
}else {
System.out.println(num3);
System.out.println(num2);
}
}
else if(num1>num2 & num3>num2){
System.out.println(num2);
if (num1<num3){
System.out.println(num1);
System.out.println(num3);
}else{
System.out.println(num3);
System.out.println(num1);
}
}
else if(num1>num3 & num2>num3){
System.out.println(num3);
if (num1<num2){
System.out.println(num1);
System.out.println(num2);
}else{
System.out.println(num2);
System.out.println(num1);
}
}
}
}
5.我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每 一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗 相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人 类的年龄。如果用户输入负数,请显示一个提示信息。
import java.util.Scanner;
public class IfDemo5 {
public static void main(String[] args) {
// 2.创建对象
Scanner sc = new Scanner(System.in);
// 3.接收数据
System.out.println("请输入狗狗的年龄:");
float age=sc.nextFloat();
// 使用if语句判断狗的年龄是前两年还是两年后
if(age<=2){
System.out.println("狗狗的年龄换算成人类是"+(age*10.5)+"岁");
}else{
System.out.println("狗狗的年龄换算成人类是"+(21+(age-2)*4)+"岁");
}
}
}
6.大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出 一定的条件:高:180cm以上;富:财富1千万以上;帅:是。(注意:不用管单位) 如果这三个条件同时满足,则:“我一定要嫁给他!!!” 如果三个条件有为真的情况,则:“嫁吧,将就过日子。” 如果三个条件都不满足,则:“不嫁!”
条件需要手动键盘输入,注意它们的数据类型!
import java.util.Scanner;
//导包
/*大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出
一定的条件:高:180cm以上;富:财富1千万以上;帅:是。(注意:不用管单位)
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,将就过日子。”
如果三个条件都不满足,则:“不嫁!”*/
public class IfDemo6 {
public static void main(String[] args) {
// 创建对象
Scanner sc=new Scanner(System.in);
// 输入数据
System.out.println("请输入身高(cm):");
int hight=sc.nextInt();
System.out.println("请输入财富(万元):");
int money=sc.nextInt();
System.out.println("请问是否很帅(true/false):");
boolean handsome=sc.nextBoolean();
// 用if语句进行比较
if (hight>180 && money>1000 && handsome==true){
System.out.println("我一定嫁给他!");
}else if(hight>180 | money>1000 | handsome==true){
System.out.println("嫁吧,将就过日子");
}else {
System.out.println("不嫁!");
}
}
}
switch判断语句
理论题1
-
switch后面使用的表达式可以是哪些数据类型的。
取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
-
使用switch语句改写下列if语句:
int a = 3; int x = 100; if(a==1) x+=5; else if(a==2) x+=10; else if(a==3) x+=16; else x+=34;
switch改写后:
public class SwitchDemo1 {
public static void main(String[] args) {
int a = 3;
int x = 100;
switch (a) {
case 1:
x += 5;
break;
case 2:
x += 10;
break;
case 3:
x += 16;
break;
default:
x += 34;
break;
}
System.out.println(x);
}
}
3.谈谈你对三元运算符、if-else和switch-case结构使用场景的理解
三元运算符适用于少量数字之间比较,例如二选一,需要穷举;
if-else结构适用于条件判断;
switch用于分支条件较多的情况。
**三元运算符:执行效率较高,可读性较差,一般使用于用在二选一,直接返回的场景。**
**if-else:执行效率一般,可读性较好,可运用于任何场景,建议不要嵌套3层以上。**
**switch-case:执行效率较高,可读性较好,一般运用于分类较为明确的场景。**
**三者关系:三元运算符和 switch-case 都可以转换为 if-else,反之不可以。**
-
如何从控制台获取String和int型的变量,并输出?使用代码实现!
import java.util.Scanner; // 1.导包 public class SwitchDemo2 { public static void main(String[] args) { // 2.创建对象 Scanner sc = new Scanner(System.in); // 3.数据输入 System.out.println("请输入int:"); int i = sc.nextInt(); System.out.println(i); System.out.println("请输入字符串:"); String s = sc.next(); System.out.println(s); } }
题目2(综合)
模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。
要求:
键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:
请输入第一个整数: 30
请输入第二个整数: 40
请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1
控制台输出:30+40=70
训练提示
-
用户录入了数据之后,用什么知识点去判断加减乘除四种不同的操作?
解题方案
-
使用switch判断语句完成。
操作步骤
-
使用键盘录入三个变量。
-
使用switch判断语句对第三个变量进行判断,匹配要执行的操作。
-
在每一个case中分别对第一个变量和第二个变量进行不同的操作。
参考答案
// 1.导包 import java.util.Scanner; public class Demo2 { public static void main(String[] args) { // 2.创建键盘录入对象 Scanner sc = new Scanner(System.in); // 3.提示需要输入的数据,并调用方法获取输入的数据 System.out.println("请输入第一个整数:"); int num1 = sc.nextInt(); System.out.println("请输入第二个整数:"); int num2 = sc.nextInt(); System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法)"); int type = sc.nextInt(); // 4.使用switch语句判断计算类型,并输出相应的结果 switch (type) { case 1: System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); break; case 2: System.out.println(num1 + " - " + num2 + " = " + (num1 - num2)); break; case 3: System.out.println(num1 + " * " + num2 + " = " + (num1 * num2)); break; case 4: System.out.println(num1 + " / " + num2 + " = " + (num1 * 1.0 / num2)); break; default: System.out.println("您输入的运算类别有误"); break; } } }
switch判断语句
理论题
-
编写程序:
从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。
import java.util.Scanner;
// 1.导包
/*编写程序:
从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。*/
public class SwitchDemo4 {
public static void main(String[] args) {
// 2.创建键盘录入对象
Scanner sc = new Scanner(System.in);
int year=2019;
// 3.提示需要输入的数据,并调用方法获取输入的数据
System.out.println("请输入2019年任意月份:");
int month = sc.nextInt();
System.out.println("请输入2019年任意日期:");
int day = sc.nextInt();
// 定义一个变量来保存天数
int sumday = 0;
// switch语句来求对应天数
switch (month){
case 12:
sumday += 30;
// 因为case穿透,它会按月份一直累加进行下去,只要加上11月的30天就好
case 11:
sumday += 31;
// 在输入月日之前用if语句先判断2019年是平年还是闰年
// 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
case 10:
sumday += 30;
case 9:
sumday += 31;
case 8:
sumday += 31;
case 7:
sumday += 30;
case 6:
sumday += 31;
case 5:
sumday += 30;
case 4:
sumday += 31;
// 在输入月日之前用if语句先判断2019年是平年还是闰年
// 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
case 3:
if(year%400==0 || (year%4==0 & year%100!=0)){
System.out.println("2019年是闰年");
sumday += 29;
}else {
System.out.println("2019年不是闰年");
sumday += 28;
}
case 2:
sumday += 31;
case 1:
sumday += day;
System.out.println(month+"月"+day+"日"+"是2019年的第"+sumday+"天");
break;
default:
System.out.println("您的输入有误!!");
}
}
}
-
对于题1的升级版: 从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准: 1)可以被4整除,但不可被100整除 或 2)可以被400整除
import java.util.Scanner;
// 1.导包
/*编写程序:
从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。*/
public class SwitchDemo5 {
public static void main(String[] args) {
// 2.创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入任意年份:");
int year = sc.nextInt();
// 3.提示需要输入的数据,并调用方法获取输入的数据
System.out.println("请输入任意月份:");
int month = sc.nextInt();
System.out.println("请输入任意日期:");
int day = sc.nextInt();
// 定义一个变量来保存天数
int sumday = 0;
// switch语句来求对应天数
switch (month){
case 12:
sumday += 30;
// 因为case穿透,它会按月份一直累加进行下去,只要加上11月的30天就好
case 11:
sumday += 31;
// 在输入月日之前用if语句先判断2019年是平年还是闰年
// 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
case 10:
sumday += 30;
case 9:
sumday += 31;
case 8:
sumday += 31;
case 7:
sumday += 30;
case 6:
sumday += 31;
case 5:
sumday += 30;
case 4:
sumday += 31;
// 在输入月日之前用if语句先判断2019年是平年还是闰年
// 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
case 3:
if(year%400==0 || (year%4==0 & year%100!=0)){
System.out.println(year+"年是闰年");
sumday += 29;
}else {
System.out.println(year+"年不是闰年");
sumday += 28;
}
case 2:
sumday += 31;
case 1:
sumday += day;
System.out.println(month+"月"+day+"日"+"是"+year+"年的第"+sumday+"天");
break;
default:
System.out.println("您的输入有误!!");
}
}
}
-
编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期, 每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。 提示:2019年:猪 2019 % 12 == 3
import java.util.Scanner;
// 1.导包
/*1. 编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,
每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。
提示:2019年:猪 2019 % 12 == 3*/
public class SwitchDemo6 {
public static void main(String[] args) {
// 2.创建键盘录入对象
Scanner sc = new Scanner(System.in);
//给定一个年份
System.out.println("请输入你要查询的年份:");
// 对年份除以12取余,获取对应生肖
int year = sc.nextInt();
int shengxiao = year % 12;
switch (shengxiao) {
case 0:
System.out.println(year + "年的生肖是monkey");
break;
case 1:
System.out.println(year + "年的生肖是rooster");
break;
case 2:
System.out.println(year + "年的生肖是dog");
break;
case 3:
System.out.println(year + "年的生肖是pig");
break;
case 4:
System.out.println(year + "年的生肖是rat");
break;
case 5:
System.out.println(year + "年的生肖是ox");
break;
case 6:
System.out.println(year + "年的生肖是tiger");
break;
case 7:
System.out.println(year + "年的生肖是rabbit");
break;
case 8:
System.out.println(year + "年的生肖是dragon");
break;
case 9:
System.out.println(year + "年的生肖是snake");
break;
case 10:
System.out.println(year + "年的生肖是horse");
break;
case 11:
System.out.println(year + "年的生肖是sheep");
break;
default:
System.out.println("您的输入有误!!");
}
}
}
for循环语句
理论操作题✌
-
What is the result when you compile and run the following code?
public class Test{
public void method(){
for(int i = 0; i < 3; i++) {
System.out.print(i);
}
System.out.print(i);
}
}
A. 0122
B. 0123
C. compile error
D. none of these
答案:?C 会报错
-
编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行 上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印 输出“baz” 。
public class ForDemo2 {
public static void main(String[] args) {
for (int i = 1; i <= 150; i++) {
System.out.println(i);
if (i % 3 == 0) {
System.out.println(i + "foo");
}
if (i % 5 == 0) {
System.out.println(i + "biz");
}
if (i % 7 == 0) {
System.out.println(i + "baz");
}
}
}
}
-
打印1~100之间所有奇数的和 。
public class ForDemo3 { public static void main(String[] args) { int sum = 0; for(int i = 1;i <= 100;i++){ if(i%2 != 0){ sum += i; } } System.out.println("1到100之间的奇数和为"+sum); } }
-
打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数 器的思想) 。
public class ForDemo4 {
public static void main(String[] args) {
// 先定义个数及和的类型
int amount =0;
int sum = 0;
// for循环打印
for(int i = 1;i <= 100;i++){
// if判断是否为7的倍数
if(i%7 == 0){
// 每出现一次,数量+1,加在和中
amount += 1;
sum += i;
}
}
// 输出语句一定在for循环里
System.out.println("1到100之间所有是7的倍数的整数的个数为"+amount);
System.out.println("1到100之间所有是7的倍数和为"+sum);
}
}
-
下面是一段程序,目的是输出10个=,但是不小心代码写错了,现在需要修改代码,使得程序完成功能,但是只能“增加”或“修改”其中“一个”字符,很明显,将i--改为i++,可以完成功能,但是需要修改“两个”字符,所以并不是一个正确的答案?
public static void main(String[] args) { int n=10; for (int i = 0; i < n; i--) { System.out.println("="); } }
将i<n改为-i<n,i前加一个“-”
//修改一个字符,输出10个= public class ForDemo5 { public static void main(String[] args) { int n=10; for (int i = 0; -i < n; i--) { System.out.println("="); } } }
-
3000米长的绳子,每天减一半。问多少天这个绳子会小于5米?不考虑小数。
出现的问题:在执行for循环判断体时出现了小偏差,误将判断条件“length >= 5”写成了“length< 5”,这时语句无法循环,输出如图一所示(错误显示):
public class ForDemo6 {
public static void main(String[] args) {
//统计天数
int day = 0;
// 先定义类型和长度
// for循环打印
for (int length = 3000; length >= 5; length /= 2) {
//出现的问题:在执行for循环判断体时出现了小偏差,
// 误将判断条件“length >= 5”写成了“length< 5”,这时语句无法循环
day++;
}
System.out.println(day+"天这个绳子会小于5米");
}
}
正确输出:
输出从1到100之间所有不能被3整除的数;并输出这些整数的和
public class ForDemo7 {
public static void main(String[] args) {
// 先定义个数及和的类型
int amount =0;
int sum = 0;
// int i = 1;
// for循环打印
for(int i = 1;i <= 100;i++){
// if判断是否为3的倍数
if(i%3 != 0){
// 每出现一次,数量+1,加在和中
amount += 1;
sum += i;
System.out.println("输出为:"+i);
}
}
// 输出语句一定在for循环里
System.out.println("1到100之间所有不是3的倍数的整数的个数为"+amount);
System.out.println("1到100之间所有不是3的倍数和为"+sum);
}
}