第二讲 Java中的数据和运算
主要内容
Java输入输出的初步运用
Java的标识符和保留字
Java的基本数据类型
Java基本数据类型转换
Java中的运算符
Java程序的输入输出
问题:读取一个整数,输出该数的平方
算法
步骤一:读取一个整数字符串
步骤二:将字符串转换成整数Integer.parseInt(s)
步骤三:运算处理
步骤四:输出结果
程序清单[Square.java]
import javax.swing.*;
public class Square{
public static void main(String args[]){
String s=JOptionPane.showInputDialog("请输入一个整数:");
int n=Integer.parseInt(s);
int m=n*n;
System.out.println("你输入的数是:"+s);
System.out.println("其平方值是:"+m);
}
}
程序解析
²JOptionPane是javax.swing包中的类
²showInputDialog是JOptionPane的方法:显示一个输入对话框
²System.out.println(…):显示输出。
[注意]可以“+”号连接不同类型数据。
思考
1.如何交互输入数据?
2.用JoptionPane的showInputMessage方法输入的是什么类型的数据?
3.一个数字组成的字符串如何转化成整数?
4.Java程序如何向字符窗口输出数据?
练习:输入一个圆半径,输出其面积。
Java的标识符和保留字
标识符的定义规则
在Java程序中,包、类、属性、方法、对象、变量、符号常量、数组等等都要有名称。这名称即为“标识符”。
标识符的定义规则:
²由字母、数字、_和$组成
²开头字符必须是字母、下划线或$(不可以数字开头)
[注意]大小写敏感。myname与Myname是两个不同的标识符。
定义三原则:见名知义、规范大小写、不可用Java保留字
练习:从以下字符串中挑出合法的Java标识符。
2tow
Mary5
else
Hello world
bob
do
cheese_eat
Hello!
保留字(关键字)
保留字(reserved word):是Java语言规定了特定含义的标识符。
对于保留字,用户只能按照系统规定的方式使用,不能自行定义。
保留字一律用小写字母表示。
abstract
for
private
break
finally
return
byte
final
static
boolean
if
switch
catch
import
short
case
implements
synchronized
class
instanceof
super
char
interface
try
continue
int
true
do
length
this
default
long
throw
double
new
threadsafe
else
null
throws
extends
native
transient
false
package
void
final
public
while
float
protected
……
Java的基本数据类型
指定变量的数据类型可确定变量所需分配的内存尺寸。
char ch;
float x;
int a,b,c;
布尔型——boolean
布尔型常量:true和false (它们不对应于任何整数值!)
布尔型变量的定义如:boolean b=true;
字符类型——char
字符常量:用单引号括起来的一个字符,如‘a’,‘A’;
与C相同,Java也提供转义字符,如下图:
转义字符
描述
\ddd
1到3位8进制数所表示的字符(ddd)
\uxxxx
1到4位16进制数所表示的字符(xxxx)
如\u0061表示’a’
\'\"
单引号字符和双引号字符
\\
反斜杠
\r
回车
\n
换行
\t
横向跳格
\f
走纸换页
\b
退格
字符型变量的定义如:char c=‘a’;
说明:Java中的字符型数据是16位无符号型数据,它采纳Unicode集。
练习:编程测试16进制数41,51对应的字符,并相隔一个tab位输出。
整型
整型常量可用三种进制表示:
十进制整数:如:123,-456,0
八进制整数:0ddd(注意:ddd<=377)
如0123表示十进制数83,-011表示十进制数-9。
十六进制整数:以0x或0X开头
如0x123表示十进制数291,-0X12表示十进制数-18。
练习:分析程序运行结果。
public class DataTest{
public static void main(String[] args){
int x=010;
System.out.println("x="+x);
int y=0x10;
System.out.println("y="+y);
}
}
整型变量有byte、short、int、long
数据类型
字节数
所占位数
数的范围
byte
1
8
-27~27-1
short
2
16
-215~215-1
int
4
32
-231~231-1
long
8
64
-263~263-1
注意:在进行处理时应注意变量的范围
byte x=129;出错!
byte x=(byte)129;结果x的取值是-127
原因:整数在内存中以补码保存。129—10000001-- -127
思考
1.在Java中一个字符数据开销字节数?
2.在Java中怎样给出一个八进制整常数?
3.在Java中怎样给出一个十六进制整常数?
4.在Java中如何输出数据?
5.Java表达整型的数据类型与C相比异同点?
浮点型(实型)
实型常量有两种表示形式
²十进制数形式:由数字和小数点组成,如0.123, .123, 123.,123.0
²科学计数法形式:如:123e3或123E3
其中e或E之前必须有数字,且e或E后面的指数必须为整数。
说明:单精度常量以f或F为后缀。双精度常量以d或D作后缀(默认)。
实型变量
数据类型
所占位数
数的范围
float
32
3.4e-038~3.4e+038
double
64
1.7e-308~1.7e+308
字符串型
字符串常量是用双引号作为起止符的字符序列。如:”Hello”
字符串变量定义如:String s1,s2;String s1=”Hello”;
练习:试分析下面程序中的各变量
public class Assign {
public static void main(String[] args){
intx ,y ;
floatz = 1.234f ;
doublew = 1.234 ;
booleanflag = true ;
charc ;
Stringstr ;
请加入语句:
在第一行输出x、y、z、w的值
在第二行输出c、flag、str的值
c = 'A';
str ="bye";
x = 12 ;
y = 300;
}
}
思考
1.如何给出一个单精度常数?
2.字符常量和字符串的定界符分别是什么?
3.在Java中一个int型数据开销字节数?
4.在Java中用什么类型的变量存储一个逻辑值?
Java基本数据类型转换
自动类型转换
整型、实型、字符型数据可以混合运算。步骤:先转化为同一类型,再运算。
转换总是从低级到高级,按下图所示:
低--------------------------------------------->高
byte,short,charàintàlongàfloatàdouble
思考
1、x+y的值是什么类型?
2、x+y+z的值是什么类型?
3、a+b的值是什么类型?
4、a-x-y的值是什么类型?
5、x+c是值是什么类型?
int x;
byte y;
long z;
float a;
double b;
char c;
强制类型转换
高级数据要转换成低级数据,需用到强制类型转换,如:
y=(byte)x;
x=(int)(a+b);
a=(float)b;
阅读程序,分析运行情况
public class CharandInt1{
public static void main(String[] aa){
char y='a';
System.out.println(y);
}
}
public class CharandInt2{
public static void main(String[] aa){
int x=2;
char y='a';
System.out.println(y+x);
}
}
[思考]如何修改程序使之输出结果为”c”?
class Test1{
public static void main(String[] aa){
char a='\u0041';
int b=a;
float c=b;
double d=c;
System.out.println(a+"\t"+b+"\t"+c+"\t"+d);
}
}
class Test2{
public static void main(String[] aa){
double e=65.5;
float f=e;
int g=f;
char h=g;
System.out.println(e+"\t"+f+"\t"+g+"\t"+h);
}
}
Java中的运算符
算术运算符
双目运算符
运算符
示例
含义
+
op1 + op2
加法运算
-
op1 - op2
减法运算
*
op1 * op2
乘法运算
/
op1 / op2
除法运算
%
op1 % op2
模运算(取余)
说明:
1)JAVA对“+”运算进行了扩展,字符串连接、数字与字符串连接
如: String s;
s="s="+4*5;
2) JAVA中的"%"取模运算,可对浮点数进行。符号同第一个操作数。
如52.3%10à2.3
class TestMod{
public static void main(String[] aa){
System.out.println(10%3);
System.out.println(10%-3);
System.out.println(-10%3);
System.out.println(-10%-3);
}
}
自增自减运算符
运算符
示例
含义
前缀++
++ x
加1后再引用
前缀--
-- x
减1后再引用
后缀++
x ++
先引用,再加1
后缀--
x --
先引用,再减1
说明:
1) ++与--运算符只能用于变量。错例:5++,++(a+b)
2) ++与--运算时结合方向自右向左。-i++相当于-(i++)
3) 两个+号(或-号)之间不能有空格
4) 应避免使用复杂的表达式
算术表达式:用算术运算符与括号将运算对象连接起来的、符合Java规则的式子。
运算级别:先*、/、%后+、-,“左结合”原则。如:n * -2, -n / -2
赋值运算符
基本赋值运算
形式: =
作用:将右边表达式的值计算赋给左边的变量。
赋值语句:赋值表达式加上分号即可。
public class S3 {
public static void main(String[] args){
int a;
int b;
int c=(a=5)+(b=13);
System.out.println(a+""+b+""+c);
}
}
复合赋值运算
形式:=
à=()
分别举例:
运算符
示例
含义
+=
count += 2
count = count + 2
-=
count -= 2
count = count - 2
*=
count *= 2
count = count * 2
/=
count /= 2
count = count / 2
类型转换
赋值时如果赋值号两边类型不同,则有如下两种可能:
²自动转换。条件:等号右式类型比左边变量类型简单。
²出错。出错信息: possible loss of precision
关系运算符
运算符
示例
含义
==
op1 == op2
等于
!=
op1 != op2
不等于
<
op1 < op2
小于
>
op1 > op2
大于
<=
op1 <= op2
小于等于
>=
op1 >= op2
大于等于
注意:
[1] "= ="不要写成"="
关系表达式
op1 op2
说明:
1)Java中,任何类型的数据(包括简单类型和复合类型),都可以通过"=="或"!="来比较是否相等。
2)浮点数的比较小心慎用
3)不同类型的数值量以及字符之间可以进行各种大小比较
class T1{
public static void main(String[] aa){
char x='4';
int y=4;
if (x==y)System.out.println(y);
else System.out.println((char)y);
}
}
4)关系运算的结果是true和false(而不是1或0、T或F!)
5)关系运算符优先级低于算术运算符,高于赋值运算符
逻辑运算符
运算符
示例
含义
&&
op1 && op2
逻辑与
||
op1 || op2
逻辑或
!
! op
逻辑非
1)逻辑运算的截断性。
class Test {
public static void main(String[] args){
int f=0;
if (f!=0 && 3/f>5)System.out.println("111");
else System.out.println("000");
}
}
思考:表达式f!=0 && 3/f>5是否会发生除0溢出错误?
2)优先级如下图示(从高到低)
!
算术运算
关系运算
&&
||
=
条件运算符(? :)
e1? e2:e3
意义:若e1为真,则取值e2;为假取值e3。
例:
int a=1;
int b=4;
int max=a>b?a:b;
说明:
1)e1的类型必须为boolean型
2)e2与e3有相同的数据类型
练习:输入三个整数,输出其中的最大数(MaxValue.java)。
Java运算符的优先级
运算符的优先级
()
高
++ -- !单目+单目-
* / %
+ -
< > <= >=
= =!=
&&
||
? :
=+= -= *=/= %=
低
变量的作用域
即变量何时可访问,何时不能。有如下几个要点:
²方法中声明的变量只在方法内访问
²花括号内的变量在花括号里,及其内含的花括号里可访问
class T1{
public static void main(String[] aa){
{
int x=1;
System.out.println(x);
x++;
}
System.out.println(x);
}
}
练习:输入一个半径(实数),输出圆面积。
import javax.swing.*;
public class CircleArea{
public static void main(String[] args){
String s=JOptionPane.showInputDialog("请输入半径:");
float r=Float.parseFloat(s);
System.out.println(a);
}
}
实验一
1.调试一个例程,理解Java程序的编辑、编译和执行方法。试观察源程序文件、字节码文件的扩展名。
2.读取一个实型数,输出该数的平方。
3.输入一个姓名,输出“Welcome, ”
4.分析和调试程序,初步理解日期信息的获取:
import java.util.*;
public class Day {
public static void main(String[] args){
Calendar c= Calendar.getInstance();
System.out.print("今天的日期是:");
int y=c.get(c.YEAR);
int m=c.get(c.MONTH)+1;
int d=c.get(c.DATE);
System.out.println(y+"-"+m+"-"+d);
}
}
5.仿照上题,输出当前时间。(HOUR,MINUTE,SECOND)。