#java #arrays
#java #массивы
Вопрос:
Попытка создать массив, чтобы найти вхождение символа в заданную строку.
public static void main(String[] args)
{
String s1 = "java";
char ch = 'a';
System.out.println(indexOf(s1, ch));
}
public static int indexOf(String s, char ch)
{
int count = 0;
while (count < s.length())
{
if (s.charAt(count) == ch)
return count;
else
count = 1;
}
return -1;
}
Таким образом, результат должен быть 1 3
Комментарии:
1. Где должен быть массив? Потому что ваш код в порядке на данный момент
2. @azro int[] arr = indexOf(s1, ch); Что-то вроде этого в основном методе?
3. И что вы помещаете в этот массив? все индексы, в которых вы нашли значение?
4. Да, поэтому всякий раз, когда ch встречается в строке s1, индекс, в котором он встречается, будет скопирован и распечатан
5. Пожалуйста, отредактируйте свой пост и поделитесь примером ввода / вывода, который вы ожидаете
Ответ №1:
Из-за имеющихся у вас ограничений вам придется сначала создать массив с размером, равным длине строки (при условии, что все символы одинаковы). Затем выполните итерацию символов данной строки и сохраните индекс, в котором найдено совпадение с данным символом. Наконец, скопируйте инициализированные позиции этого массива в другой массив и верните то же самое. В случае, если совпадение не найдено, просто верните new int[] { -1 }
.
ДЕМОНСТРАЦИЯ:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test
String s1 = "java";
char ch = 'a';
int[] array = indexOf(s1, ch);
System.out.println(Arrays.toString(array));
array = indexOf(s1, 'x');
System.out.println(Arrays.toString(array));
}
public static int[] indexOf(String s, char ch) {
// The maximum size can be the length of the string i.e. when all chars are same
int[] array = new int[s.length()];
int count = 0;
for (int i = 0; i < s.length(); i ) {
if (s.charAt(i) == ch) {
array[count ] = i;
}
}
if (count == 0) {
return new int[] { -1 };
} else {
// Create an array result[], of the size = count and copy elements from array[]
// to it
int[] result = new int[count];
for (int i = 0; i < count; i ) {
result[i] = array[i];
}
return resu<
}
}
}
Вывод:
[1, 3]
[-1]
Комментарии:
1. Извините, но забыл упомянуть, что метод — это int[], а не просто int . Предполагается, что выходные данные должны быть 1 и 3, поскольку ‘a’ встречается дважды в «java»
2. @DanielAdams — Я обновил ответ на основе этого разъяснения. Я добавил новую функцию
count
для этого нового требования. Не стесняйтесь комментировать в случае каких-либо дальнейших проблем / сомнений.3. @DanielAdams — Я обновил ответ на основе этого дальнейшего разъяснения. Не стесняйтесь комментировать в случае каких-либо дальнейших проблем / сомнений.
Ответ №2:
Чтобы получить все индексы, в которых символ встречается в строке, вам нужно значение, которое отмечает позицию в строке, а другое — число совпадений, чтобы узнать позицию в результирующем массиве, и в конце вырезать массив, чтобы удалить ведущие неиспользуемые поля
public static int[] indexOf(String s, char ch) {
int count = 0;
int[] result = new int[s.length()];
for (int i = 0; i < result.length; i ) {
if (s.charAt(i) == ch) {
result[count] = i;
count = 1;
}
}
return Arrays.copyOf(result, count); // cut to keep indexes only
}
ДЕМОНСТРАЦИЯ
System.out.println(Arrays.toString(indexOf("java", 'a'))); // [1, 3]
System.out.println(Arrays.toString(indexOf("abahauayata", 'a'))); // [0, 2, 4, 6, 8, 10]
System.out.println(Arrays.toString(indexOf("aaaaaaabbbb", 'a'))); // [0, 1, 2, 3, 4, 5, 6]
Комментарии:
1. @DanielAdams строка toString предназначена только для отображения результата ^^ Мне надоели запрещенные методы, извините, я больше не буду изменять. Из моего кода вы можете изменить несколько, чтобы удовлетворить ваши требования
Ответ №3:
public static int[] indexOf(String s, char ch) {
int total = 0;
for (int i = 0; i < s.length(); i )
if (s.charAt(i) == ch)
total ;
if (total == 0)
return new int[0];
int[] res = new int[total];
for (int i = 0, j = 0; i < s.length(); i )
if (s.charAt(i) == ch)
res[j ] = i;
return res;
}