A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

具体不多说,见刚写的源文件,注释都有说明.
  1.   
  2. package array;

  3. /*
  4. * 需求: 定义一个没有固定长度的数组, 并且可以输入任意类型的数据, 比如int boolean char float混杂起来,
  5. * 然后按类型分类输出。
  6. * 解决思路:
  7. * 可以先分类,也可以全部输完再分类. 因为已经有了不限制长度的输入的数组方法,我们统一采用输入完再分类输出.
  8. * 判断数组数据的数据类型 判断类型方法( instanceof )返回布尔类型.(是否可以用方法的重载?直接根据不同输入数据调用不同方法)
  9. *                 但是,instanceof只能判断引用类型,无法判读基本类型,可以找他们的包装类,比如Integer
  10. * 另一种判断类型的方法是 getClass();
  11. *                 输出结果是:java.lang.Integer,java.lang.String....
  12. * 定义所有类型的数组,默认为长度为0;
  13. * 定义一个循环输出,将输出值依次和所有类型判断,如果符合就在那个类型的数组上加.
  14. */
  15. public class Array {

  16.         /** Object数组,等下所有的操作都是对他 */
  17.         Object[] objArray = new Object[0];
  18.         /** int数组 */
  19.         int[] iArray = new int[0];
  20.         /** double数组 */
  21.         double[] dArray = new double[0];
  22.         /** float数组 */
  23.         float[] fArray = new float[0];
  24.         /** boolean数组 */
  25.         boolean[] bArray = new boolean[0];
  26.         /** char数组 */
  27.         char[] cArray = new char[0];
  28.         /** string数组 */
  29.         String[] sArray = new String[0];

  30.         /** 分类输出数组 */
  31.         void classfiyOutArray() {
  32.                 for (int i = 0; i < objArray.length; i++) {
  33.                         /* 判断数据类型,数组赋值应该可以用重载写个方法 */
  34.                         if (objArray[i] instanceof Integer) {
  35.                                 int temp = iArray.length;
  36.                                 int[] tempArray = new int[temp + 1];
  37.                                 copyArray(iArray, tempArray);
  38.                                 tempArray[temp] = (int) objArray[i];
  39.                                 iArray = tempArray;

  40.                         } else if (objArray[i] instanceof Double) {
  41.                                 int temp = dArray.length;
  42.                                 double[] tempArray = new double[temp + 1];
  43.                                 copyArray(dArray, tempArray);
  44.                                 tempArray[temp] = (double) objArray[i];
  45.                                 dArray = tempArray;
  46.                         } else if (objArray[i] instanceof Float) {
  47.                                 int temp = fArray.length;
  48.                                 float[] tempArray = new float[temp + 1];
  49.                                 copyArray(fArray, tempArray);
  50.                                 tempArray[temp] = (float) objArray[i];
  51.                                 fArray = tempArray;
  52.                         } else if (objArray[i] instanceof Boolean) {
  53.                                 int temp = bArray.length;
  54.                                 boolean[] tempArray = new boolean[temp + 1];
  55.                                 copyArray(bArray, tempArray);
  56.                                 tempArray[temp] = (boolean) objArray[i];
  57.                                 bArray = tempArray;
  58.                         } else if (objArray[i] instanceof Character) {
  59.                                 int temp = cArray.length;
  60.                                 char[] tempArray = new char[temp + 1];
  61.                                 copyArray(cArray, tempArray);
  62.                                 tempArray[temp] = (char) objArray[i];
  63.                                 cArray = tempArray;
  64.                         } else if (objArray[i] instanceof String) {
  65.                                 int temp = sArray.length;
  66.                                 String[] tempArray = new String[temp + 1];
  67.                                 copyArray(sArray, tempArray);
  68.                                 tempArray[temp] = (String) objArray[i];
  69.                                 sArray = tempArray;
  70.                         }
  71.                 }
  72.                 /* 遍历输出各个数组 */
  73.                 /* 先判断是否有数据,如果有就输出 */
  74.                 if (iArray.length > 0) {
  75.                         System.out.println("int类型的数组有:");
  76.                         printArray(iArray);
  77.                 }
  78.                 if (dArray.length > 0) {
  79.                         System.out.println("double类型的数组有:");
  80.                         printArray(dArray);
  81.                 }
  82.                 if (fArray.length > 0) {
  83.                         System.out.println("float类型的数组有:");
  84.                         printArray(fArray);
  85.                 }
  86.                 if (bArray.length > 0) {
  87.                         System.out.println("boolean类型的数组有:");
  88.                         printArray(bArray);
  89.                 }
  90.                 if (cArray.length > 0) {
  91.                         System.out.println("char类型的数组有:");
  92.                         printArray(cArray);
  93.                 }
  94.                 if (sArray.length > 0) {
  95.                         System.out.println("String类型的数组有:");
  96.                         printArray(sArray);
  97.                 }
  98.         }

  99.         /** 不限长度往数组输入任意数据 */
  100.         void inputArray(Object obj) {
  101.                 /*
  102.                  * 传进来的数据要存储在Object数组中,可以直接建另一个数组把原先Object的数据和传进来的数据一起拷进去.
  103.                  * (当然,也可以直接建个大点的数组,然后判断数组是否装满,然后进行扩充)
  104.                  */
  105.                 /* 定义一个临时数组Temp,将原先数组加当前传入的数组放进去 */
  106.                 Object[] temp = new Object[objArray.length + 1];
  107.                 for (int i = 0; i < temp.length; i++) {
  108.                         /* 如果为数组的最后一个数值的话(说明就是我们传进来的那个数值),放到临时数组 */
  109.                         if (i == temp.length - 1) {
  110.                                 temp[i] = obj;
  111.                         } else {
  112.                                 temp[i] = objArray[i];

  113.                         }
  114.                 }
  115.                 objArray = temp;

  116.         }
  117. }
复制代码

源代码超出几百个字符,删除了一些不重要的,具体可以看附件。
另有个问题,就是在测试文件中,如何在控制台中,批量输入数据,然后自动识别成相对应的类型?如我输入123,可以自动识别为int?

  1. package array;

  2. import java.util.Scanner;

  3. public class Test {
  4.         public static void main(String[] args) {
  5.                 Array a = new Array();
  6.                 a.inputArray("A");
  7.                 a.inputArray(true);
  8.                 a.inputArray('c');
  9.                 a.inputArray(1);
  10.                 a.inputArray(12.3);
  11.                 a.inputArray(12.3F);
  12.         }
  13. }

复制代码



Array.zip

1.94 KB, 下载次数: 65

java源码

1 个回复

倒序浏览
不错赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马