2个列表的值是相等的,但我被告知他们不是吗?

时间:2016-11-24 07:49:08

标签: java eclipse

import java.util.Scanner;

public class StrictlyIdentical {
 private static Scanner input;

public static void main(String[] args) {
  input = new Scanner(System.in);

  System.out.print("Enter 5 elements for list1:");
  int[] list1 = new int[input.nextInt()];
  for (int i = 0; i < list1.length; i++) {
   list1[i] = input.nextInt();
  }

  System.out.print("Enter 5 elements for list2:");
  int[] list2 = new int[input.nextInt()];
  for (int i = 0; i < list2.length; i++) {
   list2[i] = input.nextInt();
  }

  if (equals(list1, list2)) {
   System.out.println("The two lists are strictly identical");
  } else {
   System.out.println("The two lists are not strictly identical");
  }

 }

 public static boolean equals(int[] list1, int[] list2) {

  if (list1.length != list2.length)
   return false;

  for (int i = 0; i < list2.length; i++) {
   if (list1[i] != list2[i])
    return false;
  }

  return true;

 }
}

这就是我所拥有的。当提示输入列表1时:我输入1 2 3 4 5.然后当提示输入列表2时,我输入1 2 3 4 5.我继续得到两个列表不完全相同,但是当列表中的所有值都是等于并且两个列表的值相同然后我得到两个列表严格相同。

4 个答案:

答案 0 :(得分:2)

问题在于您输入的是列表大小:

int[] list1 = new int[input.nextInt()];

int[] list2 = new int[input.nextInt()];

因此,如果您没有在值之前输入它,您将有一个大小为1的列表,另一个大小为3.

您可以将列表更改为固定大小:

int[] list1 = new int[5];

或者更改提示:

System.out.print("Enter the size of list1 followed by its elements:");

您还可以动态地影响数组的大小,但您必须更改代码的逻辑:

System.out.print("Enter elements for list1:");
int[] list1 = Arrays.stream(input.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();

System.out.print("Enter elements for list2:");
int[] list2 = Arrays.stream(input.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();

答案 1 :(得分:0)

在这一行:

int[] list1 = new int[input.nextInt()];

你实际上创建了一个大小为1的列表(至少 - 这是你在输入中写的内容),在这里:

list1[i] = input.nextInt();

输入2作为唯一值。

此外,您的Scanner继续与上面的一致 - 创建第二个大小为3的列表并输入4,5和1。 (阅读更多here关于nextInt()Scanner

所以,你有两个选择:

  • 获取有关事前列表大小的用户输入。
  • 使用值初始化数组,例如:int[] arr = new int[5];

答案 2 :(得分:0)

设置数组5并解决。

Equals方法正在寻找。

      System.out.print("Enter 5 elements for list1:");
      int[] list1 = new int[5];   <<<<
      for (int i = 0; i < list1.length; i++) {
       list1[i] = input.nextInt();
      }

      System.out.print("Enter 5 elements for list2:");
      int[] list2 = new int[5];    <<<<<<
      for (int i = 0; i < list2.length; i++) {
        list2[i] = input.nextInt();
      }

答案 3 :(得分:0)

我建议您使用列表而不是数组来解决此问题。那会打开 list1.equals(list2)用于比较,而不是编写一种无法防弹的自制equals方法; - )

所以试试这样:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StrictlyIdentical {
    private static Scanner input;

public static void main(String[] args) {
    input = new Scanner(System.in);

    System.out.print("Enter 5 elements for list1:");
    List<Integer> list1 = new ArrayList<Integer>();
    for (int i = 0; i < 5; i++) {
        list1.add(input.nextInt());
        }

    System.out.print("Enter 5 elements for list2:");
    List<Integer> list2 = new ArrayList<Integer>();
    for (int i = 0; i < 5; i++) {
        list2.add(input.nextInt());
        }

    if (list1.equals(list2)) {
        System.out.println("The two lists are strictly identical");
        } else {
        System.out.println("The two lists are not strictly identical");
        }
    }
}