201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结
丁宣元 《面向对象程序设计(java)》第二周学习总结
正文开头
项目 |
内容 |
这个作业属于哪个课程 |
https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 |
https://www.cnblogs.com/nwnu-daizh/p/11475377.html |
作业学习目标 |
|
第一部分:结合Java和C基础语法的异同比较,总结本周理论知识
一.基础知识(不同已标出)
1.标识符
(1)由字母、下划线、美元符号,数字构成,第一个符号不能为数字。eg:$88,num,程序名
(2)标识符可用作:类名、对象名、变量名、方法名、数据名、文件名等。
2.关键字
(1)被赋予特定意义的一些单词。
(2)在Java中常见的关键字有:class(类,java与c不同)、public(java与c不同)、try(java与c不同)、catch(java与c不同)、if、float、import(导入,java与c不同)、void等。关键字不做变量名
3.注释
(1)// 注释:由//一直到此行结束。
(2)/*和*/ 定义一个注释块。
(3)/**开始,*/结束 ,可用来自动产生文档。(java与c不同)
二.数据类型
(1)Java是一种强数据类型。共八种
(2)分类:整数类型(int、short、long、byte)(byte字节 -128~127:java与c不同)int a;
浮点类型(float、double)
字符类型(char)
布尔类型(boolean):只有true,false(java与c不同)
(3)字符集:unicode字符编码集,跨语言跨平台
(4)转义字符:\u:表示unicode值 \n:换行 \n(换行) \r(回车) \"(双引号) \'(单引号) \\(反斜杠)
三.变量
(1)每一个变量属于一种类型。
(2) 一行可以声明多个变量,要进行初始化。
(3)不能在同一作用域内声明两个同名的变量。
变量名大小写敏感。
四.常量
(1)关键字final指示常量。(java与c不同)
(2)关键字final只能对变量赋一次值。
(3)若某个常量在一个类中的多个方法中使用,称为类常量。用关键字static final声明。eg:public static final a=2.14;
五.运算符
(1)运算符:算术运算符、自增运算符与自减运算符、关系运算符、逻辑运算符和位运算符。
(2) 两个特别运算符:(java与c不同)
– new创建对象的运算符。
– Instanceof返回一个布尔值来指出某个对象是否是一个特定类或者是它的子类的一个实例。
(3)运算符的优先级与结合性(重点,PPT)
(4) 数学函数:Math类。
幂函数 三角函数 指数函数 反函数
常量:Math.PI Math.E(java与c不同)
可直接在文件顶部加入import static java.lang.Math.* (java与c不同)
(5)类型转换
语法: (目标类型)变量名
六.字符串(java与c不同)
a.在Java中,字符串被当作对象来处理。
b.两大类:
创建之后不会再做修改和变动的不可变字符串String类
创建之后允许再做更改和变化的构建字符串StringBuilder类
c. 使用“ ”定义字符串(英文)
d.String类的构造
e.基本操作:获得子串
串连接+ 字符串长度:String的length方法 字符串相等:equals
七.输入输出
a.通过控制台进行输入时,需要构造一个Scanner对象,并与“标准输入流”System.in关联。
Scannerin=newScanner(System.in);
b.输入输出:
· 读取,用File对象构造一个Scanner对象。Scanner in=new Scanner(new File("myFile.txt"))
写入文件,构造一个PrintWriter对象,在构造器中,需要需提供文件名。
八. 控制流程
1.控制语句(程序控制流程由这些控制语句确定)
a)if、switch(case后注意break)
for、while、do-while
b)中断语句
break:结束全部 continue:结束本次,下次开始
c)返回语句:return ;
九. 大数值
a)如果基本的整型和浮点型数据无法达到要求的精度,可以使用java.math包中的两个类, BigInteger和BigDecimal。
b)BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点运算
十.数组
1.数组中的每一个元素的数据类型都是相同的。
2.数组的声明
一维数组格式:
数组元素类型 数组名字[];
数组元素类型[] 数组名字;
二维数组格式:
数组元素类型 数组名字[][];
数组元素类型[][] 数组名字;
定义的类来声明数组:Point[] line;
3.数组的创建:数组名字=new 数组元素类型[个数] c创建后不可改变大小。
4.java在数组声明时不为数组分配内存
5.数组拷贝,数组排序
第二部分:实验部分
1. 实验名称:实验二 Java基本程序设计(1)
2. 实验目的:
(1)进一步熟悉命令行和IDE两种方式下java程序开发的基本步骤;
(2)掌握Eclipse集成开发环境下导入Java源程序的过程;
(3)掌握Java语言构造基本程序的数据类型、变量、运算符、各类表达式、输入输出、流程控制的基本语法;
(4)掌握Math类、String类、StringBuilder类的用法。
3. 实验步骤与内容:
实验1 程序互评
(1)在本周二(9月3日)java课堂上,编写九九乘法表程序(第一周的作业)
(2)于周五(9月6日)实验课上进行互评
注:1.在编写过程中,出现很多问题。java基本框架没有记清楚,语法程序并没有完全清楚。下课后对这些不足进行了弥补。这种 考察方法提醒了我学习中的漏洞,改善学习方法存在的问题。注意细小的知识点,每一个问题都要多多思考,寻找问题。
2.在周五的实验课中,我借鉴了同学的程序。了解其他同学的思考方式,在为同学批阅的同时自我不断学习,发散思维。同时注意容易出错的单词。我印象最深的是java中的大小写,例如:String,S必须大写。这一点在翻转课堂的题目中也有明确的考察。(设置JDK的环境变量时classpath,path不区分大小写)在以后的学习中尤为要注意这一点。
实验二 编写包含以下代码片段的java应用程序,输出字符串类对象s3的值。
String s1=“Hello!”; String s2=“World”; String s3=s1+s2;
1.根据书P46String拼接内容,完成程序的完整编写。注意名字的大小写,输入字符串时加"",System.out.println(s3)中s3不加""。
public class PingJie { public static void main(String[] args){ //程序入口 String s1="Hello!"; //定义一个字符串s1,值为Hello! String s2="World!"; //定义一个字符串s2,值为World! String s3=s1+s2; //定义一个字符串s3,将s1和s2拼接起来,赋给s3 System.out.println(s3); //输出s3 } }
2.在eclipse中运行程序(点击要运行的程序,点开始暂停标志;或右击要运行的程序,Run as->java application运行此程序)
实验三 更改实验二中s1、s2、s3为StringBuilder类对象,观察程序运行结果并与实验2结果进行对比,理解String类对象与StringBuilder类对象的区别。
1.根据书P54StringBuilder构建字符串内容,完成程序的完整编写。
public class PinJie {
public static void main(String[] args){
StringBuilder s1=new StringBuilder("Hello!"); //利用字符串构建器StringBuilder,创建s1
StringBuilder s2=new StringBuilder("World!"); //利用字符串构建器StringBuilder,创建s2
StringBuilder s3=new StringBuilder().append(s1).append(s2);/*利用字符串构建器StringBuilder,创建s3,
用append方法拼接s1,s2*/
System.out.println(s3);
}
}
2.在eclipse中运行程序(点击要运行的程序,点开始暂停标志;或右击要运行的程序,Run as->java application运行此程序)
3.区别:String是常量,效率比较低,若有较短的字符串构建字符串,每次连接字符串都会构建一个新的String,耗时浪费空间。
StringBuilder可变,效率比较高,单线程。
二者结果一致。
实验四 在命令行方式下调试运行下列程序,理解java应用程序命令行参数的用法。
1.程序代码
public class Message { //怎么在命令行传参数(实验),要输入参数
public static void main(String[] args) {
if (args[0].equals("-h")) //如果为-h,执行下列语句
System.out.print("Hello");//打印hello
else if (args[0].equals("-g"))//如果为-g,执行下列语句
System.out.print("goodbye,");//打印goodbye
for (int i = 1; i < args.length; i++)//循环,从第一个字符打印到最后一个字符
System.out.print(" " + args[i]);
System.out.println("!");
}
}
2.命令行运行(置于E盘)
a.按windows和R键,输入cmd
b.输入E:跳转到E中
c.输入javac Message.java,回车
d.输入java Message -h或-g 内容,回车
3.结果
实验五:Eclipse环境下导入第3章示例程序InputTest.java步骤:
(1) 新建java project如下图:
(2) 选择File->import->General->File System->Next,打开文件导入窗口如下图,点击上方Browse选择导入源程序(我放到桌面上,选择corejava,选择v1ch03,选InputTest)并选中(右边的框框要选上),点击下方Browse选择源程序导入位置为新项目InputTest/src位置后,options选第一个,点击finish完成(要在src下导入)
(3)打开InputTest项目src文件夹的缺省包,双击InputTest.java在IDE源程序编辑区打开文件。
InputTest的注释:
import java.util.*; public class InputTest { public static void main(String[] args)//程序入口 { Scanner in = new Scanner(System.in);//定义了一个Scanner型数据,名为in;通过控制台进行输入时,需要构建一个Scanner对象,并与“标准输入流”System.in关联 System.out.print("What is your name? "); String name = in.nextLine();//定义了一个String,名为name,用来接收输入的字符串 System.out.print("How old are you? "); int age = in.nextInt();//定义了一个Int型,名为age,,用来接收输入的数字 System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); //输出"Hello,"拼接name拼接,"Next year,you'll be",拼接(age+1) } }
(4)右键单击InputTest.java文件名打开快捷菜单,选择Run as->java application运行此程序,结合程序运行结果,理解代码中Scanner类对象用法,掌握java控制台输入方法。
实验六 按照实验五的操作步骤,导入WriteReadFileTest.java示例程序,运行程序并理解程序代码,观察项目文件夹下文件myfile.txt的内容,掌握文件的输入输出操作。
1.导入及结果
2.注释
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是一个,流用完后要关闭,也可以不关闭 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。 } }
3.myFile.txt
实验七 按照实验五的操作步骤,导入第3章3-3——3-4示例程序,掌握两个程序循环控制结构的用途。
一.
1.程序及注释
import java.util.*; /** * This program demonstrates a <code>while</code> loop. * @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);//定义了一个Scanner型数据,名为in;通过控制台进行输入时,需要构建一个Scanner对象,并与“标准输入流”System.in关联 System.out.print("How much money do you need to retire? "); double goal = in.nextDouble();//定义了一个double,名为goal,用来接收输入的实型数 System.out.print("How much money will you contribute every year? "); double payment = in.nextDouble();//定义了一个double,名为payment,用来接收输入的实型数 System.out.print("Interest rate in %: "); double interestRate = in.nextDouble();//定义了一个double,名为interestRate,用来接收输入的实型数 double balance = 0;//定义实数balance,赋值0 int years = 0;//定义整型years,赋值0 // update account balance while goal isn't reached while (balance < goal)//while语句,一个循环语句 { // 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.程序及注释
import java.util.*; //导入所用的包 /** * This program demonstrates a <code>do/while</code> loop. * @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();//定义了一个double,名为goal,用来接收输入的实型数 System.out.print("Interest rate in %: "); double interestRate = in.nextDouble();//定义了一个double,名为interestRate,用来接收输入的实型数 double balance = 0; int year = 0; String input; // update account balance while user isn't ready to retire do //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"));//条件判断 } }
2.结果
第3章3-3——3-4示例程序有相似之处。第一个程序利用了while语句,要先进行判断,是否满足条件在进行运行。第二个程序用了do-while语句,不管是否满足条件必须要运行至少一次,第二次时在进行判断是否满足条件。
实验8:按照实验5的操作步骤,导入第3章3-5示例程序,理解抽奖概率计算算法。
1.程序注释
import java.util.*; //导入所用的包 /** * This program demonstrates a <code>for</code> loop. * @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();//定义了一个int,名为k,用来接收输入的整数 System.out.print("What is the highest number you can draw? "); int n = in.nextInt();//定义了一个int,名为n,用来接收输入的整数 /* * 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!"); } }
2.结果
注:就是抽奖概率公式:
如果从n个数抽取k个数字,公式为:n*(n-1)*(n-2)*......(n-k+1)/1*2*3*...*k
4. 实验总结:
通过第二周对java的学习,我对java的基本框架有了明确的了解,(1)熟悉java程序开发的基本步骤 (2)学习如何在Eclipse集成 开发环境下导入Java源程序,并加以练习; (3)学习Java语言构造基本程序的数据类型、变量、运算符、各类表达式、输入输出、流程控制等知识。(4)练习读懂简单的java程序 (5)学会在命令行下和eclipse中输入参数,运行
在练习导入的过程中,首先是在机房练习的,一步一步跟着步骤走,最终导入成功。但在自己电脑上操作时,由于eclipse升级的原因有一些步骤与PPT上有微小差异。在自己尝试许多次后无法解决,求助于助教,最终解决了问题,并且理清了java的基本框架,加深了对java的理解。在写九九乘法表程序时,让我发现了学习中存在的问题,在以后的学习中要改进不足,多思考多练习。在本次实验中最难的要属于读懂程序并添加注释,在基本知识上我还未掌握理解,书上的内容很抽象,不易理解,分析程序的能力不足。要多次观看Mooc老师的讲解,自己多思考,多练习,不断发现问题,不断解决问题。