第一题:不借助第三方变量,交换两个变量的值
通常我们交换两个变量的值,都是先定义一个中间变量temp,实现变量值交换。以下采用另外两种方法,不借助第三方变量,从而实现两个变量值的交换。
- 方法一:用加减运算实现
public class HomeWork1 {
public static void main(String[] args) {
int a = 4;
int b = 5;
//方法一:用加减运算实现
a=a+b;//将a重新赋值
b=a-b;//具体计算是(a+b)-b得到a赋值给b
a=a-b;//具体计算是(a+b)-b也就是减去新的b(新的b=a)
System.out.println("交换后 a的值为"+a+",b的值为"+b);
}
}
- 方法二:用异或运算实现(不推荐使用,可读性较差)
知识点补充:异或运算符为“^”,两个操作数进行异或运算时,会转换成二进制数进行运算,其运算规则为同位比较,相同为0,不同为1。
①任一变量A与其自身进行异或,结果为0,即 A^A=0
②任一变量A与0进行异或,结果不变,即 A^0=A
③异或运算具有可结合性,即 a^b^c = (a^b)^c = a^(b^c)
④异或运算具有可交换性,即 a^b = b^a
int a = 4; //4的二进制表示为100
int b = 5; //5的二进制表示为101
a=a^b; // 转为二进制运算就是 001=100^101 ,001是结果赋值给a
b=a^b; // 100=001^101,100是结果赋值给b
a=a^b; // 101=001^100,101是结果赋值给b
分析过程:
① a = a ^ b ,a的值为 a ^ b;
② b = a ^ b 等号右侧即 (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a,然后 b 的值为 a;
③ a = a ^ b 等号右侧的a仍然是一开始 a ^ b 的值,b的值为最初的 a,即 a ^ b = (a ^ b) ^ a = a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b, 将此结果赋值给a,即 a = b;
运行结果:
第二题:键盘输入四位数字的会员卡号,使用“/”和“%”运算符分解获得会员卡各个位上的数字,并将各个位上的数字进行求和
import java.util.Scanner;
public class HomeWork2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入4位会员卡号:");
int cardId =input.nextInt();
//如果卡号是4位数
if(cardId>=1000&&cardId<10000){
System.out.println("会员卡号是:"+cardId);//输出卡号
//声明千位、百位、十位、个位变量,并赋值
int qianWei = cardId/1000;
int baiWei = cardId/100%10;
int shiWei = cardId/10%10;
int geWei =cardId%10;
int sum =qianWei+baiWei+shiWei+geWei;//声明sum变量,赋值各位之和
System.out.println("千位数:"+qianWei+"\t百位数:"+baiWei+"\t十位数:"+shiWei+"\t个位数:"+geWei);
System.out.println("会员卡号"+cardId+"各位之和:"+sum);
}else{
System.out.println("此数非4位的卡号");
}
}
}
运行结果:
第三题:System.out.println()和System.out.print()什么区别呢?
- System.out.println(); 输出信息后换行,下一条输出语句在新的一行输出
System.out.println("这里是System.out.println输出结果:");
System.out.println("Hello");
System.out.println("World");
运行结果:
- System.out.print(); 输出信息后不换行,下一条输出语句在同一行输出
System.out.println("这里是print输出结果:");
System.out.print("Hello");
System.out.print("World");
运行结果:
- System.out.print("\n") 相当于 System.out.println();
System.out.println("加转义符输出结果:");
System.out.print("Hello"+"\n");
System.out.print("World");
运行结果:
第四题:输出如下心形图
public class HomeWork4 {
public static void main(String[] args) {
System.out.println(" * *");
System.out.println("* * I love Java * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" *");
}
}
运行结果:
第五题:为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?
import java.util.Scanner;
public class HomeWork5 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入作战时长:");
int hour1 = input.nextInt();
int day = hour1/24;
int hour2 = hour1%24;
System.out.println("战士连续作战"+hour1+"小时,共"+day+"天零"+hour2+"小时");
}
}
运行结果:
第六题:今天是周二,100天以后是周几?(%)
public class HomeWork6 {
public static void main(String[] args) {
int day1 =2;
int day2 = (100+day1)%7;
System.out.println("今天是周"+day1+",100天以后是周"+day2);
}
}
运行结果: