前言❤️❤️
hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹
在这篇文章中,会遇到一些在C语言中从来没有见过的东西,例如Scanner类,包的导入,其实不需要完全理解,记住怎么写就行,后面慢慢会理解
这篇文章会用一些经典的代码题的Java写法,从C语言过渡的同时也穿插一些新的知识点,帮助大家快速入门Java💪
🎇个人主页:洋不写bug的博客
🎇所属专栏:Java学习之旅,从入门到进阶
🎇铁汁们对于Java的各种常用核心语法(不太常用的也有😆),都可以在上面的Java专栏学习,专栏正在持续更新中🐵🐵,有问题可以写在评论区或者私信我哦~
1,条件语句
if else,switch语句等,都是条件语句,下面这段代码就使用了条件语句
public class Test1 {
public static void main(String[] args) {
int a = 10;
if(a < 11){
System.out.println("进入条件");
}
}
}
2,Java软性语法规则(看着美观)
写一个if else的语句时,在C语言中是这样的
int main() {
int a = 10;
if (a > 11) {
printf("进入if");
}
else {
printf("进入else");
}
}
而在Java中是这样的:
public class Test1 {
public static void main(String[] args) {
int a = 10;
if(a < 11){
System.out.println("进入if");
}else{
System.out.println("进入else");
}
}
}
仔细看就会发现,Java中"{" 是不独占一行的,在整个编程圈子里,不独占一行的写法是很常见的(谷歌推行的一套C++编程规则中就推荐"{"不独占一行),后面写Java代码就用这种不独占一行的写法
同时在C语言的条件判断中,会出现这样一种写法,这是为了防止我们把"==“写成”=",这样写写错就很容易意识到:
int a = 10;
if(10 == a){
}
但在Java中完全不用这样写,因为IDEA可以推断出语法的错误这里少写一个=,就会直接报错
因为在C语言中,条件判断语句的括号内可以是int类型(bool类型是可以跟int类型相互转换的)
但在Java中里面必须是boolean类型(true或者false),因此这里就会报错,提示我们去修改。

3,经典题目
接下来会举出一些经典题目,会将知识点贯穿到题解中
1,判断输入整数的奇偶性
这里与C语言最不同的就是读取键盘输入数这一部分怎么来写,在C语言中我们使用scanf来读取输入的数字,在Java中则不同,需要使用Scanner来完成读取。
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if(num % 2 == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
}
import java.util.Scanner;
这个是Java中的一个包,在使用Scanner这个内置类时要导入这个包才能使用,一般在我们输入Scanner就会自动导入
如果没有导入的话,Scanner处就会爆红,把鼠标键,放在这里 ,按alt + enter键,会有许多选项,点击import class即可导入包

Scanner scanner = new Scanner(System.in);
Scanner是Java中的一个内置的类,而scanner就是对象(类 类型的一个变量)
这句话是创建一个Scanner对象(Java是面向对象的程序设计),这个对象的名称就是scanner(对象的名称叫什么都可以,这里用scanner为对象命名是为了在使用时能一下知道这个对象的作用)
而等号右边的部分是对这个对象scanner(变量)的初始化
int num = scanner.nextInt();
这里的 scanner.nextInt();指的是从控制台读取一个int类型的整数
注:这里的Scanner和System,包括new Scanner(),是不用自己全部敲完的,基本上只敲前两个字母,其他的就可以选择补全(按一下enter键)


