项目 |
内容 |
《面向对象程序设计(java)》 |
https://home.cnblogs.com/u/nwnu-daizh/ |
这个作业的要求在哪里 |
https://www.cnblogs.com/nwnu-daizh/p/11475377.html |
作业学习目标 |
|
随笔博文正文内容包括:
第一部分:结合Java和C基础语法的异同比较,总结本周理论知识(30分)
1.标识符0标识符由字母、下划线、美元符号和数字组成,且第一个符号不能为数字。 标识符可用作:类名、对象名、变量名、方法名、数组名、文件名等。关键字关键字就是Java语言中已经被赋予特定意义的一些单词。常见有:class、public、try、catch、if、float、import、void等。关键字不做变量名。
2.注释
//:行注释。
/* */:段注释。
/** */:自动生成文档。
3.数据类型
整型:int,short,long byte。
int型 ,变量定义:int x;int height,age;对于int型变量,内存分配个4字节,占32位
short型 ,变量定义:short h;short m,n;对于short型变量,内存分配2个字节,占16位
long型 ,变量定义:long sum;long I,j.k;对于long型变量,内存分配8个字节,占64位
byte型 ,变量定义:byte w;byte x,y,z;对于byte型变量,内存分配个1字节,占8位
浮点型:float,double。
char类型。
布尔类型:Boolean。
4.变量
变量名必须是一个以字母开头并由字母或数字构成的序列,变量中的所有字符都是有意义的,并且大小写敏感,声明一个变量之后,必须用赋值语句对变量显式初始化。在java中不区分变量的声明与定义。
常量:在java中利用final指示常量,常量名使用全大写,可以使用关键字static final设置一个类常量,类常量的定义位于main方法的外部。
5.运算符
数学函数与常量:数学函数包含在Math类中。幂函数、三角函数、指数函数及它的反函数等。
Java还提供了两个常量:Math.PI、Math.E
若不想在数学方法名和常量名前加前缀“Math.”,可在源文件顶部加上以下代码即可:import static java.long.Math.*;
数据类型之间的转换:
大多数的数值转换是遵循优先级的关系自动完成的。
转换原则如下:
如果两个操作数中有一个是double类型的,则另一个将会转换成double类型。
否则,如果两个操作数中有一个是float类型的,另一个将会转换成float类型。
否则,如果两个操作数中有一个是long类型的,另一个将会转换成long类型。
否则,两个操作数都将转换成int类型。
强制类型转换:
强制类型转换的语法:
(目标类型)变量名
在进行强制类型转换时,当心丢失数据。
运算符:
运算符的优先级与结合性:
1. [ ]、() (方法调用) 从左到右
2 . ! ~ ++ -- +(一元) –(一元) ()(强制类型转换) new 从右到左
3 .* / % 从左到右
4.+ - 从左到右
5.<< >>(算术右移) >>>(逻辑右移) 从左到右
6.< <= > >= instanceof 从左到右
7.== != 从左到右
8.& 从左到右
9.^ 从左到右
10.| 从左到右
11.&& 从左到右
12.|| 从左到右
13.?: 从右到左
14.= += -= *= /= %= &= |= ^= <<= >>= >>>= 从右到左
6.字符串:
Java字符串是Unicode字符的序列,它是组织字符的基本数据结构,用法类似于字符数组。有内置的字符串类型,在标准Java类库中提供了一个Java预定义类String。在Java中,字符串被当作对象来处理。
程序中需要用到的字符串可以分为两大类:创建之后不会再做修改和变动的不可变字符串String类;创建之后允许再做更改和变化的构建字符串StringBuilder类。
字符串常量: 使用“”定义字符串。Java会自动为字符串常量生成一个String类的对象,所以可以直接初始化String对象。
7.输入输出:
读取输入:通过控制台进行输入时,需要构造一个Scanner对象,并与“标准输入流”System.in关联。Scanner in = new Scanner(System.in);Scanner类定义在java.util包中,因此使用时需将相应的包加载进来。由于Scanner类输入是可见的,所以不适用于从控制台读取密码。
格式化输出:使用System.out.print(x)将数值x输出到控制台上,这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x。
文件输入与输出:要想对文件进行读取,就需要一个用File对象构造一个Scanner对象;要想写入文件,就需要构造一个PrintWriter对象。
8.控制流程:
用{}把一些语句括起来就构成了一个语句。
控制语句(程序控制流程由这些语言确定)
if 、switch、for、while、do-while
9.大数值:
如果基本的整型和浮点型数据无法达到要求的精度,那么可以使用java.math包中的两个类,BigInteger和BigDecimal。这两个类可以操作任意长的数字。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点运算。
10.数组:
数组是一种数据结构,它是有序数据的集合,数组中的每个元素的数据类型都是相同的。对元素的确定是由数组名和它的下标实现的,如a[0]代表数组a的第一个元素,a[1]代表数组a的第二个元素,依次类推。
数组的声明:
一维数组格式:
数组元素类型 数组名字[];
数组元素类型[] 数组名字; //推荐使用
二维数组格式:
数组元素类型 数组名字[][];
数组元素类型[][] 数组名字;//推荐使用
其中数组元素类型可以为Java中的任意类型,包括基本类型和复合类型。与C/C++不同,Java在数组声明时并不为数组分配内存。在Java中,数组是独立的类,有自身的方法。一个数组是一个对象,它由基本数据类型组成。
数组的创建:数组声明后,要用new运算符为其分配内存空间,分配内存空间时必须指明数组的长度。格式如下:
数组名字=new 数组元素类型[个数]
数字数组创建后,所有数组元素自动初始化为0;boolean数组创建后数组元素初始化为false;对象数组初始化为null.数组创建后不能再更改大小。
数组的初始化:
一维数组的初始化:在声明数组的同时对数组的元素进行初始化,系统会自动按照所给的初值的个数,算出数组的长度,并分配相应的空间。在Java中,可以初始化一个匿名数组。
多维数组的初始化:系统会自动根据初始值的大小计算出数组的大小。Java语言中,二维数组被看作数组的数组,把数组当作对象来处理。
数组的操作:
数组拷贝:Java允许把一个数组变量拷贝给另一个变量时,两个变量都指向相同的数组。如果只是想把一个数组中的值拷贝给另一个变量,就要使用Arrays类的copyOf方法:int[] copiedGirl = Arrays. copyOf(girl,girl.length);通过这个方法可以用来增加数组的大小:girl = Array. copyOf(girl, 2*girl.length);
数组排序:调用java.util.Arrays类中的 sort方法,可对一个数字数组进行排序。该方法采用优化快速排序算法。
多维数组:多维数组将使用多个下标访问数组元素,它适合用于表示表格或更复杂的排列形式。
多维数组的传统循环控制:
for(int i = 0; i < balances.length; i++)
for(int j = 0; j < balances[i].length; j++)
do something with balances[i][j]
多维数组的for each循环控制:
for(double[] row: balances)
for(double value: row)
do something with value
在程序设计时,如果需要存储二维表格数据,其中每个数据的类型是一样的,可采用二维数组。对二维数组的每个元素赋值一般是通过嵌套的二重循环来进行。
不规则数组:Java可以使用不规则数组,即数组的每一行有不同的长度。在创建不规则数组时,从最高维开始分别为每一维数组分配空间。
数组总结:数组使用之前要确定大小,可以在程序中根据需要动态生成数组(如用表达式计算出大小)。一旦生成数组,大小不可改变。Java不支持变长数组。数组的属性—length : 数组元素的个数。Java中的数组作为一种对象类型,可以作为方法的参数,方法调用时传的是指向数组的引用。
第二部分:实验部分
实验名称:实验二 Java基本程序设计(1)
1. 实验目的:
(1)进一步熟悉命令行和IDE两种方式下java程序开发的基本步骤;
(2)掌握Eclipse集成开发环境下导入Java源程序的过程;
(3)掌握Java语言构造基本程序的数据类型、变量、运算符、各类表达式、输入输出、流程控制的基本语法;
(4)掌握Math类、String类、StringBuilder类的用法。
3. 实验步骤与内容:
实验1 程序互评(10分)
实验2 (5分)
程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
package
JavaTest;
public
class
Test {
public
static
void
main(String[] args) {
String s1=
"Hello!"
;
String s2=
"World"
;
String s3=s1+s2;
System.out.println(s3);
}
}
|
这个程序的运行结果如下图:
实验3 (5分)
程序代码如下:
1
2
3
4
5
6
7
8
9
10
|
package
JavaTest;
public
class
Test {
public
static
void
main(String[] args) {
StringBuilder s1=
new
StringBuilder(
" Hello! "
);
StringBuilder s2=s1;
System.out.println(s2.deleteCharAt(
6
));
}
}
|
这个程序的运行结果如下图:
实验4 (5分)
程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package
JavaTest;
public
class
Test {
public
static
void
main(String[] args) {
if
(args[
0
].equals(
"-h"
))
System.out.print(
"Hello"
);
else
if
(args[
0
].equals(
"-g"
))
System.out.print(
"goodbye,"
);
for
(
int
i=
1
;i
System.out.print(
" "
+args[i]);
System.out.println(
"!"
);
}
}
|
程序运行结果如下图:
实验5 java程序导入(5分)
程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import
java.util.*;
/**
* This program demonstrates console input.
* @version 1.10 2004-02-10
* @author Cay Horstmann
*/
public
class
InputTest
{
public
static
void
main(String[] args)
{
Scanner in =
new
Scanner(System.in);
// get first input
System.out.print(
"What is your name? "
);
String name = in.nextLine();
// get second input
System.out.print(
"How old are you? "
);
int
age = in.nextInt();
// display output on console
System.out.println(
"Hello, "
+ name +
". Next year, you'll be "
+ (age +
1
));
}
}
|
这个程序的运行结果如下图:
实验6 文件读写程序测试(10分)
程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import
java.io.File;
import
java.io.FileNotFoundException;
import
java.io.PrintWriter;
import
java.util.Scanner;
import
java.util.Arrays;
public
class
WriteReadFileTest {
/**
* @param args
* @throws FileNotFoundException
*/
public
static
void
main(String[] args)
throws
FileNotFoundException {
//写入文件演示
PrintWriter out =
new
PrintWriter(
"myfile.txt"
);
out.println(
"姓名 高数 Java 数据结构 平均成绩 总成绩"
);
out.println(
"张三 20 30 40 0 0"
);
out.println(
"李四 50 60 70 0 0"
);
out.close();
//切记,输出完毕,需要close
//读入文件演示
Scanner in =
new
Scanner(
new
File(
"myfile.txt"
));
//为myfile.txt这个File创建一个扫描器in
int
number =
1
;
//行号
while
(in.hasNextLine()){
//判断扫描器是否还有下一行未读取,该循环把文件的每一行都读出
String line = in.nextLine();
//读出myfile.txt的下一行
System.out.println(
"第"
+(number++)+
"行的内容"
+
"="
+line);
Scanner linescanner =
new
Scanner(line);
//对每一行的内容建立一个扫描器
linescanner.useDelimiter(
" "
);
//使用空格作为分隔符
String name = linescanner.next();
String math = linescanner.next();
String java = linescanner.next();
String ds = linescanner.next();
String avg = linescanner.next();
String total = linescanner.next();
System.out.println(
"name="
+name+
" math="
+math+
" java="
+java+
" ds="
+ds+
" avg"
+avg+
" total="
+total);
}
in.close();
//读入完毕,最后需要对其进行close。
}
}
|
程序运行结果如下图:
实验7 (5分)
(1)程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import
java.util.*;
/**
* This program demonstrates a
* @version 1.20 2004-02-10
* @author Cay Horstmann
*/
public
class
Retirement
{
public
static
void
main(String[] args)
{
// read inputs
Scanner in =
new
Scanner(System.in);
System.out.print(
"How much money do you need to retire? "
);
double
goal = in.nextDouble();
System.out.print(
"How much money will you contribute every year? "
);
double
payment = in.nextDouble();
System.out.print(
"Interest rate in %: "
);
double
interestRate = in.nextDouble();
double
balance =
0
;
int
years =
0
;
// update account balance while goal isn't reached
while
(balance < goal)
{
// add this year's payment and interest
balance += payment;
double
interest = balance * interestRate /
100
;
balance += interest;
years++;
}
System.out.println(
"You can retire in "
+ years +
" years."
);
}
}
|
这个程序运行结果如下图:
(2)程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import
java.util.*;
/**
* This program demonstrates a
* @version 1.20 2004-02-10
* @author Cay Horstmann
*/
public
class
Retirement2
{
public
static
void
main(String[] args)
{
Scanner in =
new
Scanner(System.in);
System.out.print(
"How much money will you contribute every year? "
);
double
payment = in.nextDouble();
System.out.print(
"Interest rate in %: "
);
double
interestRate = in.nextDouble();
double
balance =
0
;
int
year =
0
;
String input;
// update account balance while user isn't ready to retire
do
{
// add this year's payment and interest
balance += payment;
double
interest = balance * interestRate /
100
;
balance += interest;
year++;
// print current balance
System.out.printf(
"After year %d, your balance is %,.2f%n"
, year, balance);
// ask if ready to retire and get input
System.out.print(
"Ready to retire? (Y/N) "
);
input = in.next();
}
while
(input.equals(
"N"
));
}
}
|
这个程序运行结果如下图:
实验8 (5分)
程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import
java.util.*;
/**
* This program demonstrates a
* @version 1.20 2004-02-10
* @author Cay Horstmann
*/
public
class
LotteryOdds
{
public
static
void
main(String[] args)
{
Scanner in =
new
Scanner(System.in);
System.out.print(
"How many numbers do you need to draw? "
);
int
k = in.nextInt();
System.out.print(
"What is the highest number you can draw? "
);
int
n = in.nextInt();
/*
* compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
*/
int
lotteryOdds =
1
;
for
(
int
i =
1
; i <= k; i++)
lotteryOdds = lotteryOdds * (n - i +
1
) / i;
System.out.println(
"Your odds are 1 in "
+ lotteryOdds +
". Good luck!"
);
}
}
|
程序运行结果如下图:
4. 实验总结:(10分)
通过第三章的学习,了解到了许多java编程中的注释,数据类型:Java有8种数据类型,其中4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。运算符,变量,输入输出,字符串创建之后不会再做修改和变动的不可变字符串String类;创建之后允许再做更改和变化的构建字符串StringBuilder类,大数值,数组。