具体不多说,见刚写的源文件,注释都有说明.
-
- package array;
- /*
- * 需求: 定义一个没有固定长度的数组, 并且可以输入任意类型的数据, 比如int boolean char float混杂起来,
- * 然后按类型分类输出。
- * 解决思路:
- * 可以先分类,也可以全部输完再分类. 因为已经有了不限制长度的输入的数组方法,我们统一采用输入完再分类输出.
- * 判断数组数据的数据类型 判断类型方法( instanceof )返回布尔类型.(是否可以用方法的重载?直接根据不同输入数据调用不同方法)
- * 但是,instanceof只能判断引用类型,无法判读基本类型,可以找他们的包装类,比如Integer
- * 另一种判断类型的方法是 getClass();
- * 输出结果是:java.lang.Integer,java.lang.String....
- * 定义所有类型的数组,默认为长度为0;
- * 定义一个循环输出,将输出值依次和所有类型判断,如果符合就在那个类型的数组上加.
- */
- public class Array {
- /** Object数组,等下所有的操作都是对他 */
- Object[] objArray = new Object[0];
- /** int数组 */
- int[] iArray = new int[0];
- /** double数组 */
- double[] dArray = new double[0];
- /** float数组 */
- float[] fArray = new float[0];
- /** boolean数组 */
- boolean[] bArray = new boolean[0];
- /** char数组 */
- char[] cArray = new char[0];
- /** string数组 */
- String[] sArray = new String[0];
- /** 分类输出数组 */
- void classfiyOutArray() {
- for (int i = 0; i < objArray.length; i++) {
- /* 判断数据类型,数组赋值应该可以用重载写个方法 */
- if (objArray[i] instanceof Integer) {
- int temp = iArray.length;
- int[] tempArray = new int[temp + 1];
- copyArray(iArray, tempArray);
- tempArray[temp] = (int) objArray[i];
- iArray = tempArray;
- } else if (objArray[i] instanceof Double) {
- int temp = dArray.length;
- double[] tempArray = new double[temp + 1];
- copyArray(dArray, tempArray);
- tempArray[temp] = (double) objArray[i];
- dArray = tempArray;
- } else if (objArray[i] instanceof Float) {
- int temp = fArray.length;
- float[] tempArray = new float[temp + 1];
- copyArray(fArray, tempArray);
- tempArray[temp] = (float) objArray[i];
- fArray = tempArray;
- } else if (objArray[i] instanceof Boolean) {
- int temp = bArray.length;
- boolean[] tempArray = new boolean[temp + 1];
- copyArray(bArray, tempArray);
- tempArray[temp] = (boolean) objArray[i];
- bArray = tempArray;
- } else if (objArray[i] instanceof Character) {
- int temp = cArray.length;
- char[] tempArray = new char[temp + 1];
- copyArray(cArray, tempArray);
- tempArray[temp] = (char) objArray[i];
- cArray = tempArray;
- } else if (objArray[i] instanceof String) {
- int temp = sArray.length;
- String[] tempArray = new String[temp + 1];
- copyArray(sArray, tempArray);
- tempArray[temp] = (String) objArray[i];
- sArray = tempArray;
- }
- }
- /* 遍历输出各个数组 */
- /* 先判断是否有数据,如果有就输出 */
- if (iArray.length > 0) {
- System.out.println("int类型的数组有:");
- printArray(iArray);
- }
- if (dArray.length > 0) {
- System.out.println("double类型的数组有:");
- printArray(dArray);
- }
- if (fArray.length > 0) {
- System.out.println("float类型的数组有:");
- printArray(fArray);
- }
- if (bArray.length > 0) {
- System.out.println("boolean类型的数组有:");
- printArray(bArray);
- }
- if (cArray.length > 0) {
- System.out.println("char类型的数组有:");
- printArray(cArray);
- }
- if (sArray.length > 0) {
- System.out.println("String类型的数组有:");
- printArray(sArray);
- }
- }
- /** 不限长度往数组输入任意数据 */
- void inputArray(Object obj) {
- /*
- * 传进来的数据要存储在Object数组中,可以直接建另一个数组把原先Object的数据和传进来的数据一起拷进去.
- * (当然,也可以直接建个大点的数组,然后判断数组是否装满,然后进行扩充)
- */
- /* 定义一个临时数组Temp,将原先数组加当前传入的数组放进去 */
- Object[] temp = new Object[objArray.length + 1];
- for (int i = 0; i < temp.length; i++) {
- /* 如果为数组的最后一个数值的话(说明就是我们传进来的那个数值),放到临时数组 */
- if (i == temp.length - 1) {
- temp[i] = obj;
- } else {
- temp[i] = objArray[i];
- }
- }
- objArray = temp;
- }
- }
复制代码
源代码超出几百个字符,删除了一些不重要的,具体可以看附件。
另有个问题,就是在测试文件中,如何在控制台中,批量输入数据,然后自动识别成相对应的类型?如我输入123,可以自动识别为int?
- package array;
- import java.util.Scanner;
- public class Test {
- public static void main(String[] args) {
- Array a = new Array();
- a.inputArray("A");
- a.inputArray(true);
- a.inputArray('c');
- a.inputArray(1);
- a.inputArray(12.3);
- a.inputArray(12.3F);
- }
- }
复制代码
|
|