当前位置: 首页 > news >正文

硅基计划2.0 学习总结 贰


一、程序逻辑控制(顺序、选择&循环)

顺序结构就不多介绍了,就是各个语句按照先后顺序进行执行

(1)选择结构

三大选择类型:if、if-else、if-else if-else以及悬浮else的问题

基本已经在之前在C语言文章已经讲过,这里不过多赘述

只需要注意两个问题

1、Java中条件表达式只能是布尔型(Boolean,即结果是True或False)

2、表达式不能写的太复杂,比如你把短路表达式写进去,编译器可能会报错之前的C语言博客https://blog.csdn.net/Pluchon/article/details/147186769?fromshare=blogdetail&sharetype=blogdetail&sharerId=147186769&sharerefer=PC&sharesource=Pluchon&sharefrom=from_link

这里我们着重来讲下在Java中代码书写风格:示例代码↓

int num1 = 5;
if (num1 % 2 == 0) {System.out.println("是偶数");} else {System.out.println("是奇数");
}
int num2 = -1;
if (num2 > 0) {System.out.println("是正数");} else if (num2 < 0) {System.out.println("是负数");} else {System.out.println("是0");
}

在Java中,我们起始大括号“{”写在条件判断右边

而结束大括号“}”写在左边并且写在else之前

如果你有很多代码需要格式化成这种格式怎么办?

在Java的一个编译器Idea中,我们可以选中区域按住快捷键Ctrl+Alt+L

这个之前也有介绍过,但是在Java中有几个特殊之处:之前的博客文章https://blog.csdn.net/Pluchon/article/details/147191166?fromshare=blogdetail&sharetype=blogdetail&sharerId=147191166&sharerefer=PC&sharesource=Pluchon&sharefrom=from_link

1、Switch表达式可写字符型,比如下面这段代码,结果自然就是输出正确啦

char str1 = '中';switch (str1) {case '中':System.out.println("输出正确");break;default:System.out.println("输出错误");break;}

2、表达式不能是Long、Float、Double、Boolean这四大类

(2)循环结构

这个之前也介绍过了,但是在Java中有几个特殊之处:之前的博客文章https://blog.csdn.net/Pluchon/article/details/147191166?fromshare=blogdetail&sharetype=blogdetail&sharerId=147191166&sharerefer=PC&sharesource=Pluchon&sharefrom=from_link1、Java中不可用写while(1)这种死循环,要写也只能写while(true)

2、Java中创建循环有快捷方式:输入for后选择fori,直接生成循环模板

3、之前的博客文章有个寻找素数的题,里面有个循环终止条件

4.在Java中我们开平方可直接写成Math.sqrt()即可

我们写一个求水仙花数的Java代码:

