第一章:初识java
1.1在eclipse建立一个class:
1.new->java project
2.new->class
1.2 打印hello word!
package Exp; //Exp为包名
public class Na { //Na为库名
public static void main(String[] args) {
System.out.println("hello word"); //String与System都是库
}
}
ps:
1.部分窗口调出:window->show view->console(控制台)
2.先保存,再运行
第三章
3.7运算符与表达式:
1)算术运算符:
+、-、*、/、%、++、--
- /:
3.0/2 = 1.5(除法运算)
3 / 2 =1 (整除运算) - ++:
print(i++) 输出5 i++为表达式的值
print(++i) 输出6
表达式的值和变量的值
口诀:先赋值再相加
例题:
1.输出整数各个位置上的数字
2.水仙花数
for(int i = 100;i<1000;i++)
{
int a = i%10;
int b = (i/10)%10;
int c = i/100;
if(a*a*a+b*b*b+c*c*c == i)
{
System.out.println(i);
}
}
2)关系运算符
<、>、>=、<=、==、!=
3)逻辑运算符
&、|、!、^、&&、||
- &为逻辑运算符时,前后为布尔型;为位运算时,前后为整型。
- &与&&:逻辑与和简洁与。
- |与||:逻辑或和简洁或
- <font face="微软雅黑" color=#0066FF size=3> 简洁与逻辑的区别:欠着可能之极端左边的表达式而不计算右边的表达式,而后者必须计算完左右两个表达式。 </font>
例题:ppt51页
4)位运算符
~ 按位非(not)(一元运算)
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
>> 右移
>>>0填充右移,左边空出的0填充(二进制100->1000)
<<左移
位运算的某些运算技巧
- 异或运算:
作用一:简单数据加密(穷举法可证)
如果a^b=c,那么c^b=a以及c^a=b(类似乘法和除法)将b做秘钥,a为原文,c为密文
作用二:交换两个变量(穷举法可证)
int a = 5,b = 7;
a = a^ b;b = b^ a;a = a^b;
- <<左移运算符
a<<b
将a各二进制位全部左移b位后得到的值,左移越界丢弃,低位补0。a的值不因运算而改变
作用:左移一位等于乘以2;可以用来开2的n次方
5)赋值运算符
+=、-=、*=、/=、%=、&=、|=、^=、>>=、<<=、>>>=(a=a>>>b)
- 赋值运算符
格式: 变量或对象 = 表达式
右边可以连续赋值: a = b = c =8; - 扩展赋值运算符
在赋值符“=”前加上其他运算符,即构成扩展赋值运算符
例如:a+=3等价于a=a+3
例题
a = 3; a *= 3+5
24
6)条件运算符(三目运算符)
格式 :<表达式1>?<表达式2:<表达式3>
其中“表达式1”是一个结果为逻辑值的布尔表达式
功能:先计算<表达式1>的值,当<表达式1>的值为true时,则将<表达式2>的值作为整个表达式的值;当<表达式1>的值为 false时,则将<表达式3>的值作为整个表达式的值。
例题:
int a=1,b = 2,max;
max = a>b ? a : b;
System.out.println("max=" + max);
7) 字符串运算符
字符串运算符“+”完成字符串连接操作
8)运算符的优先级
- . [] ()
- ++ - ! ~ +(正号) -(负号)
- new(类型)
- / % *
- +-(二元)
- << >> >>>
- < > <= >=
- == !=
- &
- ^
- |
- &&
- ||
- ? :
- = += -= *= /= %= <<= >>= >>>= &= ^= |=
第四章 流程控制
顺序,分支,循环
4.1语句与复合语句
- JAVA不允许在两个嵌套的复合语句内声明两个同名的变量
public Static void main(String args[])
{
int a;
......
int a//错误
} - 注释
单行 //
多行 / * */
文件/ ** */
4.2 顺序结构
一行一行执行,没有判断和跳转,直到程序结束
4.3 分支结构
1) if条件语句
- 两个
int a=1,b=2,c=3,max,min;
if(a>b)
max=a;
else
max=b;
if(c>max) max=c;
System.out.println("Max="+max);
min=a<b ? a : b;
min=c<min ? c : min;
System.out.println("Min="+min);
MAX = 3
MIN = 1
- 多个
if(条件表达式1)
{
语句序列 1
}
else if(条件表达式 2)
{
语句序列 2
}
……
else
{ }
Scanner sin = new Scanner(System.in);
int sorse = sin.nextInt();
String grade = "A";
if(sorse<60) {
grade = "D";
}
else if (sorse<70)
grade = "C";
else
grade = "B";
System.out.println(grade);
2) switch选择语句
switch (表达式):
{
case 常量表达式1:
语句序列1;
break;
case 常量表达式1:
语句序列1;
break;
}
switch(sorse/10) {
case 9: //后面没有任何值,无break。往后执行,直到遇到break
case 10:grade = "A";
break;
case 8:
if (sorse<85)
grade = "B";
else
grade = "A";
break;
case 7:grade = "C";
break;
default:
grade = "D";
}
System.out.println(grade);
注意:
- 每个case后面一般都带有break语句。
- 圆括号中的“表达式”,是整数型或字符型的量,同时应与各个case后面的常量表达式值得类型相一致。
4.4 循环结构
1)for
for(表达式1;条件表达式;表达式2)
{
循环体
}
for(int i = 1;i <= 10;i++)
{
sum += i;
}
变形
int i = 1;
for(;;)
{
if(i>10) break;
sum += i;
i++;
}
System.out.println(sum);
2)while循环
while(条件表达式)
{
循环体
}
例题:
1 + 2 +……+n
n!
int i = 11;
int sum = 0;
//直到循环变量的结束值时,一般用for,不知道,一般用while
while(i<=10)
{
sum += i;
i++;
}
3)do-while语句
do
{
循环体
}while(条件表达式);
例题:
do
{
sum += i;
i++;
}while(i<=10);//(i>=10)会输出1;(i<=10)会输出55;do-while先做后判断。
System.out.println(sum);
4)foreach语句与数组和集合
int a[] = {1,2,3,4,5,6,7,8};
for(int i:a)
{ //a中的值给i
System.out.println(i);
}
5)多重循环
例题:1!+2!+……+n!
int n,sum=0,jc;
Scanner in =new Scanner(System.in);
n=in.nextInt();
for(int i=1;i<=n;i++)
{
jc=1;
for(int j=1;j<=i;j++)
jc=jc*j;
sum=sum+jc;
}
System.out.println(sum);
4.5循环语句中的跳转语句
return、break、continue
break:循环,switch
continue:循环
第五章 数组与字符串
java的栈内存和堆内存
- 基本类型的变量和对象的引用变量都是在函数的栈内存中分配
- 堆内存用于存放有new创建的对象和数组
5.1数组
1)一维数组的声明
格式:
类型表示福 数组名[ ]
类型标识符[ ] 数组名
int a[];
int[] a;
注意:[ ]可放在变量名后,也可放在类型名后
2)用new初始化
声明数组时,没有给数组元素分配内存
- 先声明数组再初始化
格式:
数组名 = new 类型标识符[元素个数] (元素个数用整型变量)
int sorce[];
sorce = new int[10]; //分配10个内存
- 声明的同时进行初始化
格式:
类型标识符 数组名[ ] new 类型表舒服[元素个数]
或者
类型标识符[ ] 数组名 new 类型表舒服[元素个数]
int scorce[] = new int[10];
2)静态初始化:赋初值初始化数组
在声明数组的同时,给数组元素赋初值
格式:类型标识符 数组名[ ]={初值表}
int scoce[]={65,34,78,81,56,92,56,87,90,77}

