java第二次作业

(一)学习总结

1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。举例说明equals方法和==的区别。

在Eclipse上的菜单栏选择项目-----属性-----左侧菜单栏Java构建路径-----库-----JRE系统库-----rt.jar-----源代码连接-----编辑-----外部文件-----设置外部文件的路径为JDK安装路径下的src.zip。



在程序的equals处按住ctrl单击equals。

""是用来进行数值比较的,当内容相同分别保存在了不同的空间,地址值不同,用""比较是是不相等的;

equals()方法的作用是对内容进行比较。

2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?

构造方法就是一段可重复调用的代码段,一个很多行的代码程序的某一部分在多个地方需要重复使用,在各个地方重复编写,会特别麻烦,所以可以将此部分代码定义成一个方法,供以后的程序反复调用。

构造方法的重载就是方法名称相同,但参数的类型和参数个数不同。通过传递参数的个数以及类型的不同可以完成不同的功能的方法的调用。

public class Test {
public static void main(String args[]) {
Foo obj = new Foo();
}
}
class Foo{
int value;
public Foo(int intValue){
value = intValue;
}
}

不可以通过编译,在主函数,构造的方法Foo()中,这是一个有参的构造函数,但是并没有int型参数。

3.运行下列程序,结果是什么?查阅资料,分析为什么。

public class Test {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
if((a + b + c) == 0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}



为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。

程序修改:

import java.math.BigDecimal;
public class Panba {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
double sum=0;
sum=Mymath.round(Mymath.add(a,b,c),1);
System.out.println("a+b+c="+sum);
}
}
class Mymath{
public static double round(double a,int b){
BigDecimal b1=new BigDecimal(a);
BigDecimal b2=new BigDecimal(1);
return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double add(double p,double l,double m){
BigDecimal a=new BigDecimal(p);
BigDecimal b=new BigDecimal(l);
BigDecimal c=new BigDecimal(m);
return a.add(b).add(c).doubleValue();
}
}

4.运行下列程序,结果是什么?分析原因,应如何修改.

public class Test {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1].value=100;
}
}
class MyClass{
public int value=1;
}

数组没有正常初始化

程序修改:

	public class Panba {

    public static void main(String[] args) {
MyClass[] arr={new MyClass(),new MyClass(),new MyClass()};
arr[1].value=100;
}
}
class MyClass{
public int value=1;
}



5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象,每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。

代码:

	public class Panba {
public static void main(String[] args) {
String S1 = "abc"; for(int i = 0 ; i < 10000 ; i ++) {
S1 += "def";
S1 = "abc";
}
}
}

6.其他需要总结的内容。

(二)实验总结

1.评分系统:一共10个评委,满分10分,假设有5个选手,分别由评委打分,去掉一个最高分和一个最低分后的平均分为该选手得分,将选手的得分从高到低进行输出。定义适当的方法。

代码

package pingfen;

import java.util.Scanner;

public class Ping {
public static void main(String[] args){ Scanner input = new Scanner(System.in);
double p=0;
double o[]=new double[6]; for(int x=1;x<6;x++){
double sum=0;
System.out.println("请为第"+x+"位选手打分"); double a[]=new double[10];
for(int i=0;i<10;i++){
int num=input.nextInt();
a[i]=num; } for(int i=0;i<10;i++){
sum=sum+(double)a[i];
}
System.out.println("选手的总分是:"+sum); for(int b=0;b<a.length;b++){
for(int c=0;c<a.length;c++){
if(a[b]<a[c]){
double temp=(double)a[b];
a[b]=a[c];
a[c]=temp;
}
}
} System.out.println("评委给的最高分是:"+a[9]);
sum=sum-(double)a[9];
System.out.println("去掉一个最高分得分:"+sum);
System.out.println("评委给的最低分是:"+a[0]);
sum=sum-(double)a[0];
System.out.println("去掉一个最低分得分:"+sum);
p=sum/8;
System.out.println("选手最终得分是"+p);
o[x]=p;
} for(int p1=0;p1<o.length;p1++){
for(int p2=0;p2<o.length;p2++){
if(o[p1]<o[p2]){
double temp=(double) o[p1];
o[p1]=o[p2];
o[p2]=temp;
}
}
} for(int x=1;x<6;x++){
System.out.println(o[x]);
}
}
}

程序设计思路:定义一个空间为10的数组,存放10个评委给出的得分;再定义一个空间为5的数组,存放5名选手的最终得分。其中利用冒泡排序对评委的评分和选手的成绩进行排序。

2.Email验证:在各种应用中,需要对用户输入的email地址进行验证,编写一个方法,判断一个email地址是否有效。(判断条件:A:@和.同时存在 B: @在.之前 C: 不能@开头 D: 以com|cn|net|gov|edu|org结尾 )

代码

import java.util.Scanner;
public class Pan {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一串字符串:");
String str=input.next();
System.out.println("邮箱:"+str);
int a = str.indexOf("@");
int b = str.indexOf("."); if(a>0&&b>0){
if(a<b){
if(str.endsWith("com")||str.endsWith("cn")||str.endsWith("net")||str.endsWith("gov")||str.endsWith("edu")||str.endsWith("org")){
System.out.println("输入正确!");
}else{
System.out.println("输入错误!");
}
}else{
System.out.println("输入错误!");
}
}else{
System.out.println("输入错误!");
}
}
}

程序设计思路:输入一串字符,利用str.indexOf语句查找到"@"与".";并将它们所在位置的下标赋给int型的a,b;用来比较"@"与"."的先后,利用str.endsWith语句判断字符串的结尾。

问题1:

原因:str.indexOf没明白该语句的返回值就是下标

解决方案:认真查看课本分析

3.统计文件:输入一个字符串,包含各种文件类型的文件名。文件名之间用“,”分隔,要求将各个文件名的首字母大写后分别输出,并统计各种类型文件的文件个数。

代码

import java.util.Scanner;

public class Wen {
public static void main(String[] args) {
Scanner input = new Scanner(System.in); String str2="java";
String str3="c";
String str4="exe"; System.out.println("请输入一串字符串:");
String str=input.next();
System.out.println("字符串:\n"+str);
System.out.println();
String a[]=str.split(","); int o=0,w=0,e=0;
for(int i=0;i<a.length;i++){
int q=a[i].indexOf(".");
String str1=a[i].substring(q+1); System.out.println(); if(str2.equals(str1)){
o++;
}
if(str3.equals(str1)){
w++;
}
if(str4.equals(str1)){
e++;
}
}
System.out.println("java文件有"+o+"个");
System.out.println("c文件有"+w+"个");
System.out.println("exe文件有"+e+"个"); System.out.println("文件个数是:\n"+a.length); System.out.println("文件首字母大写:");
for(int i=0;i<a.length;i++){
String str1=a[i].substring(0,1);
System.out.println(str1.toUpperCase()); }
}
}

程序设计思路:利用str.split语句将字符串分隔开;利用str.substring语句截取字符串首字母;利用str.toUpperCase语句转换大小写。

4.身份证识别:公民身份证号码由十八位数字组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。顺序码的奇数分配给男性,偶数分配给女性。编写一个识别身份证基本信息的小工具,输入一个居民身份证号,则输出居民所属省份(直辖市、自治区),生日(格式:xxxx-xx-xx)和性别信息。

代码

import java.util.Scanner;

public class Yan {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入身份证号:");
String str=input.next();
System.out.println("身份证号:"+str); String str1=str.substring(0,2);
String str2=str.substring(6,14);
String str6=str.substring(14,17); String str3=str2.substring(0,4);
String str4=str2.substring(4,6);
String str5=str2.substring(6,8); System.out.println(); System.out.println("省份:");
if(str.startsWith("11")){
System.out.println("北京市");
}
if(str.startsWith("12")){
System.out.println("天津市");
}
if(str.startsWith("13")){
System.out.println("\t"+"河北省");
}
if(str.startsWith("14")){
System.out.println("山西省");
}
if(str.startsWith("15")){
System.out.println("内蒙古自治区");
} if(str.startsWith("21")){
System.out.println("辽宁省");
}
if(str.startsWith("22")){
System.out.println("吉林省");
}
if(str.startsWith("23")){
System.out.println("黑龙江省");
} if(str.startsWith("31")){
System.out.println("上海市");
}
if(str.startsWith("32")){
System.out.println("江苏省");
}
if(str.startsWith("33")){
System.out.println("浙江省");
}
if(str.startsWith("34")){
System.out.println("安徽省");
}
if(str.startsWith("35")){
System.out.println("福建省");
}
if(str.startsWith("36")){
System.out.println("江西省");
}
if(str.startsWith("37")){
System.out.println("山东省");
} if(str.startsWith("41")){
System.out.println("河南省");
}
if(str.startsWith("42")){
System.out.println("湖北省");
}
if(str.startsWith("43")){
System.out.println("湖南省");
}
if(str.startsWith("44")){
System.out.println("广东省");
}
if(str.startsWith("45")){
System.out.println("广西壮族自治区省");
}
if(str.startsWith("46")){
System.out.println("海南省");
} if(str.startsWith("50")){
System.out.println("重庆市");
}
if(str.startsWith("51")){
System.out.println("四川省");
}
if(str.startsWith("52")){
System.out.println("贵州省");
}
if(str.startsWith("53")){
System.out.println("云南省");
}
if(str.startsWith("54")){
System.out.println("西藏自治区");
} if(str.startsWith("61")){
System.out.println("陕西省");
}
if(str.startsWith("62")){
System.out.println("甘肃省");
}
if(str.startsWith("63")){
System.out.println("青海省");
}
if(str.startsWith("64")){
System.out.println("宁夏回族自治区");
}
if(str.startsWith("65")){
System.out.println("新疆维吾尔自治区");
}
System.out.println("生日:");
System.out.println("\t"+str3+"-"+str4+"-"+str5);
System.out.println("性别:");
if(str6.endsWith("1")||str6.endsWith("3")||str6.endsWith("5")||str6.endsWith("7")||str6.endsWith("9")){
System.out.println("\t"+"男");
}else{
System.out.println("\t"+"女");
}
}
}

