я должен сравнить два строковых массивов с целыми числами, разделенными входом «#» пользователем следующим образом: вход 1: Размер массива:Сравнение двух строковых массивов хранящие целочисленных значений, разделенных «#»
3
вход 2: (Массив 1)
1#4#5
3#6#7
5#8#9
вход 2: (Массив 2)
1#3#5
4#6#7
5#7#9
Т hey содержат то же самое. целых строк на строку, как определено размером массива ввода пользователя. Например: 1-я строка массива 1 = 1#4#5
= 3 целых строки. В случае, если входные данные массива пусты в любой строке, выход должен быть «недействительным».
Выход должен быть «да», если целочисленные значения в обоих массивах одинаковы независимо от их положения в массиве, т. Е. Если они эквивалентны, в противном случае вывод должен быть «нет». Мой код пропускает очень мало тестовых примеров и в основном дает правильный вывод только тогда, когда два массива транспонируются друг с другом (если смотреть из формата ввода). Он не дает правильного вывода, когда все целые строки в обоих массивах одинаковы независимо от их позиций в массиве.
например. 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;
}
}
Почему бы не сделать это двухмерным массивом?было бы намного проще сравнивать тогда – XtremeBaumer
Я не могу реализовать двумерный массив для строк в этом случае, так как он может не соответствовать пользовательскому формату ввода. –
имеет ли пользовательский ввод такой формат? – XtremeBaumer