比较存储由“#”分隔的整数值的两个String数组

时间:2017-01-31 13:11:43

标签: java arrays string char int

我必须将两个String数组与用户输入的“#”分隔的整数值进行比较,如下所示: 输入1:数组的大小:

             3 

输入2 :(数组1)

           1#4#5
           3#6#7 
           5#8#9

输入2 :(数组2)

           1#3#5 
           4#6#7 
           5#7#9

它们包含相同的号码。每行的整数字符串由用户输入数组大小指定。例如:数组1的第1行= 1#4#5 = 3个整数字符串。 如果数组输入在任何行中都是空白的,则输出应为“无效”。

如果两个数组中的整数值相同,则输出应为“是”,而不管它们在数组中的位置,即它们是否相等,否则输出应为“否”。 我的代码传递的测试用例非常少,并且只有当两个数组相互转置时(从输入格式看),才能提供正确的输出。当两个数组中的所有整数字符串相同时,无论它们在数组中的位置如何,它都不会给出正确的输出。

例如。 1:测试用例通过:

上例中数组的输出为yes

例如:2:测试用例失败:

输入1:数组的大小:

             2 

输入2 :(数组1)

           1#6
           3#4 

输入2 :(数组2)

           6#3 
           4#1 

输出:no

这是我的代码:

import java.util.Scanner;
import java.util.Arrays;

public class StringComparison
{
   public static void main (String[]args)
{
  Scanner input = new Scanner (System.in);
  // Input the array size
  System.out.println("Enter the array size:");
  int size = input.nextInt();
  input.nextLine();
  String[] s1 = new String[size];
  String[] s2 = new String[size];

  // Input 1st array elements
  System.out.println("Enter the 1st array elements:");
  for (int i=0;i<size; i++)
  {
    s1[i]= input.nextLine();
  }
  // Input 2nd array elements
  System.out.println("Enter the 2nd array elements:");
   for (int i=0;i<size; i++)
  {
    s2[i]= input.nextLine();
  }
   // Check for equivalence
  System.out.println(equivalent (size, s1, s2));

}

  public static String equivalent (int input1, String[]input2, String[]input3)
  {
    String result =null;
    StringBuilder sb1 = new StringBuilder();
    StringBuilder sb2 = new StringBuilder();
    char []b1 = new char[input1*input1];
    char[]b2 = new char[input1*input1];
    int[] num1 = new int[input1*input1];
    int[] num2 = new int[input1*input1];
   for (int i=0; i<input1;i++)
   {
     String[] a1 = input2[i].split("#");
     // if the user inputs are less or more than required
     try 
     {
       for (int j=0;j<input1;j++)
      sb1.append (a1[j]);
     }
     catch (java.lang.ArrayIndexOutOfBoundsException e)
     {
      result ="invalid";
      return result;
     }
     }

   for (int i=0; i<input1;i++)
   {
     String[] a2 = input3[i].split("#");
     // if the user inputs are less or more than required
    try 
     {
       for (int k=0;k<input1;k++)
      sb2.append (a2[k]);
     }
     catch (java.lang.ArrayIndexOutOfBoundsException e)
     {
      result ="invalid";
      return result;
     }
     }

  // Storing the contents of the StringBuilder objects in a char array
   sb1.getChars (0,((input1*input1)-1),b1,0);
   sb2.getChars (0,((input1*input1)-1),b2,0);

   // Converting the elements of the char array into integers and storing it in an int array
   for (int p=0; p<((input1*input1)-1);p++)
   {
     num1[p] = Character.digit( b1[p],(input1*input1)-1); 
   }
    // Converting the elements of the char array into integers and storing it in an int array
   for (int q=0; q<((input1*input1)-1);q++)
   {
     num2[q] = Character.digit( b2[q],(input1*input1)-1); 
   }
   // Sorting the two integer arrays
    Arrays.sort (num1);
    Arrays.sort (num2);

   if (Arrays.equals (num1,num2))
   {
     result = "yes"; 
   }
    else
   {
    result ="no";
   }
    return result;
   }
}

2 个答案:

答案 0 :(得分:1)

我已经重写了你的等效方法。我希望可以使用ArrayList。

private static String equivalent(String[] s1, String[] s2) {
    ArrayList<Integer> num1 = new ArrayList<Integer>();
    ArrayList<Integer> num2 = new ArrayList<Integer>();
    for (String str : s1) {
        String[] storage = str.split("#");
        for (String st : storage) {
            num1.add(Integer.parseInt(String.valueOf(st)));
        }
    }
    for (String str : s2) {
        String[] storage = str.split("#");
        for (String st : storage) {
            num2.add(Integer.parseInt(String.valueOf(st)));
        }
    }
    Collections.sort(num1);
    Collections.sort(num2);
    if (num1.equals(num2)) {
        return "yes";
    } else {
        return "no";
    }

}

这可以用更少的代码实现您想要的目标。如果您需要帮助理解或有任何其他问题随时可以询问

答案 1 :(得分:0)

用于生成整数数组的逻辑是错误的并且它产生了无效的条目。尝试打印数组值。所有测试用例都将失败。

尝试以下将char转换为整数

num2[q] = Integer.parseInt(String.valueOf(b2[q]));
num1[p] = Integer.parseInt(String.valueOf(b1[p]));

注意:示例1应为“否”。第二个输入中没有8。