public static void main6(String[] args) {//求出0~n之间的所有“水仙花数”并输出int simple4 = 1;while(simple4<10){System.out.print(simple4+" ");simple4++;}System.out.print("\n");int num3 = 10;while(num3<=99999){int count = 0;//先统计是几位数int temp = num3;while(temp != 0) {temp /= 10;count++;}int sum = 0;//用来计算次方和temp = num3;while(temp != 0){sum += Math.pow(temp%10,count);temp /= 10;}if(sum==num3){System.out.print(num3+" ");}num3++;}}

二、程序输入&输出

(1)程序的输出

基本上跟C语言差不多,唯一有区别的就是print和println,以下是区别:

System.out.println("hello world");//这个是换行输出
System.out.print("hello world"+" ");//这个是不换行输出
System.out.printf("%s","hello world");//这个是格式化规范输出,很少使用

(2)程序的输入

对比C语言我们Java的输入需要使用Scanner包装类处理我们的输入

其中必须写的一行代码:

import java.util.Scanner;
Scanner sc = new Scanner(System.in);

注意:我们在输入Scanner后回车,会自动进行导包操作

Scanner后面的sc可以取其他名字,但建议sc


其次,我们再创建变量,接收我们输入的值

int input = sc.nextInt();

注意:你输入的是什么类型,初始化成什么类型,目前只能读取到一个输入的值

这里我们讲下next和nextLine的区别:next遇到空格读取停止,而nextLine会读取一行的内容


在你处理完输入程序后,最后可以选择关闭Scanner的资源

sc.close();

System.out.println("年龄");int age = sc.nextInt();System.out.println("姓名");String high = sc.nextLine();//注意看这里是nextLineSystem.out.println("年龄:"+age);System.out.println("姓名:"+high);

为什么我输入年龄后敲完空格回车直接打印结果了呢,我姓名都没来得及输入啊

注意看代码,nextLine读取的是一行的内容,而你输入完年龄后回车会产生一个空行

nextLine把这一行误以为是你输入的内容,把它读取走了

只需要再添加一个nextLine来读取空白行就好

System.out.println("年龄");int age = sc.nextInt();sc.nextLine();//单独添加这一行,让这一行把空行读走System.out.println("姓名");String high = sc.nextLine();System.out.println("年龄:"+age);System.out.println("姓名:"+high);


循环输入,我们就写一个求和的循环输入吧

int sum = 0;while(sc.hasNextInt()) {int input = sc.nextInt();//←毕竟这里是nextIntsum += input;}System.out.println(sum);

hasNextInt中int类型表示你输入除整数以外的数循环终止

建议输入什么就写什么类型的hasNext

注意这段代码有个陷阱:

你提前终止循环输入,会导致你输入的数没有加到sum中去,你输入完数后回车以下
此时再按ctrl+d才会有正确结果

三、使用方法

public static void main(String[] args) {

我们上面那一行就是main方法的基本格式

public static是修饰符,void是返回类型,main是方法名,括号里的东西是形参

你可以把方法理解成一个工厂,原材料进去成品出来

Java中的方法不需要声明,而且你写哪里都可以

毕竟Java是全局搜索的,而且方法不可以嵌套,不像C/C++函数一样

其生命周期,作用域,就是在“{}”内部,进入开始,出去结束 如何调用方法呢?

我们这里创建一个求两数之和的方法,然后就跟C语言调用函数一样去调用方法

public static int addSimple (int num1,int num2){int ret = num1+num2;return ret;}

如果这个方法有返回类型,我们就用一个变量来接收

如果方法无返回值,则默认是为void,不需要写变量来接收

注意你方法返回的是什么类型,你就需要用什么类型去接收

int result = addSimple(1,2);

因此我们方法的创建和调用之间形成了三匹配:

方法返回类型,返回值类型,接受方法返回值的变量的类型

你肯定写过在C语言中通过函数交换两个数字,用的是地址

但是在Java中,不存在地址的概念,所以Java很安全

public static void swap(int num3,int num4){//这个是方法的定义int temp = num3;num3 = num4;num4 = temp;
}int num3 =1,num4 = 2;swap(1,2);System.out.println(num3+" "+num4);

我们发现并没有交换,原理跟C语言差不多,你形参只是实参的一份临时拷贝

也就是说形参有自己的一块空间,你交换了形参并不等于交换了实参

在Java中只有传值调用,而且方法调用同样是要在栈上开辟空间

四、方法重载

接着我们将方法重载,这个跟C++很像

我们每个重构的方法可以去相同的方法名,在方法调用的时候编译器自己选择

重载三个条件

方法名相同,(参数列表/参数类型/参数个数)不同,并且和返回类型无关!!

我们就拿两数之和来举例

public static int addSimple (int num1,int num2){int ret = num1+num2;return ret;//return作为方法结束的标志}public static double addSimple (double num1,double num2){double ret = num1+num2;return ret;}int ret1 = addSimple(1,2);double ret2 =addSimple(1.5,2.5);

下满那个方法就是addSimple方法的重载,这个重构的方法是专门求浮点型的

函数返回值支持链式表达式,比如return (1/2)+6

仅仅改变方法返回值类型是不会构成方法重载的

 五、方法递归

在C语言中函数有递归,那在Java中方法自然也有递归,基本上和C语言类似

这里列出特殊之处:如果你无线递归下去,没有终止条件,会导致栈溢出,报错如下

给出一个例题练习:递归一个数字,并把各个位数数字求和,比如2255,各个位数之和是14

public static void print(int num){if(num<10){System.out.print(num+" ");}else {print(num / 10);//递推System.out.print(num % 10+" ");//回归的时候打印}}int ret5 = addPlus(2255);
System.out.println(ret5);

为什么不写else会导致栈溢出?
这是因为在if中不存在return语句,return语句作用就是终止后面代码执行
即使你的num小于了10,上面执行完了,下面的else部分还是会执行


之前在C语言已经写过很多递归练习,这里给出之前写的博客链接,写法基本上一致

C语言中递归介绍和练习https://blog.csdn.net/Pluchon/article/details/147530549?fromshare=blogdetail&sharetype=blogdetail&sharerId=147530549&sharerefer=PC&sharesource=Pluchon&sharefrom=from_linkC语言中递归经典练习https://blog.csdn.net/Pluchon/article/details/147514375?fromshare=blogdetail&sharetype=blogdetail&sharerId=147514375&sharerefer=PC&sharesource=Pluchon&sharefrom=from_link

这里给出Java递归的汉诺塔问题的代码

public static void hanNuoTa (int num,char pos1,char pos2,char pos3){if(num==1) {//递归终止条件System.out.print(pos1+"→"+pos3+" ");}else {//一定要写else,因为递归式子中无return,会导致无限递归hanNuoTa(num - 1, pos1, pos3, pos2);System.out.print(pos1 + "→" + pos2+" ");hanNuoTa(num - 1, pos2, pos1, pos3);}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int input = sc.nextInt();hanNuoTa(input,'A','B','C');}


作者基础不是很强,文章撰写难免会有疏漏之处,欢迎指出,我们友好交流


Git码云仓库链接:

本文章使用的代码https://gitee.com/pluchon/java-career/tree/master/TestProject20250515/src


END

相关文章:

  • 软件工程之软件产品的环境
  • 在文件检索方面doris和elasticsearch的区别
  • 最新版VSCode通过SSH远程连接Ubuntu 16.04等旧版Linux的方法
  • 中国近代史3
  • 阿里开源通义万相 Wan2.1-VACE,开启视频创作新时代
  • 【工具】metaTP:一种集成了自动化工作流程的元转录组数据分析工具包
  • git 本地提交后修改注释
  • YOLO11解决方案之距离计算探索
  • NVIDIA Omniverse 现已支持中文!
  • 1. 数字组合1
  • 实验6 电子邮件
  • nohup命令使用
  • 投影仪基础知识及选购方向小记①
  • 【MySQL】基础知识
  • 北京孙河傲云源墅:限量典藏的主城墅居臻品
  • VMware虚拟机 安装 CentOS 7
  • 深入解析浏览器内核:V8 引擎与渲染引擎 Blink 的协作机制
  • 从入门到实战:时序图核心知识与高效绘制全解析(附模板)
  • WHAT - 前端开发流程 SOP(标准操作流程)参考
  • Spring类
  • 上海比常年平均时间提前12天入夏,明天最高气温可达33℃
  • 中央提级巡视后,昆明厅官郭子贞接受审查调查
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应
  • 中国进出口银行:1-4月投放制造业中长期贷款超1800亿元
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”
  • 申论|空间更新结合“青银共生”,助力青年发展型城区建设