我必须将两个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;
}
}
答案 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。