Java MOOC笔记整理

本篇博文是对MOOC:零基础学Java语言的笔记整理,不定期更新。


读输入

读输入格式:

Scanner in = new Scanner(System.in);
System.out.println(in.nextline());//ln意为换行

Eclipse:tips

Alt+/ :提示补全
Ctrl+/:使本行作为注释
双击行序号设置断点

关系运算符

  • 当两个值得关系符合关系运算符的预期时,关系运算的结果为true,否则为false。
System.out.println(5==3);
System.out.println(5>3);
System.out.println(5<=3);

输出结果为

false
true
false
  • 所有的关系运算符的优先级比算数运算的低,但是比赋值运算的高。

  • 判断是否相等的==和!=的优先级比其他的低,而连续的关系运算是从左向右进行的。true和false只能判断是否相等,不能比较大小;不像C语言,false是0而true非零。
    例如:

5 > 3 == 6 > 4  //即判断ture==ture
6 > 5 > 4       //不合规范,即判断ture>4
a == b == true  //即判断ture==ture
a == b == 6     //不合规范,即判断ture==6
a == b > false  //不合规范,b和false无法比较
(a == b) > false//不合规范,即判断false>false或者true>false

浮点数精度损失

double a = 1.0;
double b = 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
System.out.println(a==b);

输出结果为

false

原因在于b在程序中认为是 0.9999999999999999。
因此,比较整点数与浮点数大小时,可用语句

Math.abs(f1 - f2) < 0.00001

等比较误差大小的方法实现。

循环嵌套

break和continue只能对一层循环做。
跳出嵌套的多个循环的方法:

  • 接力break
boolean exit=false;
for (;;) {
    for (;;) {
        if ( ... ) { exit=true;break;}
    }
        if ( exit ) break;
}

注意虽然Java中不支持用1、0表示真假,但可以定义布尔类型变量。

  • 使用标号label
    在循环前可以放一个标号来表示循环,带标号的break和continue对那个循环起作用。
Outer:
for (;;) {
    for (;;) {
        if ( ... ) {
            ...;
            break Outer;
        }
    }
}

运算优先级比较

这里写图片描述
单目运算符优先级高于双目运算符;括号优先级最高;逻辑与优先级高于逻辑或。

数组变量

  • 数组变量是数组的管理者而非数组本身;
  • 数组必须创建出来然后交给数组变量来管理;
  • 数组变量之间的赋值是管理权限的赋予;
  • 数组变量之间的比较是判断是否管理同一个数组。

例1:

int[] a1={1,2,3,4,5};
int[]a2=a1;
for(int i=0;i<a2.length;++i)
{
    a2[i]++;
}
for(int i=0;i<a1.length;++i)
{
System.out,println(a1[i]);
}

结果如图:
这里写图片描述
a1和a2都是数组的管理者,因此对a2做遍历改变了数组的内容。
例2:

Scanner in = new Scanner(System.in);
int [] a ={1,2,3,4,5};
int [] b ={1,2,3,4,5};
System.out.println(a==b);

结果为false,因为a,b不是同一个数组的管理者;
将一个数组的值赋给另一个数组需要用遍历的方法将每个元素逐一拷贝给目的数组:

Scanner in = new Scanner(System.in);
int [] a ={1,2,3,4,5};
int [] b= new int[a.length];//创建一个新的数组将a数组复制给b数组
for(int i=0;i<b.length;i++)
{
          b[i]=a[i];
}

数组变量和C中的首地址有可类比的地方,就是内容一样并不代表两个数组完全等同

Java.lang.Character类

这里写图片描述

字符串

和数组一样,字符串变量也只是字符串的管理者。
需要比较两个字符串是否相等,不能直接用“==”,需要用字符串操作s.equals()来判断,如:

if(input.equals("bye")) {
 ...
}

需要比较两个字符串的大小,需要字符串操作s1.compareTo(s2)来判断,compareToIgnoreCase可以不区分大小写地来比较大小;
用字符串操作s.length() 来获得字符串长度;
s.charAt(index)用来返回index处的字符,其范围从0到length()-1,和数组一样(下面的所有操作中的位置都是这样算的),但是不能用for-each循环来遍历字符串
s.substring(n)用来得到从n号位置到末尾的全部内容;
s.substring(b,e)用来得到从b号位置到e号位置之前(不包括e)的内容;
s.indexOf(c)得到c字符所在的位置,-1表示不存在;
s.indexOf(c, n)是从n号位置开始寻找c字符;
s.indexOf(t)用来找到字符串 t所在位置;
s.lastIndexOf(c),s.lastIndexOf(c,n),s.lastIndexOf(t)表示从右边开始寻找;
s.startsWith(t)判断是否以某一字符串开头;
s.endsWith(t)判断是否以某一字符串结尾;
s.trim()用来把字符串两端的空格删掉;
s.replace(c1,c2)将字符串中所有c1替换为c2;
s.toLowerCase()将字符串所有大写字母替换为小写字母;
s.toUpperCase()将字符串所有小写字母替换为大写字母。
注意最后四个字符串操作并不能改变字符串的内容,用法为:

String s1="abc";
String s2=s1.toUppercase(s1);
System.out.println(s2);

另外,switch-case中的选择可以为字符串:

switch ( s ) {
casethis”:...break;
case “that”:...break;
}

猜你喜欢

转载自blog.csdn.net/twentyonepilots/article/details/79318670