Как мне исправить мой метод Java, чтобы правильно перебрать строку? - PullRequest
0 голосов
/ 25 октября 2018

Мне нужна серьезная помощь.

Мое задание - распознать строчную строку и вернуть утверждение true или false, несмотря на присутствие других символов или слов.До сих пор я мог распознать строку в нижнем регистре, но мой код по-прежнему возвращает значение ИСТИНА, если слово все в верхнем регистре;Я только хочу, чтобы он распознавал строчные значения.

Назначение: Напишите программу, которая принимает строку строки и печатает true, если буквы моего имени («john») появились в строке в том же порядке, все в нижнем регистре.Обратите внимание, что между буквами моего имени могут быть другие символы.

Вот мой код:

import java.util.Scanner;

class Main {

    public static void main(String[] args) {
        boolean output = Check();
        if (output == true) {
            System.out.println("true");
        }

        else if (output == false) {
            System.out.println("false");
        }
    }

    public static boolean Check() {
        String random;
        Scanner sc = new Scanner(System.in);
        random = sc.nextLine();
        String word = "john";

        for (int i = 0; i < word.length(); i++) {
            if (random.contains(word.substring((i)))) {
                return true;
            }
        }
        if (random.contains("JOHN")) {
            return false;
        }
        return false;
    }
}

Любая помощь будет большой благодарностью.Некоторые примеры выходных данных:

Пример ввода 1: привет Джон Пример вывода 1: false

Пример ввода 2: j123o23h56n Пример вывода 2: true

Пример ввода 3: joh'nПример вывода 3: true

Пример ввода 4: ho0jn Пример вывода 4: false

Пример ввода 5: J2j # @ oh123 $ NNNnn Пример вывода 5: true

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете просто сделать это (хотя я не понял ваше условие для прописных букв; этот метод Check может определить, появляются ли j, o, h, n в строке в правильном порядке),

  public static boolean Check(){
     String random;
     Scanner sc = new Scanner(System.in);
     random = sc.nextLine();


     HashMap<String, Boolean> map  =new HashMap<String, Boolean>();
     for(int i=0;i<random.length();i++){
         if(map.size() == 0){
             //find j
             if(random.charAt(i) == 'j'){
                 map.put("j", true);
             }
         }else if(map.containsKey("j") && map.size() == 1){
             //find o
             if(random.charAt(i) == 'o'){
                 map.put("o", true);
             }
         }else if(map.containsKey("o")&& map.size() == 2){
             //find h
             if(random.charAt(i) == 'h'){
                 map.put("h", true);
             }
         }else if(map.containsKey("h")&& map.size() == 3){
             //find n
             if(random.charAt(i) == 'n'){
                 map.put("n", true);
             }
         }
     }
   return map.size() == 4;
}

В качестве альтернативы, вы также можете использовать стек для решения этой проблемы,

public static boolean Check(){
     String random;
     Scanner sc = new Scanner(System.in);
     random = sc.nextLine();


     ArrayDeque<Character> stack = new ArrayDeque<Character>();
     stack.push('n');
     stack.push('h');
     stack.push('o');
     stack.push('j');
     for(int i=0;i<random.length();i++){
       if(random.charAt(i) == stack.peek()){
         stack.pop();
       }

       if(stack.size() == 0){
         return true;
       }

     }

     return false;
}
0 голосов
/ 25 октября 2018

Вам нужно написать логику, в которой вы выбираете каждый символ из строки "john" и сравниваете его по порядку, все ли они встречаются в этом порядке или нет.В тот момент, когда он находит все символы, найденные во входной строке, он немедленно возвращает true без необходимости дополнительного сканирования входной строки.Вы можете написать что-то вроде этого,

public static boolean Check() {
    String random;
    Scanner sc = new Scanner(System.in);
    random = sc.nextLine();
    String word = "john";
    sc.close();

    int findIndex = 0;
    char findChar = word.charAt(findIndex);
    for (char c : random.toCharArray()) {
        if (findChar == c) {
            findIndex++;
            if (findIndex == word.length()) {
                return true;
            }
            findChar = word.charAt(findIndex);
        }
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...