JAVA实战训练营Day.3 ——“小试牛刀”
目录
前言
一、Day.3的目标
二、任务所涉及的知识点(参考资料)
1.Java中变量的声明与使用
2.Java中Scanner类的使用方法
3.Java格式化输出
4.Java DecimalFormat的主要功能及使用方法
三、开始实战
1.用户输入月薪,计算日薪(每月22个工作日)和年薪(一年13薪)
2.三种方法使用Java实现两数交换
a.使用第三个变量进行已有两个变量值的交换
b.通过数学方式(两数相加保存和值)解决问题
c.使用异或,通过两异或保存两数状态
3.解析四位正整数并求个位之和
四、总结
前言
![](https://img-blog.csdnimg.cn/870eee7dc43c403281f86135b4960eea.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
Java可以用来写高大上的服务器应用,但今天我们另辟蹊径,来写一些日常小工具,哈哈哈,没错,真就用牛刀杀鸡(今晚吃鸡,大吉大利OVO)。
一、Day.3的目标
Java实现薪资转化器,完成以下目标:
1.用户输入月薪,计算日薪(每月22个工作日)和年薪(一年13薪)
2.三种方法使用Java实现两数交换
a.使用第三个变量进行已有两个变量值的交换
b.通过数学方式(两数相加保存和值)解决问题
c.使用异或,通过两异或保存两数状态
3.解析四位正整数并求个位之和
二、任务所涉及的知识点(参考资料)
1.Java中变量的声明与使用
(同学可以先看一下这篇博客,强烈推荐)
https://blog.csdn.net/lxp18850413505/article/details/79482114?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540901816780262563533%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540901816780262563533&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-79482114.pc_search_all_es&utm_term=java%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187https://blog.csdn.net/lxp18850413505/article/details/79482114?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540901816780262563533%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540901816780262563533&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-79482114.pc_search_all_es&utm_term=java%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187
https://blog.csdn.net/lxp18850413505/article/details/79482114?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540901816780262563533%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540901816780262563533&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-79482114.pc_search_all_es&utm_term=java%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187
2.Java中Scanner类的使用方法
https://blog.csdn.net/qq_40164190/article/details/81917208?ops_request_misc=&request_id=&biz_id=102&utm_term=Java%E4%B8%ADScanner%E7%B1%BB%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-81917208.nonecase&spm=1018.2226.3001.4187https://blog.csdn.net/qq_40164190/article/details/81917208?ops_request_misc=&request_id=&biz_id=102&utm_term=Java%E4%B8%ADScanner%E7%B1%BB%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-81917208.nonecase&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_40164190/article/details/81917208?ops_request_misc=&request_id=&biz_id=102&utm_term=Java%E4%B8%ADScanner%E7%B1%BB%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-81917208.nonecase&spm=1018.2226.3001.4187
3.Java格式化输出
https://blog.csdn.net/qq_44111805/article/details/112850550?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540640616780357263712%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540640616780357263712&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-112850550.pc_search_all_es&utm_term=java%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA&spm=1018.2226.3001.4187https://blog.csdn.net/qq_44111805/article/details/112850550?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540640616780357263712%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540640616780357263712&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-112850550.pc_search_all_es&utm_term=java%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_44111805/article/details/112850550?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540640616780357263712%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540640616780357263712&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-112850550.pc_search_all_es&utm_term=java%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA&spm=1018.2226.3001.4187
https://blog.csdn.net/evangel_z/article/details/7624503?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540655116780269835548%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540655116780269835548&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-7624503.pc_search_all_es&utm_term=java+decimalformat%E7%B1%BB%E5%BC%95%E7%94%A8&spm=1018.2226.3001.4187https://blog.csdn.net/evangel_z/article/details/7624503?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540655116780269835548%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540655116780269835548&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-7624503.pc_search_all_es&utm_term=java+decimalformat%E7%B1%BB%E5%BC%95%E7%94%A8&spm=1018.2226.3001.4187
https://blog.csdn.net/evangel_z/article/details/7624503?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163540655116780269835548%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163540655116780269835548&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-7624503.pc_search_all_es&utm_term=java+decimalformat%E7%B1%BB%E5%BC%95%E7%94%A8&spm=1018.2226.3001.4187
三、开始实战
1.用户输入月薪,计算日薪(每月22个工作日)和年薪(一年13薪)
不多说,直接上代码:
import java.text.DecimalFormat;
import java.util.Scanner;//引入Scanner类
public class salay {
public static void main(String[] args){
System.out .println("***薪资转换工具v1.0***");
System.out .println("请输入月薪(人民币):");
Scanner sc=new Scanner(System.in);
double mouthSalary=sc.nextDouble();//将月薪定义为scan
System.out.format("您的日薪: ¥%,.2f",mouthSalary/22);//因为目标简单,所以直接使用数学方法完成
System.out.format("您的年薪: ¥%,.2f",mouthSalary*13);//注意任务要求保留后两位小数,且有千分符
}
private static int scan() {
Scanner scan=new Scanner(System .in);
return scan.nextInt();
}
}
运行演示:
![](https://img-blog.csdnimg.cn/56410a0b7ed14e9b93d890083b46e783.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
第一个任务很简单,直接用最简单的数学思路完成。
日薪=月薪/22
年薪=月薪*13
(注意保存小数点后两位)
至此任务1完成
2.三种方法使用Java实现两数交换
我们先来回答下面两个问题
1)变量使用前没有初始化可以吗?
2)如果有多个赋值运算时程序会怎么处理?
答:
1)不行,Java中每个变量必须先声明再使用。
详情大家可以参考下面这篇博文:
https://blog.csdn.net/weixin_41989775/article/details/103849945?utm_source=app&app_version=4.14.0&code=app_1562916241&uLinkId=usr1mkqgl919blenhttps://blog.csdn.net/weixin_41989775/article/details/103849945?utm_source=app&app_version=4.14.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
https://blog.csdn.net/weixin_41989775/article/details/103849945?utm_source=app&app_version=4.14.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
![](https://img-blog.csdnimg.cn/67cadcd0def44c14a05a3680ea754420.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
(图片来自上述博文)
这篇博文详细列举了这些变量,得出以下规则:
成员变量只声明未初始化在类初始化时会赋予默认值可以直接使用;
局部变量必须赋值才可以使用,如果局部变量未赋值,编译无法通过。
2)我们实践出真知
(实践是检验真理的唯一标准)
代码:
public class test
{
public static void main(String[] args){
int x,y,z;
x=y=z=8;
System.out.println(x+","+y+","+z);
}
}
运行:
![](https://img-blog.csdnimg.cn/8146aa16dfab40af802a021202795390.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
我们发现x,y,z的赋值都是8,它实质上进行了如下变化:
![](https://img-blog.csdnimg.cn/b6c4e0738b3a4d6b986b14fb55bce63b.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
OK,明白了这两个问题我们再继续。
a.使用第三个变量进行已有两个变量值的交换
代码:
class Scratch {
public static void main(String[] args) {
int x=3,y=9;
System.out.format("交换前: x:%d,y:%d%n",x,y);
int temp=x;
x=y;
y=temp;
System.out.format("交换后: x%d,y:%d%n",x,y);
}
}
运行:
![](https://img-blog.csdnimg.cn/07f296ed7bc4411ca388322467db16dc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
b.通过数学方式(两数相加保存和值)解决问题
代码:
class Scratch {
public static void main(String[] args) {
int x=3,y=9;
System.out.format("交换前: x:%d,y:%d%n",x,y);
x=x+y;
y=x-y;
x=x-y;
System.out.format("交换后: x:%d,y:%d%n",x,y);
}
}
运行:
![](https://img-blog.csdnimg.cn/3c2c19ceb64b47a8ab504c59a0ac9d8b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_18,color_FFFFFF,t_70,g_se,x_16)
c.使用异或,通过两异或保存两数状态
代码:
class Scratch {
public static void main(String[] args) {
int x=3,y=9;
System.out.format("交换前: x:%d,y:%d%n",x,y);
x=x^y;
y=x^y;
x=x^y;
System.out.format("交换后: x:%d,y:%d%n",x,y);
}
}
运行:
![](https://img-blog.csdnimg.cn/31f1070ff78749bba1df966930fd7c34.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
我们来看一下这个变化过程:
![](https://img-blog.csdnimg.cn/1dd5eaa9489546c08ac2b9bb5fb96b5f.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
至此任务2完成
3.解析四位正整数并求个位之和
代码:
import java.util.Scanner;//引入Scanner类
public class gwh {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个位整数:");
long n = input.nextLong();
long result = sumDigits(n);
System.out.println("n"+result);
}
public static long sumDigits(long n){
long result = 0;
for(; n >= 1 ; n /= 10){//使用”%“来提取数字,用“/”去掉提取出来的数字。循环提取,直到所有位数都提取完为止
result += n % 10;
}
return result;
}
}
运行:
![](https://img-blog.csdnimg.cn/d1cf36d1b60e4ad396cc93a1f2c4aec2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
核心思想:
使用”%“来提取数字,用“/”去掉提取出来的数字。循环提取,直到所有位数都提取完为止。
这样即使超过四位也可以完美运行。
示例:
![](https://img-blog.csdnimg.cn/2731b8fbb359496a8aab2f7760d22877.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qeD5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
至此任务3完成
四、总结
今天的任务主要是Java基础及运算,还是比较简单的,但如何巧妙的设计运算,用最少的代码来更好的实现目标是一个值得我们思考的问题。还有最重要一点是一定要多实践!熟能生巧!实践是检验真理的唯一标准!
(完结撒花)