的Java:解析阵列正负阵列
问题描述:
下面是我做了什么,以及它是否工作正常,但我想使阴性和阳性的文章没有固定的数字,所以代码可以在任何阵列上运行:的Java:解析阵列正负阵列
int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82};
int[] negative = new int[3];
int[] positive = new int[6];
int n = 0;
int p = 0;
for(int i=0;i<array.length;i++){
if(array[i]<0){
negative[n] = array[i];
n++;
}else{
positive[p] = array[i];
p++;
}
}
System.out.println("Negative array : " + Arrays.toString(negative));
System.out.println("Positive array : " + Arrays.toString(positive));
任何意见?
答
您可以按照两种不同的方式:
- 计数消极和积极的第一步,产生负面和正面和阵列填充它们
- 创建
List
为正面和负面,填充它们并将它们转换为数组
如果不需要有正数组和负数组,也可以将原始数组拆分为两个列表(而不是两个数组)。
首先可能性
int numPositives = 0;
int numNegatives = 0;
for(int i=0;i<array.length;i++){
if (array[i] >= 0) {
numPositives++;
} else {
numNegatives++;
}
}
int[] negative = new int[numNegatives];
int[] positive = new int[numPositives];
int n = 0;
int p = 0;
for(int i=0;i<array.length;i++){
if(array[i]<0){
negative[n] = array[i];
n++;
}else{
positive[p] = array[i];
p++;
}
}
第二种可能性
List<Integer> positivesList = new ArrayList<Integer>();
List<Integer> negativesList = new ArrayList<Integer>();
for (int i = 0; i < array.length; i++) {
if (array[i] >= 0) {
positivesList.add(array[i]);
} else {
negativesList.add(array[i]);
}
}
int[] positive = positivesList.toArray(new int[positivesList.size()]);
int[] negative = negativesList.toArray(new int[negativesList.size()]);
答
使用List
,它没有固定的大小:
int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82};
List<Integer> negative = new ArrayList<>();
List<Integer> positive = new ArrayList<>();
for(int i = 0;i<array.length;i++){
if(array[i]<0){
negative.add(array[i]); // Add negative number
}else{
positive.add(array[i]); // Add positive number
}
}
答
爪哇8引入了流包括拉姆达谓词过滤:
int[] pos = Arrays.stream(array).filter((int i) -> i >= 0).toArray();
int[] neg = Arrays.stream(array).filter((int i) -> i < 0).toArray();
答
这里有一个不涉及列表的小解决方案,也不需要预先计算负值的数量。这就是使用本地解决方案来复制尚未找到的值。我也改变了它,所以负值和正值都存储在一个二维数组中。
public static void main(String[] args) {
int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82};
int[][] vals = new int[2][0];
for(int i=0;i<array.length;i++){
if(array[i]<0){
int[] buffer = new int[vals[0].length+1]; // create array with one more value
System.arraycopy(vals[0], 0, buffer, 0, vals[0].length); // Copy old values
buffer[buffer.length-1] = array[i]; // assign new value
vals[0] = buffer; // assign old and new values
} else {
int[] buffer = new int[vals[1].length+1]; // create array with one more value
System.arraycopy(vals[1], 0, buffer, 0, vals[1].length); // Copy old values
buffer[buffer.length-1] = array[i]; // assign new value
vals[1] = buffer; // assign old and new values
}
}
System.out.println("Negative array : " + Arrays.toString(vals[0]));
System.out.println("Positive array : " + Arrays.toString(vals[1]));
}
答
作为每@davide两个方法可以用来
1)计数的阴性和阳性在第一步骤中,产生用于负阵列和阳性和填充它们。
int numPositives = 0;// davide example
int numNegatives = 0;
for(int i=0;i<array.length;i++){
if (array[i] >= 0) {
numPositives++;
} else {
numNegatives++;
}
}
int[] negative = new int[numNegatives];
int[] positive = new int[numPositives];
int n = 0;
int p = 0;
for(int i=0;i<array.length;i++){
if(array[i]<0){
negative[n] = array[i];
n++;
}else{
positive[p] = array[i];
p++;
}
}
2)创建正面和负面清单,填充它们并将它们转换成数组
int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82};
List<Integer> negativeList = new ArrayList<>();
List<Integer> positiveList = new ArrayList<>();
for(int i = 0;i<array.length;i++){
if(array[i]<0){
negativeList.add(array[i]); // Add negative number
}else{
positiveList.add(array[i]); // Add positive number
}
}
//由于JAVA 8
int negativeArray[] = negativeList.stream().mapToInt(i->i).toArray();
int positiveArray[] = negativeList.stream().mapToInt(i->i).toArray();
我想有两个数组,而不是列表。如何生成负数和正数的数组? –
谢谢你们。它像我想要的那样工作:) –