繁体   English   中英

用for循环比较Java中的两个数组

[英]Comparing two arrays in java with for loop

我在此程序上遇到困难。 我必须通过从控制台读取两个数组来比较两个数组,然后在用户输入它们之后,打印一条语句,确定它们是否为真。 我不确定是否可以使用compare函数,但是必须使用for循环来完成。

这是我尝试过的:

import java.util.Scanner;

@SuppressWarnings("unused")
public class TwoArrays {
    @SuppressWarnings("unused")
    public static void main(String[] args) {

        Scanner input1 = new Scanner(System.in);
        System.out.println("enter the first array");
        String firstArrayAsString = input1.nextLine();

        System.out.println("enter the second array");
        String secondArrayAsString = input1.nextLine(); 

        if (firstArrayAsString. length() != secondArrayAsString.length()){
            System.out.println("false.arrays are not equal");       
        } else {
            int arrayLen = firstArrayAsString.length();
            char[] firstArray = firstArrayAsString.toCharArray();
            char[] secondArray = secondArrayAsString.toCharArray();

            int i = 0;
            while (i < arrayLen && firstArray[i] == secondArray[i]); {
                i++;
            }

            if (i == arrayLen) {
                System.out.println("true.they are equal");
            } else {
                System.out.println("False.they are not equal");
            }
        }
        input1.close();
    }
}
boolean isEqual = true;

for(int i=0;i<arrayLen;i++){
    if(firstArray[i] != secondArray[i]){
        System.out.println("False.they are not equal");
        isEqual = false;
        break;
    }
}
if(isEqual){
    System.out.println("true.they are equal");
}

如果那不起作用,请尝试将(firstArray [i]!= secondArray [i])更改为(!(firstArray [i] .equals(secondArray [i]))))或类似的方法。

 int i = 0;
 while (i < arrayLen && firstArray[i] == secondArray[i]); {
 i++;
 }

将此更改为以下内容:

boolean isEqual = true;
for(int i=0;i<arrayLen;i++){
  if(firstArray[i]!=secondArray[i]) {
  isEqual = false;
  break;
  } 
}

最后,您可以使用标志“ isEqual”显示结果

if(isEqual) System.out.println("Equal");
else System.out.println("Not Equal");

您的问题是此代码

while (i < arrayLen && firstArray[i] == secondArray[i]); {

末尾有分号; // 去掉它

如前所述

if (i == arrayLen) {

应该

 if (i == arrayLen - 1) {

注意

您使用过的警告

@SuppressWarnings("unused") 

可能在告诉您一些有用的信息。

试试这个代码。

char[] firstArray = {'a', 'b', 'c'};
char[] secondArray = {'a', 'b', 'c'};

if (firstArray.length != secondArray.length) {
    System.out.println("False.they are not equal");
} else {
    boolean isEqual = true;
    for (int i = 0; i < firstArray.length; i++) {
        if (firstArray[i] != secondArray[i]) {
            System.out.println("False.they are not equal");
            isEqual = false;
            break;
        }
    }
    if (isEqual)
        System.out.println("true.they are equal");
}

我将其更改为使用charAt(int)函数,而不是将值更改为数组。 由于您将它们作为字符串读取,因此只需将它们作为字符串进行比较,如下所示:

if(firstArrayAsString.length() != secondArrayAsString.length()){
   return false;
} else{
   for(int i = 0; i < firstArrayAsString.length(); i++){
      if(firstArrayAsString.charAt(i) != secondArrayAsString.charAt(i){
         return false;
      }
   }
   return true;
}

这首先检查数组的大小是否相同。 如果它们不同,我们已经可以说它们不相等。 如果它们的大小相同,请遍历并确保每个索引处的字符匹配。 如果在任何时候我们发现不匹配的字符,我们就知道这是不相等的。 如果我们遍历整个事物而没有发现差异,则两个数组相等。

我想补充一点,如果不需要使用for循环,为什么不使用:

firstArrayAsString.equals(secondArrayAsString);

比较两个字符串值?

次要编辑

重读您的问题,我看到您说您不能使用equals方法,但是我选择将此保留在我的答案中,作为将来读者的可能选择。

BufferedReader existFile = new BufferedReader(
            new FileReader("D:/1.txt"));
    BufferedReader recievedFile = new BufferedReader(
            new FileReader("D:/2.txt"));
    String str, str1 = null;
    List<String> list = new ArrayList<String>();
    List<String> list1 = new ArrayList<String>();

    while ((str = existFile.readLine()) != null) {
        list.add(str);

    }
    while ((str1 = recievedFile.readLine()) != null) {
        list1.add(str1);
    }

    String[] stringArr = list.toArray(new String[list.size()]);
    String[] stringArr1 = list1.toArray(new String[list1.size()]);

    for (int i = 0; i < stringArr1.length; i++) {
        for (int j = 0; j < stringArr.length; j++) {
            if (stringArr1[i].equalsIgnoreCase(stringArr[j])) {
                System.out.println(stringArr1[i]);
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM