xyan

导航

java.第二次作业

(一)学习总结
1、
(1)使用Eclipse关联jdk源代码的截图

(2)equals与==的区别

package ha;
import java.util.Scanner;
public class ha {
	public static void main(String[] args){
		System.out.println("请输入hello");
		Scanner in=new Scanner(System.in);
		String str1=in.next();
		System.out.println("请输入hello");
		Scanner input=new Scanner(System.in);
		String str2=input.next();
		if(str1==str2){
			System.out.println("字符串"+str1+"\t"+str2+"相同");
		}
		else{
			System.out.println("字符串"+str1+"\t"+str2+"不相同");
		}
	}
}

结果为hello 与hello不相同。
如果用if(str1str2)时结果为不同,如果用(str1.equals(str2))结果则变为hello 与hello相同。本来hello与hello的内容是相同的,但是“”比较的是地址,而equals”比较的是内容,所以结果会有所不同。
静态输入时而且str1与str2内容相同时则结果相同,因为静态输入时str1与str2所指的是同一个地址。
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类中的public Foo(int intValue)构造方法会调用public class Test中有一个参数的方法,但其中并没有,所以不能编译。

3、

package ha;
import java.util.Scanner;
public class ha {
	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");
		}
	}
}

结果为不等于0.3,原因为存在精度损失。
修改后的程序如下

import java.math.BigDecimal;
public class hap {
	public static void main(String[] args){
		BigDecimal a1=new BigDecimal("0.1");
		BigDecimal b1=new BigDecimal("0.1");
		BigDecimal c1=new BigDecimal("0.1");
		if((a1.add(b1).add(c1).doubleValue())==0.3){
			System.out.println("等于0.3");
		}
		else{
			System.out.println("不等于0.3");
		}
	}
}

0.1得加引号,加引号就是String型的构造,String 类的可以控制小数点后几位,如果0.1不加引号,就是double型的构造,double型的小数点后的位数不确定
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 da {
   public static void main(String[] args) {
       MyClass arr=new MyClass();
        arr.value=100;
        System.out.println("输出"+arr.value);
   }
}
class MyClass{
   public int value=1;
}

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)
应该使用StringBuffer类,因为String类进行连接操作时会从新申请一个新的空间,这样的话会有很多待处理的垃圾空间。StringBuffer类进行连接时是在原来的空间地址,那么就没有空间的浪费。
例子:
(1)

public class hap {
	public static void main(String[] args) {
	   String str1="hello";
	   String str2=" world";
	   if(str1==(str1+str2)){
		   System.out.println("连接前后的地址相同");
	   }
	   else{
		   System.out.println("连接前后的地址不相同");
	   }
	}
}

结果为连接前后地址不同,说明连接时又申请了新的空间,存在垃圾空间。
(2)

public class hap {
	public static void main(String[] args) {
		StringBuffer str1=new StringBuffer();
		StringBuffer str2=new StringBuffer();
		str1.append("hello");
	   if(str1==str1.append(" world")){
		   System.out.println("连接前后的地址相同");
	   }
	   else{
		   System.out.println("连接前后的地址不相同");
	   }
	}
}

结果为连接后的地址相同

(二)实验总结
实验内容:

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

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

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

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

1.评分系统
程序设计思路:
把十个评委给五位选手的打分放到二位数组里,把最高分、最低分、平均分分别写成一个方法,然后在主函数中进行从高到低的冒泡排序,最后进行输出。
问题1:将分数排序后,不知道分数是哪位选手的。
原因:分数开始只放到了一维数组里,且只有分数没有选手。
解决方案:
将分数和选手同时放到二维数组里,例如第一行放第一位选手的分数及第一位选手,第二行放第二位选手的成绩及第二个选手。

          for(i=0;i<4;i++){
			flag=0;
			for(j=0;j<4-i;j++){
				if(a[j][0]<a[j+1][0]){
					t=a[j][0];
					a[j][0]=a[j+1][0];
					a[j+1][0]=t;
					temp=a[j][1];
					a[j][1]=a[j+1][1];
					a[j+1][1]=temp;
					flag=1;
				}
			}
			if(flag==0){
				break;
			}
		}

2.Email验证
程序设计思路:把email 有效的条件都写成方法,然后用他们的返回值在主函数里设置为同时满足时email地址是有效的。
问题1:不方便所有条件写在一个if语句中
原因:条件太多
解决方案:把条件都设置为方法,然后用返回值进行判断,放在if中

3.统计文件
程序设计思路:通过String的函数方法把字符串换用“,”拆分成文件名。再把文件名的第一个字符截取出来进行操作,变为大写,然后字符串连接输出。统计文件个数是通过把文件的扩展名截取出来放入数组中,然后进行相互比较,统计扩展名相同的个数。
问题2:

          	for(i=0;i<s.length;i++){
			String a[]=s[i].split(".");     //转义字符
			d=a.length-1;
			b[i]=a[d];
		}

无法用点将文件名进行拆分。
原因:没有转义字符
解决方案:

          	for(i=0;i<s.length;i++){
			String a[]=s[i].split("\\.");     //转义字符
			d=a.length-1;
			b[i]=a[d];
		    }

4.身份证识别
5.程序设计思路:把省份放入到一个二维数组中,然后取出身份证的前两位,转换为int型的,通过和二位数组下表进行比较来确定省份。性别和生日通过截取函数来实现。
问题2:取出身份证的前两位不能和下标进行比较。
原因:身份证中取出的前两位是字符而二维数组的下标是整型的,所以无法进行比较。
解决方案:

          int c=a[0]-48;

(三)[代码托管]https://git.oschina.net/hebau_cs15/java-cs01lxy.git

  • 码云commit历史截图

(四)学习进度条

| | | 代码行数(新增/累积)|学习时间(新增/累积)|本周学习内容|
| -------- |:----------------😐:----------------😐:------------😐
| 目标 | 5000行 | 300小时 | |
| 第2-4周 | 350/350 | 30/30|学习了scanner类还有随机数|
| 第5周 | 150 | 50/50|string类和构造方法的使用 |
| 第6周 | |

posted on 2017-03-28 13:46  xyan  阅读(216)  评论(0编辑  收藏  举报