我有两个不同大小的数组。 情景1。
A=[1,2,3]
b=[1,3,2,4]
情景2。
a=[1,3,2,4]
b=[1,3,2,]
如何通过索引将数组与索引匹配,并在有任何差异时显示结果。
当数组的长度相同时,我能够得到结果。但是当数组大小A比B短或反之时,然后得到IndexOUTofBoundexception
显而易见的原因是它正在尝试访问不存在的元素。
for (int j=i;j<=i;j ++)
if (A[i].equals(B[i])) {
System.out.println(A[i] + "\t " + B[i]);
} else {
NumberOfDifference++;
System.out.println(arrayLines1[i] + "--" + arrayLines2[i]);
}
如果两个数组之间存在差异,则只需要与元素一起显示。
在方案2中,Array a
个案例中包含新元素4,但Array b
具有空值。
答案 0 :(得分:0)
显然,您只能将匹配的索引与最短的索引进行比较。这个问题没有说明你应该对其余元素做些什么,但是,为了论证,我们只是打印它们:
int sharedLength = Math.min(a.length, b.length);
for (int i = 0; i < sharedLength; ++i) {
if (a[i].equals(b[i])) {
System.out.println(a[i] + "\t" + b[i]);
} else {
System.out.println(a[i] + "--" + b[i]);
}
// Here, you could either use an if statement to find the longer array
// Or, more elegantly(?), just loop over both of them.
// One of these loops will not execute because the array is too short:
for (int i = sharedLength; i < a.length; ++i) {
System.out.println(a[i] + "--");
}
for (int i = sharedLength; i < b.length; ++i) {
System.out.println("\t--" + b[i]);
}
答案 1 :(得分:0)
int m = A.size()
int n = B.size()
i =0
NumberOfDifference = 0
while (i< m && i<n)
if (a[i]==b[i]){
System.out.println(A[i] + "\t " + B[i]);
}else{
NumberOfDifference++;
System.out.println(A[i] + "--" + B[i]);
}
i++;
}
while (i<m) {
NumberOfDifference++;
System.out.println(A[i] + "--" + "NO Element");
i++
}
while (i<n) {
NumberOfDifference++;
System.out.println("No Element" + "--" + B[i]);
i++;
}
答案 2 :(得分:0)
这种方式可以让你找出不同的元素:
for (int i=0; i < Math.max(A.length, B.length); i++) {
if (i >= A.length) {
NumberOfDifference++;
System.out.println( "--" + B[i]);
} else if (i >= B.length) {
NumberOfDifference++;
System.out.println(A[i] + "--" );
} else if (A[i].equals(B[i])) {
System.out.println(A[i] + "\t " + B[i]);
} else {
NumberOfDifference++;
System.out.println(A[i] + "--" + B[i]);
}
}
这是一种简单的方法:
Arrays.equals(A,B)
答案 3 :(得分:0)
您可以尝试使用较短数组的长度作为最大值来迭代数组。
例如:
....
private boolean isLastPageSwiped;
private int counterPageScroll;
....
这应该为一个选项执行Job,现在我想你可以扭转这个实现,为A长于B的情况添加相同的选项。
希望这是有帮助的!
答案 4 :(得分:0)
问题并不像其他人评论的那样清楚...... 因此,我假设您需要通过索引比较进行索引并显示额外的元素。
所以你可以做下面的事情:
首先找到索引较小的数组并使用该数组循环: 让我们说A = [1,2,3] B = [1,3,2,4] 所以我们遍历了A的长度。
int size = A.length() < B.length() ? A.length() : B.length();
for (int i=0;i < size; i++)
{
if (A[i].equals(B[i]))
{
System.out.println(A[i] + "\t " + B[i]);
}
else
{
NumberOfDifference++;
}
现在您可以遍历更大的数组并显示差异:
确定以相同方式遍历的数组:
if(A.length() < B.length())
{
for(int i=size; i < A.length(); i++)
{
System.out.println(A[i]);
}
}
else
{
for(int i=size; i < B.length(); i++)
{
System.out.println(B[i]);
}
}
答案 5 :(得分:0)
在那里,您可以使用数组列表但是如果您坚持使用数组 这是我的解决方案:
//你有两个数组:&#34; a []&#34;和&#34; b []&#34;
if (a.length == b.length){ // the code that you say have have written
}
else if (a.length > b.length)
{
int temp[] = new int[a.length]; // initialize a int[] with length of array a[]
for (int i = 0 ;b.length>i ; i++){
temp[i] = b[i];
}
for (int i = b.length; a.length> i ; i++)
{
temp[i] = -1 ; // some vaue you know wont be in your array
} // now you have two array with same length
int NumberOfDifference = 0 ;
for (int i=0 ; i<a.length;i++){
if (a[i]==(b[i])) {
System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]);
}
else
{
NumberOfDifference++;
System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]));
}
}
} // a.length < b.length
else {
int temp[] = new int[b.length]; // initialize a int[] with length of array b[]
for (int i = 0 ;a.length>i ; i++){
temp[i] = a[i];
}
for (int i = a.length; b.length> i ; i++)
{
temp[i] = -1 ; // some vaue you know wont be in your array
} // now you have two array with same length
int NumberOfDifference = 0 ;
for (int i=0 ; i<b.length;i++){
if (b[i]==(a[i])) {
System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]);
}
else
{
NumberOfDifference++;
System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]));
}
}
}