5.2.2015
运算符
%:求余数,如8%3=2
= =:逻辑上等于
!=:逻辑上不等于
!:逻辑非
&:逻辑与
|:逻辑或
^:逻辑异或(相异为true,相同为false)
&&:短路与
||:短路或
| 逻辑或
eg. A|B,会对A, B都进行判断
||短路或
eg.A||B,只有当A为假的时候才会对B进行判断。若A为真,则不继续对B进行判断。
int i1 = 10,i2 = 20;
int i = (i2++);
++放在后面,表示先把i2的值(20)赋给i,然后i2再递增1
++放在前面(++i2),则先把i2递增1再赋值给i
print后面不带ln则打印出结果后不换行
运算符 | 用法举例 | 等效表达式 |
---|---|---|
+= | a+=b | a=a+b |
-= | a-=b | a=a-b |
*= | a*=b | a=a*b |
/= | a/=b | a=a/b |
%= | a%=b | a=a%b |
+除了用于加法外,还可用于对字符串进行连接操作
String s ="Hello"+"World";
+运算符两侧操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后联接
int c = 12;
System.out.println("c="+c);
"c="为字符串,因此系统把后面的c也转换成字符串即12再联接。
当进行打印时,无论任何类型,都自动转换为字符串
三目条件运算符:
x ? y : z
其中x为boolean类型表达式,先算x值,若为true则整个运算结果为表达式y的值,否则为表达式z的值。
举例:
int score = 80; int x = -100;
String type = score < 60 ? "不及格" : "及格";
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type);
System.out.println("flag= " + flag);
输出结果为type=及格 ,flag=-1
for语句
形式如下::
for(表达式1;表达式2;表达式3){语句;.....;}
执行过程:
先计算表达式1,然后执行表达式2,若为true则执行语句,然后计算表达式3,然后再判断表达式2的值,……知道表达式2的值为false
举例:计算result=1!+2!+3!+…+10!
public class OddSum {
public static void main(String []args) {
long result = 0;
long f = 1;
for (int i=1; i <= 10; i++) {
f = f * i;
result += f;
}
System.out.println("result="+result);
}
}
练习1
计算1+3+5+7+…+99=
public class OddSum2 {
public static void main(String []args) {
long result = 0;
long f = 2;
long g = 0;
for (int i=1; i <= 50; i++) {
g = f * i - 1;
result += g;
}
System.out.println("result="+result);
}
}
老师的解法
public class OddSum2 {
public static void main(String []args) {
long result = 0;
for (int i=1; i <= 99; i+=2) {
result += i;
}
System.out.println("result="+result);
}
}
while & do while语句
- while语句
形式如下:
while(逻辑表达式){语句;...;}
执行过程:先判断逻辑表达式,若是ture则执行语句,然后再判断逻辑表达式若为true再执行语句,直至false为止 - do while语句
形式如下:
do{语句;..;}while(逻辑币表达式);//这个分号不能丢
执行过程:先执行语句,然后判断逻辑表达式,若为true则继续执行语句;若为false则结束。
举例:输出0-9 0-10
public class TestWhile {
public static void main(String[] args) {
int i = 0;
while (i<10){
System.out.println(i);
i++;
}
i = 0;
do {
i++;
System.out.println(i);
}
while (i<10);
}
}
break & continue语句
break用于终止循环;
continue用于跳过continue语句下面未执行的循环,开始下一次循环。
举例:break语句
public class TestBreak {
public static void main(String[] args) {
int stop = 4;
for (int i = 1; i <= 10; i++) {
if (i == stop) {
break;
}
System.out.println("i="+i);
}
}
}
if(i == stop)
与{
之间不要加分号
输出i=1,i=2,i=3
举例:continue语句
public class TestContinue {
public static void main(String[] args) {
int skip = 4;
for (int i = 1; i <= 5; i++) {
if (i == skip) {
continue;
}
System.out.println("i="+i);
}
}
}
输出i=1,i=2,i=3,i=5
练习
输出1~100内前5个可以被3整除的数
public class Test211 {
public static void main(String[] args) {
int i = 1,num = 0;
while (i < 100) {
if (i % 3 == 0) {
System.out.println(i);
num++;
}
if (num == 5) {
break;
}
i++;
}
}
}
输出101~200内的质数
public class Test212 {
public static void main(String []args) {
for (int i = 101; i < 200; i++) {
boolean f = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
f = false;
break;
}
}
if (!f) {
continue;
}
System.out.print(i+" ");
}
}
}
输出101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199
switch语句
public class TestSwitch {
public static void main(String []args) {
int i = 18;
switch (i) {
case 8 :
System.out.println("A");
break;
case 3 :
System.out.println("B");
break;
default:
System.out.println("error");
}
}
}
输出error
switch(i)//对i值进行探测
case 8 //若i=8 则执行……
default //若为默认情况,则输出error
- 若case8里没加break,把i赋值为8,则AB都会打印出来,因为会穿到下一个case。即每一个case下都有一个break
- case可以合并
case 8 :
case 2 :
System.out.println("A");
break;
即值为8或2时都输出A
- default可以省略,但不推荐
- java中switch语句只能探测int类型值
return语句终止方法的运行并指定返回的数据
5.1.2015
整数类型
类型 | 占用储存空间 | 表数范围 |
---|---|---|
byte | 1 字节 | -128~127 |
short | 2字节 | -2-15~215-1 |
int | 4字节 | -231~231-1 |
long | 8字节 | -263~263-1 |
整型常量默认为int,若要声明long型常量,需要在后面加L或l
浮点类型
默认为double型,若要声明float型,需在后面加F或f
float占4字节,double占8字节。表数范围都很大
练习1
TestVar2.java第12行出现错误,应该是 System.out.println("x="+x+",y="+y);
而不是System.out.println("x="+x",y="+y);
第10行变量名打错di d1
基本数据类型转换
- boolean类型不可以转换成别的类型。
- 整型,字符型,浮点型可混合运算中互相转换,遵循以下原则:
- 容量小的数据类型自动转换成容量大的,数据类型按容量大小排序为:
byte,short,char->int->long->float->double
byte,short,char三者不会互相转换,计算时首先转为int类型。 - 容量大的数据类型转换成容量小的数据类型时要加上强制转换符,但可能会造成精度降低或溢出,需格外注意。
- 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种,再计算。
- 实数常量(如1.2)默认为double
- 整数常量(如123)默认为int
强制转换符:在数据前加上要转换成的数据的类型名,如要把double转换成float,则
double d=1.2; float f=(float)(d*1.2);
*可以把int类型的数赋值给byte,short,char,但是不能超出其表数范围
byte a=1; byte b=2;//范围为-128~127
练习2
修改TestConvert时候在12,15,15,17行
byte b=(byte)b1-b2;// (b1-b2)忘记括起来
导致
修改后。注意,i结果为0,因为第12行
i=i/10;
中i和10都是int型,所以除完后得0.1转成int型里会去掉小数点变成0第13行
i=(int)(i*0.1);
因为0.1为double型所以i*0.1就变成double型,再赋值给i(i为int型),于是此时需要强制转换成int型。15,16,18,20行同理。注意第6,8行的赋值。
public class TestConvert
{
public static void main(String[] args)
{
int i = 1,j = 2;
float f1 = 0.1F;
float f2 = 123;
long l1 = 12345678,l2 = 8888888888L;
double d1 = 2e20,d2 = 2321;
byte b1 = 1,b2 = 2,b3 = 127;
j = j + 10;
i = i / 10;
i = (int)(i * 0.1);
char c1 = 'a',c2 = 125;
byte b = (byte)(b1 - b2);
char c = (char)(c1 + c2 - 1);
float f3 = f1 + f2;
float f4 = (float)(f1 + f2 * 0.1);
double d = d1 * i + j;
float f = (float)(d1 * 5 + d2);
System.out.println("j="+j);
System.out.println("i="+i);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("f3="+f3);
System.out.println("f4="+f4);
System.out.println("d="+d);
System.out.println("f="+f);
}
}
写代码的格式
- 一对大括号所在的这两行对齐
public class HW { }
- 遇到{缩进,按TAB键缩进,不要用空格缩进(SHIFT+TAB往回缩)
- 程序块之间加空行
public class HelloWorld {
static int j = 9;
public static void main(String args[]) {
System.out.println("Hello World");
}
public static void m() {
}
}
- 并排语句之间加空格
System.out.println(a); System.out.println(b);
- 运算符两侧加空格(特定情况除外)
int b = 1;
- {前面有空格
public class HelloWorld {
- 成对编程:写完{立马写出}防止遗漏
4.29.2015
执行过程中的内存管理分为四部分:heap,stack,data segment,code segment.
stack是存放局部变量;data segment是用来放静态变量和字符串常量;code segment是存放代码;heap是动态申请内存用的,即所有new出来的东西都在heap里面。
程序在硬盘里是静态的,运行后会加载到内存的code segment,然后从main方法开始执行,执行过程中会牵扯到内存的其他三个部分:stack,heap,data segment.
成员变量:在方法体之外,类体之内的变量
局部变量:在方法体内的变量
凡是在大括号里声明的变量,出了大括号就不认识了
进制转换:
二进制1101转十进制:从右往左,1101=1*1+2*0+4*1+8*1=13
十进制转二进制:13=1+4+8=1101 15=1+2+4+8=1111
二进制转十六进制:四位一变,先转成十进制再转16进制,1101=13=D
十六进制里:10对应A ,11对应B, 12对应C ,13对应D, 14对应E ,15对应F
4.26.2015
照着视频写的HelloWorld一直运行不了
各种百度找办法,环境变量改了一次又一次,终于发现问题所在,人生第一个小程序出世!
之前运行不了的原因就是:运行的时候多加了个.java 具体原因没弄明白
百度找到原因
折腾半天终于懂了。。