黑马程序员——Java基础(三)之运算符、键盘录入、流程控制语句

本文深入探讨了Java编程语言的关键技术,包括运算符、流程控制语句等核心概念,旨在帮助开发者提升编程技能。

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------

运算符

概述:就是对常量和变量进行操作的符号。

分类:算数运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三木运算符。

算数运算符:


注意:

自增和自减运算符只能对变量使用;

自增和自减运算符在变量前,先自增或自减,再使用;

自增和自减运算符在变量后,先使用,再自增或自减;

赋值运算符:

基本赋值运算符:=

       表示把=右边的数据赋值给左边。

扩展赋值运算符:

       +=   把=左边和右边的值相加,然后赋值给左边;

       -=   把=左边的值减=右边的值,然后赋值给左边;

       *=   把=左边和右边的值相乘,然后赋值给左边;

       /=   把=左边的值除=右边的值,然后赋值给左边;

       %=   把=左边的值对=右边的值取余,然后赋值给左边;

注意:扩展的赋值运算符隐含了一个强制类型转换。

比较运算符:


注意:比较运算符的结果都是boolean类型。

逻辑运算符:

逻辑运算符是用来连接布尔型表达式的。


位运算符:

       位运算是直接对二进制进行运算,计算机的底层对程序的运算都会转换为位运算,所以位运算效率最高。做位运算时,首先要把数据转换为二进制。


       <<:左移,左边最高位丢弃,右边补齐0;相当于把<<符号左边的数据乘以2的移动次幂。

       >>:右移,右边最低位丢弃,左边最高位是0,补齐0,最高位是1,补齐1;相当于把>>符号右边的数据除以2的移动次幂。

       >>>:无符号右移,右边最低位丢弃,左边最高位无论是0还是1,都补齐0。

在Java中,两变量值交换的4种方法:

<span style="font-size:14px;"><span style="font-size:14px;">public class ExchangeDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		
		// 方法1:
		int temp = a;
		a = b;
		b = temp;
		System.out.println("a:" + a + ",b:" + b);

		// 方法2:
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		System.out.println("a:" + a + ",b:" + b);

		// 方法3:
		a = a + b;
		b = a - b;
		a = a - b;
		System.out.println("a:" + a + ",b:" + b);

		// 方法4:
		b = (a + b) - (a = b);
		System.out.println("a:" + a + ",b:" + b);
	}
}</span></span>

三目运算符:

格式:比较表达式? 表达式1 : 表达式2;

执行流程:

       根据比较表达式的计算返回一个boolean值;

       如果是true,就把表达式1作为结果;

       如果是false,就把表达式2作为结果。

例:

<span style="font-size:14px;"><span style="font-size:14px;">public class sanmuDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int max = a > b ? a : b;
		System.out.println(max);
	}
}</span></span>
该段代码输出结果为20。
键盘录入:

方法:

1、导包(位置在class定义的上边):

       import java.util.Scanner;

2、创建对象:

       Scanner sc = new Scanner(System.in);

3、接收数据:

       int x = sc.nextInt();

流程控制语句

       在程序执行过程中,各条语句的执行顺序对程序的结果是有直接影响的,所以,我们要清楚每条语句的执行顺序,同时,还需要通过流程控制语句来控制语句的执行顺序。Java中流程控制语句分三大类(顺序结构,选择结构,循环结构)。

顺序结构

       是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,即写在前面的先执行,写在后面的后执行。

选择结构

       选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,根据结果产生选择,从而执行不同的语句。Java语言提供了两种选择结构语句(if语句和switch语句)。

if语句的三种格式:

A:

if(关系表达式) {

语句体;

}

执行流程:首先判断关系表达式看其结果是true还是false,是true就执行语句体,是false就不执行语句体。

B:

if(关系表达式)  {

语句体1;

}else {

语句体2;

}

执行流程:首先判断关系表达式看其结果是true还是false,是true就执行语句体1,是false就执行语句体2。

C:

if(关系表达式1) {

语句体1;

}else if(关系表达式2) {

语句体2;

}

...

else {

语句体n+1;

}

执行流程:

首先判断关系表达式看其结果是true还是false;

如果是true就执行语句体1;

如果是false就继续判断关系表达式2,看其结果是true还是false;

如果是true就执行语句体2;

如果是false就继续判断关系表达式...,看其结果是true还是false;

...

如果没有任何关系表达式结果是true,就执行语句体n+1;

switch语句

基本格式:

switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;

}

执行流程:

首先计算出表达式的值;(其中表达式的取值可以是byte、short、int、char类型,JDK5以后可以是枚举,JDK7以后可以是字符串 )

其次,和case后的值依次比较,一旦有对应的值,就会执行相应的语句,在遇到break就会退出switch语句;

如果和所有case后的值都不匹配,就会执行default后的语句;

注意事项:

1:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

2:default可以省略,但是不建议,default的位置可以在switch语句中的任何位置,但是建议在最后。

3:break可以省略,但是结果可能可能不正确。

4:switch语句的结束条件是遇到break或者程序执行的末尾。

循环结构

       循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。它由4部分组成:初始化语句,判断条件语句,循环体语句,控制条件语句。

for循环语句:

格式:

for(初始化语句;判断条件语句;控制条件语句) {

循环体语句;

}

执行流程:

a:执行初始化语句;

b:执行判断条件语句;

结果是true,继续执行,

结果是false,结束循环,

c:执行循环体语句;

d:执行控制条件语句;

e:回到b步骤继续执行;

while循环语句:

格式:

初始化语句;

while(判断条件语句) {

循环体语句;

控制条件语句;

}

while语句和for语句的区别:

while语句的执行流程和for语句相同,但它们分别使用于不同的应用场景,

for循环适合针对一个范围判断进行操作;

while循环适合判断次数不确定的操作;

do...while循环语句:

格式:

初始化语句;

do {

循环体语句;

控制条件语句;

} while(判断条件语句);

       do...while语句在执行过程中,必须先执行一次循环体语句,然后再执行判断条件语句,判断程序是否继续循环,这是它和while语句的区别。

写程序时要优先考虑使用for循环,再考虑while循环,最后考虑do...while循环,并且在使用中要避免出现死循环。

控制跳转语句的关键字

有break 中断; continue 继续; return 返回

break

使用场景:

在switch语句中;

在循环语句中;

其他场景使用无意义;

作用:

跳出单层循环;

跳出多层循环:跳出多层循环时,需带标签跳出,即在循环语句前和break关键字后分别加标签名,

格式:标签名:循环语句

continue

只可在循环中使用,其他场景下使用无意义。

       continue的作用是退出本次循环,然后继续在当前循环语句中执行下一次循环。在多层循环中,continue带标签使用是退出外层的本次循环。

return

结束当前所执行的方法,当方法有返回值时,return将返回值返回上层方法或调用语句。


下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值