黑马程序员技术交流社区
标题:
不同类型数组不限长度输入,并根据不同类型输出
[打印本页]
作者:
zaydon369
时间:
2015-8-1 00:36
标题:
不同类型数组不限长度输入,并根据不同类型输出
具体不多说,见刚写的源文件,注释都有说明.
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);
}
}
复制代码
Array.zip
2015-8-1 00:29 上传
点击文件名下载附件
1.94 KB, 下载次数: 60
java源码
作者:
wx_HWRW5aF7
时间:
2015-8-1 00:41
不错赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2