我想解决的问题是:http://codingbat.com/prob/p128270
给定2个int数组,a和b,任意长度,返回一个包含每个数组的第一个元素的新数组。如果任一数组的长度为0,则忽略该数组。
front11({1, 2, 3}, {7, 9, 8}) → {1, 7}
front11({1}, {2}) → {1, 2}
front11({1, 7}, {}) → {1}
我的代码到目前为止:
public int[] front11(int[] a, int[] b) {
int answerindexs = 2;
if(a.length == 0 || b.length == 0)
answerindexs = 1;
if(a.length == 0 && b.length == 0)
answerindexs = 0;
int[] answer = new int[answerindexs];
for (int x = 0; x <= 1; x++){
if(a.length > 0 && x == 0)
answer[0] = a[0];
else if(b.length > 0 && x == 1)
answer[1] = b[0];
}
return answer;
}
我一直试图做的这个问题完全强调了我,因为我尝试做java的每一次尝试都没有像我想象的那样工作。 我没有通过的唯一测试是;
front11({}, {2, 8}) → {2}
因为我得到索引超出范围的错误,而我在尝试解决此特定测试时遇到问题。因为我不确定如何检查我的答案数组是否已经有一个元素作为answer.length总是2,因为它在每个索引中没有指定元素,因为它默认为零。
任何帮助表示感谢,如果有人可以在开头改进我的两个if语句(它适用于小数字,但我知道当它得到更大的数字时我不能写这样的代码)。我想使用ArrayList回答这个问题,因为我只能.add(),但是这个问题指定了一个数组,这个数组很难找到预设的插槽数。
答案 0 :(得分:1)
如果数组不为空,则使用变量并递增,而不是对索引进行硬编码。
public int[] front11(int[] a, int[] b) {
int answerindexs = 0;
answerindexs = a.length > 0 ? answerindexs + 1 : answerindexs;
answerindexs = b.length > 0 ? answerindexs + 1 : answerindexs;
int[] answer = new int[answerindexs];
//Index variable
int i = 0;
for (int x = 0; x <= 1; x++){
if(a.length > 0 && x == 0)
answer[i++] = a[0];
else if(b.length > 0 && x == 1)
answer[i] = b[0];
}
return answer;
}
答案 1 :(得分:0)
import java.util.Arrays;
public class TestBed {
public static int[] process(int[] a, int[] b) {
int[][] arrays = new int[2][];
arrays[0] = a;
arrays[1] = b;
int count = 0;
for (int i = 0; i < arrays.length; i++) {
if (arrays[i].length > 0) {
count++;
}
}
int curIndex = 0;
int[] result = new int[count];
for (int i = 0; i < arrays.length; i++) {
if (arrays[i].length > 0) {
result[curIndex++] = arrays[i][0];
}
}
return result;
}
/**
*
* @param args
*/
public static void main(String[] args) {
int[] a = {1, 2};
int[] b = {3, 4};
System.out.println(Arrays.toString(process(a, b)));
}
}
答案 2 :(得分:0)
实际上,你可以在不使用循环的情况下解决这个问题,只能使用if-clauses:
public int[] front11(int[] a, int[] b) {
// If both arrays are empty, we return the empty(!) array a and are done
if(a.length == 0 && b.length == 0){
return a;
}
// If array a is empty, we create a new array with the first value of array b
if(a.length == 0){
int[] result = {b[0]};
return result;
}
// The same for array b
if(b.length == 0){
int[] result = {a[0]};
return result;
}
// At this point we know, that both arrays are not length 0,
// so we create a new array and put the first value from a and the first from b in it
int[] result = {a[0], b[0]};
return result;
}
答案 3 :(得分:0)
public int[] front11(int[] a, int[] b) {
int[] arr=new int[0];
int[] arr1=new int[1];
int[] arr2=new int[2];
if(a.length==0 && b.length==0){
return arr;
}
if(a.length>0 && b.length>0){
arr2[0]=a[0];
arr2[1]=b[0];
return arr2;
}
if(a.length==0){
arr1[0]=b[0];
return arr1;
}
if(b.length==0){
arr1[0]=a[0];
return arr1;
}
return arr;
}