实验题目 Java 实验 (1) 实验目的 学习 Java 语言的编程 实验准备 直接从网上或从上传作业的网站上下载并安装 JDK http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html 预备知识 (1) 常量定义 final int LEVEL_NUM = 1000; (2) 动态数组定义 int fibs[]=new int[cnt]; (3)foreach 语句 double sum = 0; double scores[] = {100.0, 90.2, 80.0, 78.0,93.5; for(double score:scores){ sum = sum + score; 注意事项 (1) 按照要求的步骤做, 不要进行简化 (2) 运行 a.bat 可以直接进入目录 实验内容 1 (StringFunc.java) 已知一个字符串 s 为 扁担长, 板凳宽, 板凳没有扁担长, 扁担没有板凳宽 扁担要绑在板凳上, 板凳偏不让扁担绑在板凳上, 使用以下字符串函数完成任务并显示出来 : (1) 用 substring 取出 s 中第一个 板凳宽 并显示出来 (2) 用 indexof() 找出 s 中 扁担 出现的所有位置 (3) 用字符串运算 + 形成包含重复 10000 次字符串 s 的长字符串, 输出计算时间和总长度 (4) 用 StringBuilder 形成上面的长字符串, 输出计算时间和总长度 提示 :long time= System.currentTimeMillis() // 取得当前时间的毫秒数 ( 距离新纪元时间 1970 年 1 月 1 日 0 时 0 分 0 秒的毫秒数 ) 参考结果 : 全部完成后截屏 :
全部完成后源码 (StringFunc.java): public class StringFunc{ final static String s=" 扁担长, 板凳宽, 板凳没有扁担长, 扁担没有板凳宽 扁担要绑在板凳上, 板凳偏不让扁担绑在板凳上 "; public static void main(string args[]){ String s1=s.substring(0,3); System.out.println(s1); for(int i=0;i<s.length();i++){ i = s.indexof(" 扁担 ",i); if(i<0)break; System.out.print(i+" "); System.out.println(); long time= System.currentTimeMillis(); String s2= new String(); s2=""; for(int i=0;i<10000;i++){ s2+=s; System.out.println(" 字符串相加的时间 : "+(System.currentTimeMillis()-time)+"ms 字符串长度 : "+s2.length()); time= System.currentTimeMillis(); StringBuilder stringbuilder = new StringBuilder(); for(int i=0;i<10000;i++){ stringbuilder.append(s); System.out.println("StringBuilder 的时间 : "+(System.currentTimeMillis()-time)+"ms 字符串长度 : "+stringbuilder.tostring().length());
2 (Fib.java) 斐波那契数列 (Fibonacci sequence): 第 0 项是 0, 第 1 项是 1, 从第 2 项开始, 每一项都等于前两项之和, 结果是 0,1,1,2,3,5,8,13,21,34,55, 89,144,233,... 其中,0 为第 0 个斐波那契数 (1) 计算斐波那契数列保存在一个 ArrayList 类型的变量 fibs 中, 要求一直计算到 Long 类型的最大斐波那契数 显示最后一个数和 fibs 的长度 * 最大长整数为 Long.MAX_VALUE (2) 用 Iterator 类依次取出 fibs 中每个元素, 计算它与前面一个元素的比值 ( 从第 2 个开始 ), 保存在 double 类型的动态数组 ratio 中, 然后把 ratios 中的所有元素值用 foreach 语句依次显示出来 可以看出这个值逐渐接近黄金分割比例 0.6180339887 4989484820 458683436565 * ArrayList 的用法见课件, 动态数组和 foreach 语句 预备知识 参考结果 : 全部完成后的运行截屏 :
全部完成后的源程序 (Fib.java): import java.util.*; public class Fib{ public static void main(string args[]){ long fib0=0,fib1=1,fib2=1; ArrayList<Long>fibs=new ArrayList<>(); fibs.add(fib0); fibs.add(fib1); long tmp=fib2; while(tmp<long.max_value&&tmp >= 0){ // 计算 Fib fibs.add(tmp); tmp=fibs.get(fibs.size()-1)+fibs.get(fibs.size()-2); System.out.println("max fib(long):"+fibs.get(fibs.size()-1)+ " count:"+fibs.size()); double ratios[]=new double[fibs.size()-1]; Iterator iterator = fibs.iterator(); long pre=(long)iterator.next(); int i=0; while(iterator.hasnext()){ // 求出比值 long now=(long)iterator.next(); ratios[i++]=(double) pre/now; pre=now; int count=0; for (double r:ratios) { if((count++)%5==4) System.out.println(r); else System.out.print(r+"\t"); 3 (ShowTags.java) 找出 html 文件 (grassland.htm) 中的所有标签名 ( 转换为大写字母 ), 并用 HashMap 保存每个标签出现的次数, 最后把所有标签及其出现次数显示出来 * 要求使用 content.charat(index) 依次取出字符 (char 类型 ) 进行判断 char 类型采用 == 进行比较 * 可能会取到注释和脚本中的标签 * 不要使用正则表达式该网页 :
http://travel.sohu.com/20161023/n471039505.shtml?pvid=725adae4dbd11180 参考截屏 : 完成后运行结果截屏 :
问题 :DIV 出现多少次?[102] SPAN 出现多少次?[79] LI 出现多少次?[34] 源程序 (ShowTags.java): import java.io.*; import java.util.*; class ShowTags{ public static void main(string[] args)throws IOException{ HashMap<String,Integer>map=new HashMap<>(); String content = readfile(".\\grassland.htm"); content=content.touppercase(); boolean flag = false; ArrayList<String>out=new ArrayList<>(); String label=""; for(int i=0;i<content.length();i++){ // 分离标签 char temp=content.charat(i); if(flag&& (temp == '>' temp == ' ')) { flag = false; out.add(label); if(flag) label+=temp; if(temp == '<') { label = ""; flag=true; for(string s:out){//map 映射 if(!s.equals("")){ if(map.containskey(s)) map.put(s,map.get(s)+1); else map.put(s,1); int count=0; // 遍历 map 输出 Iterator iter = map.entryset().iterator(); while (iter.hasnext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getkey(); int val = (Integer) entry.getvalue(); if((count++)%3==2)system.out.println("<"+key+">:"+val); else System.out.print("<"+key+">:"+val+"\t");
static String readfile(string filename) throws IOException{ StringBuilder sb = new StringBuilder(""); int c1; FileInputStream f1= new FileInputStream(fileName); InputStreamReader in = new InputStreamReader(f1, "UTF-8"); while ((c1 = in.read())!= -1) { sb.append((char) c1); return sb.tostring();