总结:这段代码是入门必敲代码,大家一定要多练几次,掌握Java中从控制台读取数据的代码。
2,闰年的判断和闰年原理讲解
1,基础代码
这里也是用Scanner类的对象scanner来读取从控制台中输入的年份
然后先判断是不是整百年,如果是整百年的话,必须除以400能除尽才是闰年。
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.println("请输入一个年份:");
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
if(year % 100 == 0){
//是整百年
if(year % 400 == 0){
System.out.println(year + "是闰年");
}else{
System.out.println(year + "不是闰年");
}
}else{
if(year % 4 == 0){
System.out.println(year + "是闰年");
}else{
System.out.println(year + "不是闰年");
}
}
}
}
2,小科普,闰年的原理
可能有的铁汁会比较奇怪,为什么要分为100年整,和非100年整来计算呢
其实原理是这样的:
- 年 => 地球绕太阳公转一圈的时间
- 天 => 地球自转一圈的时间
但是一年并不是完全等于365天,而是会多一点点,一年等于365.XXXXXXXX天,每算一年,都会存在一些误差,因此人们就引入闰年来修正误差
经过计算,4年加一天,差不多能把误差给补上,但是也不是恰好就能补齐,还会多出来一块,人们又想了一个办法,恰好在整百年(不能被400整除的整百年)的时候,少补一次就行了,这样误差就会非常非常小。
3,浮点数的误差导致的判断错误
下面这段代码我们上来直接看会觉得最后打印相等,但是结果却是不相等
public class Test1 { public static void main(String[] args) { double a = 0.1; double b = 0.2; System.out.println(0.3); System.out.println(a + b); if(a + b == 0.3){ System.out.println("相等"); }else{ System.out.println("不相等"); } } }
在数据类型博客在1.4部分中提到了浮点数不能精确表示,链接在下面,铁汁们感兴趣可以看一下:
数据类型讲解
并且a+b误差还会变大,因此很容易出现条件判断不能成立的情况。因此,一般不是直接比较浮点数是否相等,而是做减法,判断差值是否在误差的范围之内。这里的判断相等允许在一定的误差范围内,来看是否相等,但是,如果这个误差范围太小的话,判断出来还是不相等。
public class Test1 { public static void main(String[] args) { double gap = 0.0000000001; double a = 0.1; double b = 0.2; if((a + b - 0.3) > -gap && (a + b - 0.3) < gap){ System.out.println("相等"); }else{ System.out.println("不相等"); } } }注:这里判断的相等,不是严格的相等,而是在误差范围内的相等,因此,在一些精确要求高的场景,还是要慎用浮点数,
4,输出文字“星期几”(switch语句)
用户输入一个从1到7的数字,读取后输出是星期几
import java.util.Scanner; public class Test1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个 1-7 之间的整数:"); int day = scanner.nextInt(); switch (day){ case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); default: System.out.println("您输入的值有误!"); } } }注:switch,case语句,switch括号里面,变量/常量的类型,如果是数字类型的话只能是:byte,char,short,int
注意不能是long类型(因为case的数量一般比较少的时候才用switch语句,如果超过21亿的话,那代码就太复杂了,还不如用if语句来写)switch括号里还可以是引用类型:String字符串,示例如下:
注:读取整数用scanner.nextInt,读取字符串则使用的是scanner.nextimport java.util.Scanner; public class Test1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个单词:"); String word = scanner.next(); switch (word) { case "dog": System.out.println("小狗"); break; case "cat": System.out.println("小猫"); break; case "bird": System.out.println("小鸟"); break; default: System.out.println("输入错误"); } } }5,阶乘计算(while)
跟C语言中的基本相同,唯一的不同点就是C语言中的while条件语句括号里可以按0和非0的逻辑来判断是否相同,但是在Java中括号里面必须是布尔类型(true或false),这个需要逐渐习惯。
public class Test1 { public static void main(String[] args) { int result = 1; int i = 1; while(i <= 5){ result *= i; i++; } System.out.println(result); } }6,计算1-5的阶乘的和
1! + 2! + 3! + 4! + 5!
1,基础代码(低内聚)
这里很简单,就是两层循环,外面表示从1到5,里面表示计算阶乘。
补充:continue和break,break是跳出整个循环,continue是跳出本次循环,进入下次循环,这里C语言已经学过,就不再过多阐述了public static void main(String[] args) { int sum = 0; int n = 1; while(n <= 5){ int factorResult = 1;//表示阶乘的结果 int i = 1;//外面每一轮都将i更新为1 while(i <= n){ factorResult *= i; i++; } sum += factorResult; n++; } System.out.println(sum); } }2,局部变量的作用域,生命周期
这段代码中的所有变量都是局部变量,在Java中,根本就没有“全局变量”这一说,因为所有代码都是封装在类的结构中的(后面博客会提到,现在无需理解)
- 作用域:变量可以在那些代码中被使用
- 生命周期:变量创建的时机和销毁的时机(执行到变量定义得代码变量被创建,出了变量所在的代码块变量就会被销毁)
3,for循环写法(高内聚)
在刚刚写的while循环循环中,我们可以看到,
int i = 1;
i <= n;
i++;
这三个式子是分开来写的,这就是“低内聚”。- 高内聚:把有关联关系的代码,尽可能的集中放在一起
- 低内聚:把有关联关系的代码,放的非常分散,到处都有。
这就像我们在家里,把衣服放在一个柜子里,书放在一个柜子里,这样找东西特别清楚(高内聚),但要是衣服和书混起来放,那就特别乱,找东西也很难找。(低内聚)
代码也是这样,高内聚比低内聚要好,这样代码读起来清楚,可维护性也强。对比下面for循环写法(高内聚)和while循环写法(低内聚)的代码,会发现for循环的要比while循环清楚很多。日常写代码时,尽量使用高内聚
public class Test1 { public static void main(String[] args) { int sum = 0; for(int n = 1;n <= 5;n++){ int result = 1; for(int i = 1;i <= n;i++){ result *= i; } sum += result; } System.out.println(sum); } }7,判断输入的一个数是否是素数
下面这个写法是初学Java的时候一个很不错的写法
注意sqrt方法是Math类的,写的时候在前面加上Math(不理解的话现在先记住这样写,后面学过类后就理解了)import java.util.Scanner; public class Test1 { public static void main(String[] args) { System.out.println("请输入一个整数"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); //针对特殊情况的判定 if(n == 0 || n == 1){ System.out.println(n + "不是素数"); return; } //从2开始,一直判断到n的算术平方根,也就是根号n int i = 2; //使用Math类中的数学方法来计算 double tmp = Math.sqrt(n); //这个for第一个分号前这里空着不写,会默认是用前面的条件 for(;i < tmp;i++){ if(n % i == 0){ System.out.println(n + "不是素数"); break; } } if(i >= tmp){ System.out.println(n + "是素数"); } } }8,输出0-999之间的水仙花数
水仙花数:是指一个三位数,其各位数的立方和刚好等于其本身,如:153 = 1^3 + 5^3 + 3^3 ,故153就是一个水仙花数。
写出代码的关键就是取出来三位数的个位,十位,百位的每一位数。
public class Test1 { public static void main(String[] args) { for(int i = 100;i <= 999;i++){ int a = i % 10;//取出个位数 int b = (i / 10) % 10;//取出十位数 int c = i / 100;//取出百位数 if(a * a * a + b * b * b + c * c * c == i){ System.out.println(i + "是水仙花数"); } } } }- 取出个位数就是用三位数直接除以10,余数就是个位数。
- 取出十位数就是先用三位数除上一个10,将三位数的个位舍掉,变成一个两位数,此时再对10求余,就求出了个位数。
- 取出百位数就是直接让三位数除以100,自动约去小数部分,就取出了百位数。
4,更改IDEA编码界面背景
先打开File栏目,点击Settings打开设置

再点击Appearance,在Theme中来选择背景主体是白色还是黑色(这里建议改成黑的,比较护眼)

接着继续在Appearance中下滑,在Background image中可以选择本地的图片来作为IDEA编码背景板的图片(可以是跑车之类的,激励我们学习!)

结语💕💕
这些代码的关键在于适应C和Java的不同,同时储备一些写代码的逻辑,🥳🥳大家都学废了吗?完结撒花~ 🎉🎉🎉



3561

被折叠的 条评论
为什么被折叠?



