Java语言基础
2.1 标识符与关键字
2.2 基本数据类型
2.3 变量与常量
2.4 运算符与表达式
2.5 流程控制
2.6 数组
2.7 字符串
2.1 标识符与关键字
基本符号集,Unicode 字符集,16位数字符号,0 1 2 3 4 5 6 7 8 9
字母符号,a b c d e f g h i j k l m n o p q r s t u v w x y z
ABCDEFGHIJKLMNOPQRSTUVWXYZ
其它符号,~!@$_&| ( ) {} [ ] + - * \ % / ^ =,.,;,? < >?
关键字,专用词汇
标识符,事物名称
注释,解释语句在程序中的含义
分隔符,标点符号
例子标识符与关键字例子
public class Digsum3
{
public static void main(String args[])
{
int n=123,a=0,b=0,c=0,digsum=0;
a = n % 10; //个位
b = (n%100) /10; //十位
c = n / 100; //百位
digsum=a+b+c;
System.out.println("Digsum("+n+") = "+digsum);
}
}
2.2 基本数据类型
数据:对象、事物
数据类型:
单间类型:原子
引用类型:由多种类型构成的类型
整型:
浮点型:实数
布尔型:布尔
字符型:转义序列,字符串( String)
2.3 变量与常量
变量:存储单元
三要素:名字、类型和值
变量声明
变量初始化
常量
二要素:名字、类型
2.4 运算符与表达式
2.4.1 赋值
1 赋值运算 =
2 注意事项
3 赋值相容
4 强制类型转换
2.4.2 运算符
2.4.3 表达式
2.4.2 运算符
1,算术运算符 ( 1)
一元 运算符 ( 2)二元 运算符
2,位运算符
3,关系运算符
4,布尔运算符
5,其它运算符
6,运算符的优先级算术运算符
( 1)一元 运算符
+,-,++,--
注意:前,后,简单变量
( 2)二元 运算符
+,-,*,/,%
注意:结果的符号与精度
例 2.1 编写求一个三位数的数字和程序例 2.1 求一个三位数的数字和程序
1,给一三位数 n,123
2,求其个位数 a,n模 10
3,求其十位数 b,(n模 100)整除以 10
4,求其百位数 c,n整除以 100
5,求 a,b,c之和 digsum,a+b+c
6,报告答案,6
例 2.1 三位数的数字和程序(续)
public class Digsum3
{
public static void main(String args[])
{
int n=123,a=0,b=0,c=0,digsum=0;
a = n % 10; //个位
b = (n%100) /10; //十位
c = n / 100; //百位
digsum=a+b+c;
System.out.println("Digsum("+n+") = "+digsum);
}
}
例 2.2 求圆面积 area=?r2
public class Circle_area
{
public static void main(String args[])
{
final float PI=3.14f;
float r=2.5f,area;
area=PI*r*r;
System.out.println("Area("+r+") = "+area);
}
}
位运算符
非( ~)、与( &)、或 (|)、异或( ^)、
右移( >>)、左移( <<),0填充右移
( >>>)
注意:只限于 int 型关系运算符
==,!=,>,>=,<,<=
注意,1、结果为布尔值。
2、字符值的大小由其 Unicode码的大小决定。
布尔运算符
逻辑与( &)、逻辑或( |)、逻辑非
( !)、逻辑异或( ^)、条件与( &&)、
条件或( ||)
短路计算
例 2.3 判闰年例 2.3 判闰年
public class Leap_boolean
{
public static void main(String args[])
{
int year=2002;
boolean leap=false;
leap = (year%400==0)| (year%100!=0) & (year%4==0);
System.out.println(year+" is a leap year,"+leap);
}
}
其它运算符
1,赋值运算符与其它运算符的简捷使用方法
2,运算符 []和()
3,字符串合并运算符 +
4,三元条件运算符?,
5,对象运算符 instanceof
6,强制类型转换符()
7,点运算符,
2.4.3 表达式
组成:操作数、运算符、圆括号
圆括号可嵌套:先内后外
2.5 流程控制
语句
2.5.1 程序控制结构
1,顺序结构
2,分支结构
3,循环结构
2.5.2 分支语句
2.5.3 循环语句
2.5.4 转向语句
2.5.2 分支语句
引入:求两个整数中的最大值和最小值
if 语句
1,if 语句的形式定义例 2.4 找出三个整数中的最大值和最小值
2,复合条件
3,if语句的嵌套例 2.5 将三个整数按从小到大的顺序输出
switch 语句求最大值和最小值
已知:三个整数 a,b,c,求它们的最大值 max和最小值 min。
求最大值 max
求 a,b的最大值 max;
求 c,max最大值存入 max;
求最小值 min
求 a,b的最小值 min;
求 c,mix最小值存入 min;
public class Max3if
{
public static void main(String args[])
{
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);
}
}
将三个整数按从小到大排序设三个整数为 a,b,c,则排序情况为:
a<b a>=b
b<c b>=c a<c a>=c
abc a<c a>=c bac c<b c>=b
acb cab cba bca
public class Max3abc
{
public static void main(String args[])
{
int a=2,b=1,c=3;
System.out.print(“Order:,); //不换行
if (a<b)
if (b<c) //a<b<c
System.out.println(a+" "+b+" "+c);
else //(b>=c) & (a<b)
if (a<c) //a<c<=b
System.out.println(a+" "+c+" "+b);
else //b>a>=c
System.out.println(c+" "+a+" "+b);
else //a>=b
if (a<c) //c>a>=b
System.out.println(b+" "+a+" "+c);
else //(a>=b) & (a>=c)
if (c<b) //c<b<=a
System.out.println(c+" "+b+" "+a);
else //a>=c>=b
System.out.println(b+" "+c+" "+a);
}
}
switch 语句
多路分支
switch 语句的语法
switch 语句的语义
注意事项
例 2.6 显示星期几对应的英文字符串。
public class Week1
{
public static void main(String args[])
{
int week=1;
System.out.print("week = "+week+" ");
switch (week)
{
case 0,System.out.println("Sunday"); break;
case 1,System.out.println("Monday"); break;
case 2,System.out.println("Tuesday"); break;
case 3,System.out.println("Wednesday");break;
case 4,System.out.println("Thursday"); break;
case 5,System.out.println("Friday"); break;
case 6,System.out.println("Saturday"); break;
default,System.out.println("Data Error!");
}
}
}
2.5.3 循环语句
1,引入,S=?i
2,for 语句
3,while 语句
4,do-while 语句
5,多重循环
for 语句
语法
语义(图 2.4)
例 2.7 求 1~10的累加和。
注意:循环边界。
思考:求 n~m的累加和。
例 2.8 求一个日期(年、月、日)对应的是星期几。
注意,1.switch语句的语义。
2.语句的嵌套。
public class Sum_for
{
public static void main(String args[])
{
int i=1,n=10,s=0;
for (i=1;i<=n;i++)
s = s + i;
System.out.println("Sum = 1+...+"+n+" = "+s);
//i递减
s = 0;
System.out.print("Sum = ");
for (i=n;i>1;i--)
{
s += i;
System.out.print(i+"+");
}
System.out.println(i+" = "+(s+i));
}
}
while 语句
语法
语义
注意,1.循环变量的初值。
2.循环变量的改变。
3.死循环。
4.与 for语句的比较。
例 2.9 计算 Fibonacci序列。
思考:一次输出一个数 或 改用 for语句。
public class Fib_while
{
public static void main(String args[])
{
final int MAX = 20;
int i=0,j=1,k=0;
while (k<MAX)
{
System.out.print(" "+i+" "+j);
i = i + j;
j = i + j;
k = k + 2;
}
System.out.println();
}
}
do-while 语句
语法
语义
注意,1.循环变量的初值。
2.循环变量的改变。
3.死循环。
4.与 for和 while语句的比较。
例 2.10 用辗转相除法求两个整数的最大公因数。
思考:如果 a,b中有负数。
public class Gcd_dowhile
{
public static void main(String args[])
{
int a=12,b=18,k=0;
System.out.print("Gcd("+a+","+b+")=");
do
{
k = a % b;
a = b;
b = k;
} while (k!=0);
System.out.println(a);
}
}
多重循环
例 2.11 输出九九乘法表 。
思考,1.列对齐。
2.输出完全九九乘法表。
例 2.12 求 100以内的素数。
整体思想,依次从 3~100中取一奇数 k,判断 k是否为素数,若是,则输出。
判断 k是否为素数的思想,依次从 3~sqrt(k)中取一奇数 j,判断是否能被 k除尽,若能,则非素数。
public class Mul99
{
public static void main(String args[])
{
int i,j,n=9;
for (i=1;i<=n;i++)
{
for (j=1;j<=i;j++)
System.out.print(" "+i*j);
System.out.println();
}
}
}
public class Prime_while
{
public static void main(String args[])
{
final int MAX=100;
int j,k,n;
System.out.println("All primes in 2.."+MAX+" are,");
System.out.print("2");
n=1; //素数个数
k=3; //从最小奇数开始测试,所有偶数不需测试
do
{
//判断 k是否为素数,若是,则输出。
k=k+2; //测试下一个奇数是否是素数
} while(k<MAX);
System.out.println("\nn="+n);
}
}
判断 k是否为素数,若是,则输出
j=3;
while ((j<=Math.sqrt(k)) && (k % j!=0))
j=j+2;
if (j> Math.sqrt(k))
{
System.out.print("\t"+k);
n++;
if (n%10==0)
System.out.println();
}
2.5.4 转向语句
1,break语句
2,continue语句
3,return语句
2.6 数组
引入,电子系 04级 1~5班 Java成绩
定义
数组名、数组元素、下标与维数
2.6.1 一维数组
2.6.2 二维数组
2.6.3 不规则的多维数组电子系 04级 1~5班 Java成绩
Dep04 1 2 3 4 5 6 7 8 9 … 40
Class1 71 82 93 65 75 76 88 69 99 … 80
Class2 91 88 77 90 80 76 98 74 86 … 89
Class3 80 76 98 74 86 91 88 77 90 … 76
Class4 98 74 86 91 88 77 80 76 98 … 66
Class5 86 91 88 77 80 88 77 80 76 … 96
2.6.1 一维数组
声明一维数组变量:引用类型
使用 new为数组分配空间
声明时为数组赋初值
数组元素的访问格式(名称)
数组元素的运算
数组的长度注意,1.元素序号 =下标 +1
2.最大下标 =长度 -1=最大序号 -1
例 2.13 求最大值与最小值
随机给定一组整数,存入数组 table,选出最大值 max与最小值 min。
思想:
1,max与 min赋初值 table[0];
2,逐次与 table[i]比较,若 table[i] >
max,则 max=table[i];若 table[i] < min,则
min=table[i];
程序,p38例 2.13
final int SIZE = 10; //常量
int table[] = new int [SIZE];
int i,max,min;
for (i=0;i<table.length;i++)
table[i] = (int) (Math.random()*100); //产生随机数
System.out.print("table,"); //输出一维数组
for (i=0;i<table.length;i++)
System.out.print(" "+table[i]);
System.out.println();
max = table[0];
min = table[0];
for (i=1;i<table.length;i++)
{
if (table[i]>max) max = table[i];
if (table[i]<min) min = table[i];
}
例 2.14 用数组计算 Fibonacci序列
final int SIZE = 25;
int fib[] = new int [SIZE];
int i,n=20;
fib[0]=0;
fib[1]=1;
for (i=2;i<n;i++)
fib[i] = fib[i-1] + fib[i-2];
for (i=0;i<fib.length;i++) //输出一维数组
System.out.print(" "+fib[i]);
System.out.println();
例 2.15,筛选法,求素数
整体思想,依次从 3~100中取一奇数 k,
判断 k是否为素数,若是,则输出。
判断 k是否为素数的思想,依次从已求出的 n个素数 (prime[0]~prime[n-1])中取一素数 prime[j],判断是否能被 k除尽,若能,
则非素数。
程序,p40~41
2.6.2 二维数组
多维数组的概念
二维数组的声明
二维数组的初始化
二维数组的访问
例 2.16 显示螺旋方阵。
例 2.17 显示幻方阵。
例 2.16 显示螺旋方阵
外层循环一次转一圈,共循环( SIZE+1)
/2次。
内层一个循环生成一条边。
程序,p42
注意:
1.寻找循环规律。
2.确定循环边界。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1
1 2
4 3
1 2 3
8 9 4
7 6 5
显示螺旋方阵核心程序
m=(n+1)/2; //m:总旋转圈数
for (i=0;i<m;i++) //i:圈数 -1
{
for (j=i;j<=n-i-1;j++) // 顶边,从左到右,行不变列变
mat[i][j]=++k;
for (j=i+1;j<=n-i-1;j++) // 右边,从上到下,行变列不变
mat[j][n-i-1]=++k;
for (j=n-i-2;j>=i;j--) // 底边,从右到左,行不变列变
mat[n-i-1][j]=++k;
for (j=n-i-2;j>=i+1;j--) // 左边,从下到上,行变列不变
mat[j][i]=++k;
}
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
例 2.17 显示幻方阵
int i=0,j,k,n; //i:行,j:列,k:对应数,n:阶
n=SIZE;
j=n/2; //第 1个数在第 1行中间位置
for (k=1;k<=n*n;k++)
{
mat[i][j]=k;
if (k % n == 0) //对角线已满
i = (i+1) % n ; //向下一行
else {
i = (i-1+n) % n ; //向右上方
j = (j+1) % n;
}
}
2.6.3 不规则的多维数组
不规则的二维数组:每行元素个数不等,先定义行数,
再定义每行中的列数
例 2.18 输出杨辉三角。
for (i=0;i<n;i++)
{
mat[i]= new int [i+1]; //指定 mat[i]的元素个数
mat[i][0]=1;
mat[i][i]=1;
for (j=1;j<i;j++)
mat[i][j]=mat[i-1][j-1]+mat[i-1][j];
}
2.7 字符串
声明字符串变量 String
字符串运算,=,+
String类的常用方法
命令行参数
例 2.19 判断回文字符串 。
门迎喜气喜迎门室满春风春满室
public class Strmethods
{
public static void main(String args[])
{
String s="Hello";
System.out.println("s="+s);
System.out.println("s.length()="+s.length());
String t="Hello";
System.out.println("t="+t);
System.out.println("s==t "+(s==t));
System.out.println("s.equals(t)="+s.equals(t));
s=s.concat(" Class!");
System.out.println("s.concat("+"\""+" Class!"+"\""+")="+s);
System.out.println("s="+s);
System.out.println("s.substring(6)="+s.substring(6));
System.out.println("s.substring(4,7)="+s.substring(4,7));
System.out.println("s.charAt(4)="+s.charAt(4));
System.out.println("s.indexOf("+"\""+"C"+"\""+")="+s.indexOf("C"));
System.out.println("s.replace(' ',',')="+s.replace(' ',','));
}
}
s=Hello
s.length()=5
t=Hello
s==t true
s.equals(t)=true
s.concat(" Class!")=Hello Class!
s=Hello Class!
s.substring(6)= Class!
s.substring(4,7)=o C
s.charAt(4)=o
s.indexOf("C")=6
s.replace(' ',',')= Hello,Class!
public class Rotor
{
public static void main(String args[])
{
String str="rotor";
int i=0,n;
boolean yes=true;
if (args.length>0)
str=args[0];
System.out.println("str="+str);
n=str.length();
char ch1,ch2;
while (yes && (i<n/2) ) //算法一
{
ch1=str.charAt(i);
ch2=str.charAt(n-i-1);
System.out.println("ch1="+ch1+" ch2="+ch2);
if (ch1==ch2)
i++;
else
yes=false;
}
System.out.println("算法一,"+yes);
String temp="",sub1;
for (i=0;i<n;i++) //算法二
{
sub1=str.substring(i,i+1);
temp=sub1+temp;
}
System.out.println("temp="+temp);
System.out.println("算法二,
"+str.equals(temp));
}
}