Поиск местоположения по пробелу

Итак, у меня есть следующие инструкции:

Write code to print the location of any space in the 2-character string passCode. Each space detected should print a separate statement followed by a newline. Sample output for the given program: Space at 1

Код, который я сейчас написал:

import java.util.Scanner;
public class FindSpaces {
public static void main (String [] args) {
  String passCode = "";
  passCode = "A ";
  if (Character.isWhitespace(passCode.charAt(0))){
     System.out.println("Space at " +passCode.indexOf(" "));
  }
  else if (Character.isWhitespace(passCode.charAt(1))){
     System.out.println("Space at " +passCode.indexOf(" ", 1));
  }
  else{
  }

  return;
    }
  }

Теперь это иногда срабатывает, но если у меня более одного пробела во вводе, он всегда печатает только одну строку. Если это кому-то поможет, то это из zyBooks, и я понятия не имею, как заставить его отображать вторую строку, показывающую второй пробел.

Используйте два if, а не else if, или цикл с одним if. Вам также не нужен блок else или оператор return, поскольку тип возврата main - void.

Jonny Henly 16.11.2018 18:22

Кроме того, это было бы немного проще в цикле for, если бы вы могли его использовать. Тогда вам понадобится только один if (Character.isWhitespace(passCode.charAt(i)) { S.o.p("Space at " + i);. Если вы можете использовать петлю for.

KevinO 16.11.2018 18:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
410
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Хотя длина может быть ограничена двумя, я все же думаю, что цикл for подойдет лучше:

String passCode = "";
passCode = "  ";
for (int i = 0; i < passCode.length(); i++) {
    if (passCode.charAt(i) == ' ') {
        System.out.println("Whitespace at index " + (i + 1));
    }
}

Чтобы взглянуть на ваше решение: ваш код не может вводить какие-либо выходные данные более одного раза. У вас есть if () else () - просто удалите else, и все будет в порядке:

String passCode = "";
passCode = "  ";
if (Character.isWhitespace(passCode.charAt(0))) {
    System.out.println("Space at " + passCode.indexOf(" "));
}
if (Character.isWhitespace(passCode.charAt(1))) {
    System.out.println("Space at " + passCode.indexOf(" ", 1));
}
Ответ принят как подходящий

Когда ты делаешь

if ( condition1 ) {
  doSomething();
}
else if ( condition2 ) {
  doSomethingElse();
}

else означает, что вы будете тестировать condition2 (и поэтому у вас есть шанс вызвать doSomethingElse()), только если condition1 ложный. Вам просто нужно удалить этот else из вашего кода.

Чтобы найти и распечатать расположение каждого пробела в строке, вы просто перебираете строку и проверяете, является ли текущий символ пробелом:

String str = "Find the space location";
for(int i = 0; i < str.length(); i++) {
  if (Character.isWhitespace(str.charAt(i)) {
     System.out.println("Space at " + i);
  } 
}

Добавление некоторых пояснений сделало бы этот ответ более полезным.

Sagar Zala 17.11.2018 06:17

Другие вопросы по теме