#java
#java
Вопрос:
У меня есть два массива символов, которые принимают две строки в качестве входных данных. Если символ с обеих сторон имеет соответствующий символ, например, после преобразования массивов символов в строку, символы A и B имеют по крайней мере один H или R, то это вернет true . Если нет, то верните false .
>char[] A = foo(A).toCharArray();
>
>char[] B = foo(B).toCharArray();
>
>System.out.println("String " A ": " Arrays.toString(A));
>
>System.out.println("String " B ": " Arrays.toString(B));
>String A: [H, , R, ]
>
>String B: [R, , R, R]
>>This will return true
>String A: [ , H, , R]
>
>String B: [H, H, , H]
>>This will return true
>String A: [H, , H, ]
>
>String B: [R, , R, ]
>>This will return false
Я в замешательстве, как создать такое правило?
Комментарии:
1. Задается ли соответствующий символ в качестве входных данных? или это любой символ из первого массива?
Ответ №1:
Вы можете использовать java.util.Set
здесь, который выдаст результат за одну итерацию. Использование java.util.TreeSet
дополнительно сокращает время выполнения, поскольку устраняет дубликаты
public static void main(String[] args) {
char[] A = "HR".toCharArray();
char[] B = "RRR".toCharArray();
Set<Character> set = new TreeSet<>();
boolean flag = false;
for(char c : A) {
set.add(c);
}
for(char c : B) {
if(set.contains(c)) {
System.out.println(true);
flag = true;
break;
}
}
if(!flag) {
System.out.println(false);
}
}
Ответ №2:
Что вы можете сделать, так это использовать For для итерации в матрице и проверки, является ли текущий элемент ‘R’ или ‘H’.
boolean returnedValue = false;
for(int i = 0; i< B.length; i ){
char currentItem = B[i];
if(currentItem == 'R' || currentItem == 'H'){
returnedValue = true;
}
}
return returnedValue;
Комментарии:
1. Где первый массив? Вы только проверяете, находятся ли ‘H’ или ‘R’ во втором массиве.
Ответ №3:
Используйте первый цикл, чтобы взять каждый элемент из первого массива.
Используйте второй цикл для проверки первого элемента внутри второго массива.
Проверьте, равно ли текущее значение в первом массиве H или R.
Если да, проверьте, есть ли он во втором массиве, и верните true .
public static boolean check() {
String s1 = "ABHEEF", s2 = "RDDFVW";
char[] arr1 = s1.toCharArray();
char[] arr2 = s2.toCharArray();
for (int i = 0; i < arr1.length; i ) {
for (int j = 0; j < arr2.length; j ) {
if(arr1[i] == 'H' || arr1[i] == 'R') {
if(arr1[i] == arr2[j])
return true;
}
}
}
return false;
}
Ответ №4:
Ну, это просто, все, что вам нужно сделать, это добавить вложенный цикл
for(int i = 0; i < A.length; i ){
for(int j = 0; j < B.length; j ){
if(if B[j] ==A [i]){
return true
}
}
}
return false;
Ответ №5:
Используя Java 1.8, вы могли бы сделать что-то вроде следующего:
//@Momir Sarac
String text1 = "b9H ello";
String text2 ="avn1c fk";
// 32 is for empty space character here, you could do i != ' ' and it would be the same
//turn text1 into intstream each int corresponding to it's char value
//filter empty space ints
//get only distinct out of them
//take a look for any match if some int is contained within text2
boolean result = text1.chars().filter(i->i != 32).distinct().anyMatch(character->text2.contains(String.valueOf(character)) || text2.lastIndexOf(character) != -1);
//print it on screen
System.out.printf("Two texts %s same letter(s).", result ? "have" : "don't have");