导图社区 02基本程序设计
变量的使用,对变量的使用就是对它所存的那个数的使用,变量在用之前必须声明并初始化。
编辑于2022-01-10 10:26:56基本程序设计
变量
声明
初始化
使用
对变量的使用就是对它所存的那个数的使用
变量在用之前必须声明并初始化
命名
只能包含字母、数字、_和$符,并且不能以数字开头
严格区分大小写
不能使用关键字
允许中文命名,但不建议,建议"英文的见名知意"、"小驼峰命名法"
八种基本数据类型
byte
int:整型,4个字节,-21个多亿到21个多亿
整数直接量默认为int类型,但不能超范围,若超范围则发生编译错误
两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入)
整数运算时,若超出int范围则发生溢出(溢出不是错误,但需要避免)
short java不用,继承c下来的
long:长整型,8个字节,很大很大很大
长整型直接量需在数字后加L或l
运算时若有可能溢出,建议在第1个数字后加L
float java不用,继承c下来的
double:浮点型,8个字节,很大很大很大
浮点数直接量默认为double型,若想表示float需在数字后加F或f
double与float型数据参与运算时,有可能会出现舍入误差,精确场合不能使用
boolean:布尔型,1个字节
只能赋值为true或false
布尔值不能转换为其他类型的值,其他类型的值也不能转换为布尔类型值
char:字符型,2个字节
采用Unicode字符集编码格式,一个字符对应一个码
表现的形式是字符char,但本质上是码int(0到65535之间)
ASCII码:'a'---97 'A'---65 '0'---48
字符型直接量必须放在单引号中,并且只能有1个
特殊符号需通过\来转义
\t Tab键
\t是补全当前字符串长度到8的整数倍,最少1个最多8个空格,补多少要看你\t前字符串长度 比如当前字符串长度10,那么\t后长度是16,也就是补6个空格 =如果当前字符串长度12,此时\t后长度是16,补4个空格
引用数据类型
String
字符串类型,用 " " ,其中内容为任意内容,任意长度0
两边为数字时用+相连则做加法运算,String与其他基本类型用+相连时会将之后的数据类型同化为String(同化作用)
类型间的转换
自动/隐式类型转换:小类型到大类型
强制类型转换:大类型到小类型
语法:(要转换成为的数据类型)变量 强转有可能溢出或丢失精度
两点规则
整数直接量可以直接赋值给byte,short,char,但不能超出范围
byte,short,char型数据参与运算时,系统一律自动将其转换为int再运算
从控制台读取输入
Scanner input = new Scanner(System.in);
double radius = input.nextDouble();
运算符
数值运算符
+/-/*/ / /%/
赋值运算符
= += -= *= /= %=
运算赋值:先执行运算再执行赋值
a+=1; a=a+1;
简捷运算符
+= / -= / *= / /= / %=
扩展赋值自带强转功能
s=s+10;//编译错误,需强转s=(short)(s+10);
s +=10;//相当于s=(short)(s+10)
++ / --
若运算符是在变量的前面(前置于变量),则该变量自增1或自减1,然后返回的是变量的新值。若运算符是在变量的后面(后置于变量),则变量也会自增1或自减1,但是返回的是变量原来的旧值。
++var 前置自增运算符
变量var的值加1且使用var增加后的新值
var++ 后置自增运算符
变量var的值加1但使用var原来的值
--var 前置自减运算符
变量var的值减1且使用var减少后的新值
var-- 后置自减运算符
变量var的值减1但使用var原来的值
如果单独使用某种前置形式+(或--)和后置形式++(或-) 那么不管前置还是后置其效果是一样的,但是用在表达式中它们就会产生不同的效果。
逻辑运算符
短路逻辑
短路逻辑关注点在于第二个表达式是否执行,无需关注整体是true或者false
&& 逻辑与/条件与/短路与,关联的两个条件都是true结果是true,否则false
&& 当第一个表达式为false,不再执行第二个表达式
|| 逻辑或/条件或/短路或,关联的两个条件有一个是true结果是true,否则false
|| 当第一个表达式为true,不再执行第二个表达式
! 逻辑非,取反
^ 异或。当且仅当两个操作数具有不同的布尔值时,两个布尔型操作数的异或( ^ )才为true
位运算符
模拟计算机底层的运算,先将数值转为二进制然后进行运算,当运算完以后再把结果转回成10进制
& 不短路与(区别短路与&&)/按位与,上下两位都是1结果是1,否则是0
| 不短路或(区别短路与||)/按位或,上下两位含有1结果是1,否则是0
^ 按位异或,^运算符跟 | 类似,但有一点不同的是如果两个操作位都为1的话,结果产生0
~ 取反,~是对位求反 1变0, 0变1
>>右移 <<左移,超过的位将丢失,而空出的位则补0
三目运算符
一目运算符,由一个运算符连接的一个操做数据或表达式(优先级较高) ++ -- !
二目运算符,由一个运算符连接的两个操做数据或表达式 + - * / %
三目运算符,由两个运算符连接的三个操做数据或表达式
条件表达式 ? 表达式1 : 表达式2
如果条件表达式为true,执行表达式1; 如果条件表达式为false,执行表达式2;
流程控制
顺序结构
从上往下逐行执行,每句必走
分支结构
有条件的执行某语句一次,并非每句必走
if语句
if(条件表达式){ 语句块 }
if-else语句
if(条件表达式){ 语句块1 }else{ 语句块2 }
if-else的嵌套
if(条件表达式1){ 语句块1 }else if(条件表达式n){ 语句块n }else{ 语句块n+1 //以上所有的条件都是false }
随机数
int a = (int)(Math.random()*1000+1); //1到1000之内的随机数
int num = (int)(Math.random()*1000+1); //1到1000 Math.random()--------------0.0到0.9999999999999999... *1000----------------------0.0到999.99999999999999... +1-------------------------1.0到1000.9999999999999... (int)----------------------1到1000
int a = 1+new Random().nextInt(100);//系统生成一个1-100的数
switch-case
switch(表达式){ case 值1: //如果表达式的值和case后的值相同,执行对应的语句块 语句块1 break; //结束,跳出switch-case语句 case 值n: 语句块n break; default: 语句块n+1 //如果表达式和case中的每个值比较都是false }
优点:效率高、结构清晰
缺点:只能对整数判断相等
switch可以作用于的数据类型byte,short,int,char,String,枚举类型,Character类,Integer类
循环结构
有条件的执行某语句多次,并非每句必走
循环要素
1)循环变量的初始化
2)循环的条件(以循环变量为基础)
3)循环变量的改变(向着循环的结束变)
三种循环的选择规则
若相关,直接用for
若无关看要素1与要素3是否相同
要素1)和要素3)一样时首选do-while
要素1)和要素3)一样时直接选while
while
while(循环条件){ 循环体 }
do-while
do{ 循环体 }while(循环条件);
for
for(初始值;循环条件;增量(步长)){ 循环体 }
循环嵌套
一个循环出现在另一个循环的循环体中
任意循环之间都可以相互嵌套
break和continue
break 跳出循环,结束循环
continue 跳过某一次循环剩余的循环体,还会继续执行下一次循环
在内层循环中控制外层循环,给外层循环命名来指定break或continue哪个循环
outer:for(...){ for(...){ break outer; continue outer; } }
数组
数组基础
声明数组变量
elementType[] arrayRefVar;
创建数组
arrayRefVar = new elementType[arraySize];
这条语句做了两件事情: 1)使用new elementType[arraySize]创建一个数组; 2)把这个新创建的数组的引用赋值给变量arrayRefVar。
elementType [] arrayRefVar = new elementType[arraySize];
声明一个数组变量、创建数组、将数组应用赋值给变量这三个步骤可以合并在一条语句里
数组大小和默认值
分配数组空间时,必须征订数组大小,从而指定数组大小,从而指定其中可储存的元素个数。创建数组之后就不能再修改其大小。可以使用arrayRefVar.length得到数组的大小。
创建数组后,其元素被赋予默认值, 数值型基本数据类型的默认值为0, char型的默认值为'\u0000', boolean型的默认值为false。
访问数组元素
数组元素可以通过下标访问。 数组下标从0开始,也就是说其范围从0到arrayRefVar.length-1。
数组中的每个元素都可以使用下面的语法表示,称为下标变量(indexed variable): arrayRefVar[index];
创建数组后,下标变量与正常变量的使用方法相同。
数组初始化简写语句
elementType [] arrayRefVar = {value0,value, ... ,valuek};
使用此语法讲声明数组、创建数组和初始化数组结合到一条语句中
处理数组
foreach循环
Java支持称为foreach循环的简洁for循环,从而不使用下标变量就可以顺序遍历整个数组
for(elementType element: arrayRefVar){ //process the element }
此代码可以读作“对数组中的每个元素e执行以下操作”
注意,变量e必须声明为与数组中元素相同的数据类型
当需要以其他顺序遍历数组或改变数组中的元素时,还是必须使用下标变量
复制数组
1)使用循环语句逐个复制数组的元素
2)使用System类中的静态方法arraycopy
System.arraycopy(sorceArray, srcPose, targetArray, tarPos, length);
arraycopy(源数组,源数组起始位置 , 目标数组, 目标数组起始位置, 要复制元素的个数);
3)使用clone方法复制数组
Arrays类
Arrays.copyOf(sorceArrsys,sorceArrsys.length+1);
数组的扩容(创建了一个更大的新数组,并将源数组数据复制进去了)
Arrays.copyOf(sorceArrsys,sorceArrsys.length- 1);
数组的缩容(创建了一个更小的新数组,并将源数组数据复制进去了)
Arrays.sort(sorceArrsys);
调用sort(number)以对整个数组进行升序(从小到大)排序。
调用sort(char,1, 3)对从char[1]到char[3-1]的部分数组排序
如果计算机有多个处理器,那么parallelSort将更高效
方法
方法:又称函数
封装一段特定的业务逻辑功能
方法尽可能的独立,一个方法只干一件事
方法可以被反复多次调用
可以减少代码重复,有利于代码的维护
方法的定义:五要素
语法:
修饰词 返回值类型 方法名(参数列表) { 方法体---------具体的业务逻辑实现 }
说明
方法可以有参,也可以无参。有参可以使方法更加灵活
方法可以有返回值,也可以没有返回值
没有返回值-------返回值类型统一写成void
有返回值---------返回值类型写成特定的数据类型即可
何时有返回值?何时没有返回值?------方法操作完成后:
若还需要用到方法中的某个数据---------有返回值
若不需要用到方法中的某个数据---------没有返回值
方法的调用:
无返回值:方法名(有参传参);
有返回值:数据类型 变量 = 方法名(有参传参);
return:
return 值; //1)结束方法的执行 2)返回结果给调用方
应用率高
用在有返回值的方法中
return; //1)结束方法的执行
应用率不高
用在无返回值的方法中