Java实验(1)

【实验内容】
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秒的毫秒数)。
代码如下:

public class StringFunc{
    final static String s="扁担长,板凳宽,板凳没有扁担长,扁担没有板凳宽。扁担要绑在板凳上,板凳偏不让扁担绑在板凳上。";
    public static void main(String args[]){
        String s1=s.substring(4,7);
        System.out.println(s1);

        int startindex=0;
        String target="扁担";
        while(true){
            startindex=s.indexOf(target,startindex);
            if(startindex==-1)
                break;
            System.out.print(startindex+" ");
            startindex=startindex+target.length();
        }
        System.out.println("");

        long time= System.currentTimeMillis(); 
        String s2="";
        for(int i=0;i<10000;i++)
            s2+=s;
        int length1=s2.length();
        long time1= System.currentTimeMillis();
        System.out.print("字符串相加的时间:");
        System.out.print(time1-time);
        System.out.print("ms "+"字符串长度:");
        System.out.println(length1);

        long time2= System.currentTimeMillis(); 
        StringBuilder s3=new StringBuilder(s);
        for(int i=0;i<9999;i++){
            s3.append(s);
        }
        long time3= System.currentTimeMillis();
        String s31=s3.toString();
        System.out.print("StringBuilder的时间:");
        System.out.print(time3-time2);
        System.out.print("ms "+"字符串长度:");
        System.out.println(s31.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。

import java.util.*;

public class Fib{
    public static void main(String args[]){
        long fib0 = 0,fib1 = 1,fib2 = 1;
        ArrayList<Long> fib = new ArrayList<Long>();
        int count=2;
        long fib_0=0;
        fib.add(fib0); fib.add(fib1);fib.add(fib2);
        while(fib.get(count)>0){
            count++;
            fib_0 = fib.get(count-1)+fib.get(count-2);
            fib.add(fib_0);
        }
        System.out.print(fib.get(count-1));
        System.out.print(" count: ");
        System.out.println(count);

        double sum[]=new double[3];
        int num=0;
        Iterator<Long> it = fib.iterator();
        long fib_1=it.next();
        while(it.hasNext()){
            if(num==3){
                for(int i=0;i<3;i++){
                    System.out.print(sum[i]);
                    System.out.print("     ");
                }
                System.out.print('\n');
                num=0;
            }
            long fib_2=it.next();
            double result=(double)fib_1/(double)fib_2;
            fib_1=fib_2;

            sum[num]=result;
            num++;

        }
    }

}

3、(ShowTags.java)找出html文件(grassland.htm)中的所有标签名(转换为大写字母),并用HashMap保存每个标签出现的次数,最后把所有标签及其出现次数显示出来。
* 要求使用content.charAt(index)依次取出字符(char类型)进行判断。char类型采用“==”进行比较。
* 可能会取到注释和脚本中的标签。
* 不要使用正则表达式
网页链接:(grassland.htm就是该网页源码)
http://travel.sohu.com/20161023/n471039505.shtml?pvid=725adae4dbd11180

import java.io.*;
import java.util.*;

class ShowTags{
  public static void main(String[] args)throws IOException{
    String content = readFile(".\\grassland.htm");
    int len = content.length();
    int begin=0,end=0;
    int value=0;
    String s="";
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    for(int i=0;i<len;i++){
        if((content.charAt(i)=='<')&&(content.charAt(i+1)!='!')){
            begin=i;
            for(int j=i+1;j<len;j++){
                if(content.charAt(j)=='>'){
                    i=j;
                    end=j;
                    s=content.substring(begin,end+1);
                    s=s.toUpperCase();
                    break;
                }
                else if(content.charAt(j)==' '){
                    i=j;
                    end=j;
                    s=content.substring(begin,end)+'>';
                    s=s.toUpperCase();
                    break;
                }
            }
            int flag=0;
            Iterator<String>it = map.keySet().iterator();
            while(it.hasNext()){
                String key = (String)it.next();
                if(s.equals(key)){
                    value = map.get(key);
                    map.put(s,value+1);
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                map.put(s,1);
            }
        }           
    }
    int num=0;
    Iterator<String>it = map.keySet().iterator();
    while(it.hasNext()){
        String key = (String)it.next();
        int value1 = map.get(key);
        num++;
        if(num==3){
            num=0;
            System.out.println(key+":"+value1);
        }
        else
            System.out.print(key+":"+value1+"   ");
    }
  }

  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();
  }
}
实验5 常用类(2学时) 一、实验目的 1. 熟悉Java中的String、StringBuffer、Math、包装器类的使用方法。 2. 使用常用类解决一般性的应用问题。 3. 掌握JavaSE API文档的使用方法。 二、实验内容 1. 编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母数。(字符串可以在main方法中指定) 2. 调用java.lang.Math的成员函数“public static double random()”运算下面表达式1000次,(int) (Math.random()*20+0.5),统计其中生成的整数0、1、2、……、20的个数分别是多少,并输出统计结果。 3. 编写一个方法,返回一个double型的二维数组,数组中的元素通过解析字符串参数获得。例如,字符串参数:“1,2;3,4,5;6,7,8”,对应的数组为: d[0,0] = 1.0 d[0,1] = 2.0 d[1,0] = 3.0 d[1,1] = 4.0 d[1,2] = 5.0 d[2,0] = 6.0 d[2,1] = 7.0 d[2,2] = 8.0 三、实验要求 完成程序设计并提交实验报告。 实验6 容器(2学时) 一、实验目的 1. 熟悉容器类库中常用类的使用方法。 2. 使用常用容器类解决一般性的应用问题。 二、实验内容 1. 用HashMap模拟一个网上购物车。要求:从键盘输入5本书的名称、单价、购买数量,将这些信息存入一个HashMap,然后将该HashMap作为参数调用方法getSum(HashMap books),该方法用于计算书的总价并返回。【说明:键盘输入可以使用Scanner类】 2. 使用两个Stack类(JDK容器类库中的Stack类)实现一个队列类MyQueue,提供队列的入队列和出队列操作:enQueue和deQueue。 3. 写一个彩票程序:30选7。随机(1~30之间)生成7个随机数,注意不能重复。然后从键盘输入7个数,对比7个数是否与随机数有相同的。最后显示“中了几个号”。同时,如果中了7个号,显示一等奖;如果中了6个号,显示二等奖;如果中了5个号,显示三等奖。要求:首先写出程序的实现思想,特别是程序所使用的数据结构,然后写出Java实现代码。【说明:键盘输入可以使用Scanner类】 三、实验要求 完成程序设计并提交实验报告。 实验7 流(2学时) 一、实验目的 1. 熟悉流类库中各种常用流的使用方法。 2. 能够使用流类实现基本的文件读写。 二、实验内容 1. 编写程序,在控制台窗口提示输入两个整数,然后接收这两个整数,并输出它们的和。(要求:键盘输入通过流封装System.in获取,不要使用Scanner类) 2. 设计学生类Student,属性:编号(整型);姓名(字符串),成绩(整型)。编写一个程序:要求:(1)输入5个学生的姓名和成绩,将其姓名和成绩保存到data.txt中;(2)然后从该文件中读取数据,求得这五个学生的平均成绩。 三、实验要求 完成程序设计并提交实验报告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值