生成试验数据的茎叶图,并显示不同区间数据的个数

来源:互联网 发布:淘宝店铺过户近亲属 编辑:程序博客网 时间:2024/05/11 11:18

设定试验数据取值在 30~99 之间(如下图),其中在30~39 之间有6 个数31,、39、39、32、39、31,则
表示为 3 | 1 9 9 2 9 1; 在 40~49 之间有2 个数43、49,则表示为 4 | 3 9;依此类推,由此得到的图形成为
数据的“茎叶图”。
【编程要求】
1. 显示格式参考下图,生成20 个30~99 之间的随机数,并以每行10 个值显示。
2. 统计数据中,第一列数值为对应区间的数值个数,后面为茎叶图部分。
3. 程序中定义一个通用的方法,用于求一维数组数据的茎叶图以及各区间数据个数。方法名称约定为:
public String generateStemAndLeafPlot(int[] data)
其中 String 返回值为生成好的数据(注意换行),禁止在这个方法中直接打印输出。
4. 另外定义一个随机生成30~99 随机值的方法,可设计直接返回一维数组供上述方法使用
这里写图片描述
我写的代码如下(仅供参考):

    package midsemester;      import java.util.ArrayList;      import java.util.Collection;      import java.util.HashMap;      import java.util.Iterator;      import java.util.List;      import java.util.Map;      import java.util.Random;      public class StemAndLeafPlot {          private int[] sourceData = new int[20];          private Map<Integer, List<Integer>> sourceMap = new HashMap<>();          public void initSourceData() {              Random rand = new Random();              for(int i = 0; i < 20; i++) {                  sourceData[i] = rand.nextInt(69) + 31;              }              System.out.println("生成的随机数为:");              for(int j = 0; j < sourceData.length; j++) {                  System.out.print(sourceData[j] + " ");                  if(j == 9 || j == 19) {                      System.out.println();                  }              }          }          public void initSourceMap() {              if(sourceData == null || sourceData.length == 0) {                  return;              }              for(int i : sourceData) {                  if(sourceMap.size() == 0 || !sourceMap.containsKey(i/10)) {                      List<Integer> list = new ArrayList<>();                      list.add(i);                      sourceMap.put(i/10, list);                  } else {                      List<Integer> list = sourceMap.get(i/10);                      list.add(i);                  }              }          }          public String generateStemAndLeafPlot(int[] data) {              List<Integer> list = sourceMap.get(data[0]/10);              StringBuilder sb = new StringBuilder(list.size() + " " + data[0]/10 + "|");              for(int i : list) {                  sb.append(i%10);              }              return sb.toString();          }          public void getResult() {              initSourceData();              initSourceMap();              System.out.println("得到的茎叶图为:");              Collection<List<Integer>> datas = sourceMap.values();              Iterator<List<Integer>> it = datas.iterator();              while(it.hasNext()) {                  List<Integer> list = (List<Integer>) it.next();                  int[] data = new int[list.size()];                  for(int i = 0; i < list.size(); i++) {                      data[i] = list.get(i);                  }                  System.out.println(generateStemAndLeafPlot(data));              }          }          public static void main(String[] args) {              StemAndLeafPlot sa = new StemAndLeafPlot();              sa.getResult();          }      }  

运行结果:
这里写图片描述
这里写图片描述
这里写图片描述

0 0