程序设计思路:利用str.substring语句进行字符串的截取,利用str.startsWith,str.endsWith语句判断。

作业链接

(三)代码托管

《Java技术》 第二次作业的更多相关文章

  1. java技术第二次作业

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载? 构造方法是用于对对象初始化的方法,当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数.在程序员没有给类提供构造函数的情况下,Ja ...

  2. 2017-2018-1 JAVA实验站 第二周作业

    2017-2018-1 JAVA实验站 第二周作业 小组成员: 组长 20162318张泰毓 成员 20162303石亚鑫 20162304张浩林 20162307张韵琪 20162321王彪 201 ...

  3. 2017《Java技术》预备作业01

    2017<Java技术>预备作业 1.学习使用MarkDown 本学期的随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入图片,插 ...

  4. 2017《JAVA技术》预备作业

    1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? ==我期望的师生关系是长辈和晚辈,前辈和后生,朋友与朋友之间的关系,作为晚辈,要尊敬长辈,不能对长辈进行言语攻击和起冲突:作为后生,要谨遵教诲 ...

  5. 2017-2018-1 Java演绎法 第二周 作业

    团队任务:讨论Android上的游戏软件 参考现代软件工程 第一章 [概论]练习与讨论: 软件有很多种,也有各种分类办法,本次团队任务是讨论选取Android上的一个游戏软件,考虑到每位组员接触的游戏 ...

  6. 2017《JAVA技术》预备作业-计科1502-19-何俏依

    1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是长辈和晚辈,前辈和后生,朋友与朋友之间的关系,作为晚辈,要尊敬长辈,不能对长辈进行言语攻击和起冲突:作为后生,要谨遵教诲,有 ...

  7. 《Java技术》第一次作业——Java语言基础

    学习总结 Scanner类实现基本数据输入的方法 Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配.然后可以使用不同的 next 方法将得到的标记转换为不同类型的值. ...

  8. 《Java技术》预备作业总结

    Java预备作业总结 第一次的博客作业完成了,对于一种崭新的形式,大家可能还不太适应,学习和借鉴好的理念和学习方式,是我们缩小差距.提升自己的第一步. 关于你期望的师生关系 从幼儿园到大学,大家接触到 ...

  9. 2017《Java技术》预备作业02

    1.学习使用Git和码云托管代码 参考资料:如何使用Git和码云 安装Git 在码云注册账号,新建项目,名称为Java-CS01(02)XXX, 一班为CS01,二班为CS02,后三位或两位为姓名缩写 ...

  10. 《Java技术》第一次作业

    (一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明. (1)使 ...

随机推荐

  1. VS2010提示error TRK0002: Failed to execute command

    转自VC错误:http://www.vcerror.com/?p=277 问题描述: windows8自动更新Microsoft .NET Framework 3.5和4.5.1安全更新程序,今天用V ...

  2. (64)C# 预处理器指令

    预处理器命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面.例如:使用预处理器指令可以禁止编译器编译代码的某一部分,如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,即可以 ...

  3. 用 Flask 来写个轻博客 (34) — 使用 Flask-RESTful 来构建 RESTful API 之三

    目录 目录 前文列表 应用请求中的参数实现 API 分页 测试 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 F ...

  4. UIsearchBar 自定义样式

    对于修改输入框圆角 的需求, 可以通过修改搜索框背景图片的方式设置. - (void)setSearchFieldBackgroundImage:(nullable UIImage *)backgro ...

  5. 【读书笔记】:MIT线性代数(3):Special Solution, Rank and RREF

    Special Solutions: Notice what is special about s 1 and S2. They have ones and zeros in the last two ...

  6. QTP与QC整合

    QC-QTP整合 在本节中,我们将学习如何将QTP和QC整合.通过整合,在QTP自动化脚本可以直接从Quality Center执行.建立连接,第一个步骤是安装所需的加载项.我们将了解如何通过采取样品 ...

  7. cdh5.7 做完HA后hive 查询出现异常: expected: hdfs://nameservice

    异常信息如下: select * from b_pt_pr_customer_address_info limit 19; FAILED: SemanticException Unable to de ...

  8. python基础--新式类实现单例模式

    在网上看了有关python实现单例模式的博客,发现好多都是转载的,并且都是按照python2.x版本旧式类的方式写的. 虽然也能读懂,但对于我这种一开始学的就是python3.x的新手来说,心里总有点 ...

  9. 从零开始做一个Jmeter性能测试

    安装Jmeter 1.下载地址http://jmeter.apache.org/download_jmeter.cgi 2.解压下载文件,然后将bin目录添加到系统环境变量PATH里. 3.确保已安装 ...

  10. Https socket 连接

    介: 本文主要介绍了网络安全通讯协议 SSL/TLS 和 Java 中关于安全通讯的实现部分.并通过一个简单的样例程序实现,来展示如何在 Java 平台上正确建立安全通讯. 在人类建立了通信系统之后, ...