3)数组的长度和下标
- 数组的长度
length - 元素的下标:
0~数组名 length-1
4)数组的输入及输出
- 输入用for循环;遍历输出用foreach
例题:
1)
Scanner sin = new Scanner(System.in);
int[] a1;
a1 = new int[5];
for(int i = 0;i<a1.length;i++)//输入用for循环
{
a1[i] = sin.nextInt();
}
for (int item:a1)//用foreach遍历
{
System.out.println(item);
}
for(int i = 5;i>=0;i--)
{
System.out.println(a1[i]);
}
2)对数组进行统计:输入10个非0整数,求他们的平均值,并分别统计这些数中正数和负数的个数
int a[] = new int[10];
Scanner sin = new Scanner(System.in);
int sum = 0,z = 0,f = 0;
for(int i = 0;i<10;i++) {
a[i] = sin.nextInt();
sum = sum +a[i];
if(a[i]>0) z++;
else f++;
}
System.out.println(sum);
System.out.println(z);
System.out.println(f);
3)求最大值和第二大值
int max = a[0];
int min = a[1];
if(min>max)
{
max = a[1];min = a[0];
}
for(int i = 2;i<n;i++)
{
if(a[i]>max) {
min = max;
max = a[i];
}
else if(a[i]>min)//a[i]<max
{
min =a[i];
}
System.out.println(max);//最大值
System.out.println(min);//第二大
}
4)输入n个整数,找出最大数
if(a[i]>max) max = a[i];
5)找出最大值下标
if(a[index]<a[i]) index = i;
5.2二维数组
格式:类型标识符 数组名[ ][ ] 或者类型名[ ] [ ] 数组名
例如:int a[ ] [ ];或者int [ ] [ ] a;
1)二维数组的初始化
- 用new初始化
1)先声明再初始化
数组名 = new 类型标识符 [行数] [列数]
例如:int a[ ][ ];或者a = new int [3][4];
2)生命的同时进行初始化
类型标识符 数组名[ ] [ ] = new 类型标识符 [行数] [列数]
类型标识符[ ] [ ] 数组名 = new 类型标识符 [行数] [列数]
例如:int a [ ] [ ] = new int [3][4]
2)二维数组的行数和列数
int a[ ][ ] = new int [3][4];
行数:a.length 3
列数:
第 i 行:a[i].length 4
Scanner sin = new Scanner(System.in);
int a[][] = new int[3][]; //输入9个
//a[0],a[1],a[2]
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];
for(int i = 0;i<a.length;i++) //输入数组
{
for(int j=0;j<a[i].length;j++)
{
a[i][j]=sin.nextInt();
}
}
for(int[] a1:a) //输出数组
{
for(int item:a1)
{
System.out.print(item+" ");
}
System.out.println();
}

3)赋初值初始化二维数组
类型标识符 数组名 [ ] [ ] ={{初值表},{初值表}……,{初值表}};
例如:
int a [ ] [ ] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
4)二维数组的输入和输出
输入:
Scanner sin = new Scanner(System.in);
int a[][] = new int [2][3],i,j;
for(i=0;i<2;i++) //i<a.length
{
for(j=0;j<3;j++) //j<a[i].length
{
a[i][j]=sin.nextInt();
}
}
输出
for(i=0;i<2;i++)
for(j=0;j<3;j++)
System.out.print(a[i][j]);
System.out.println;
5.3 字符串
1)字符串变量的创建
- String<变量名>;
<变量名>=new String("字符串");
例如:
String s;
s = new String("Hello");
- String <变量名>=new String("字符串");
- String<变量名> = " 字符串 "
2) String类的常用方法
调用java定义的格式
<字符串变量名>.<方法名>