【发布时间】:2017-06-16 22:41:10
【问题描述】:
我必须将两个字符串数组与用户输入的由“#”分隔的整数值进行比较,如下所示: 输入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#4#5 = 3 个整数字符串。
如果数组输入的任何一行都是空白的,则输出应该是“无效的”。
如果两个数组中的整数值相同,而不管它们在数组中的位置如何,输出应该是“yes”,即如果它们是等价的,否则输出应该是“no”。 我的代码通过了很少的测试用例,并且仅在两个数组相互转置时(从输入格式来看)才给出正确的输出。当两个数组中的所有整数字符串都相同时,无论它们在数组中的位置如何,它都不会给出正确的输出。
例如。 1:测试用例通过:
上例中数组的输出是yes
eg.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;
}
}
【问题讨论】:
-
为什么不把它做成一个二维数组呢?那么比较起来会容易得多
-
在这种情况下,我不会为字符串实现二维数组,因为它可能不符合用户输入格式。
-
用户输入是否必须具有该格式?
-
是的。它必须是那种格式。
-
我不会为字符串实现二维数组 只是
String[][] name = new String[value][value];
标签: java arrays string char int