Word Anagram Java

Здравейте,колеги!Бихте ли помогнали със следната задача,тъй като ми изкарва 40/100 и не мога да разбера къде ме спъва решението.Ето го и него:https://pastebin.com/2RSrnH6x
Благодаря предварително!

1 Like

Здравей,
когато дължините на началната и текущата дума са еднакви, защо проверяваш само 1 елемент от тях дали съвпада?
Би трябвало да провериш всичките, защото този един по случайност може да си е на мястото :slight_smile:

if (inputarr.length == word.length) {
if (inputarr[i] == word[i]) {
System.out.println(“Yes”);
}

Пробвай с примерен вход, който трябва да изкара 3 х “No”, за да видиш какво става:

abcd
3
abbb
bbbb
aaca

пс. това сортиране можеш да го изкараш извън цикъла, защото тази дума си е една и съща и няма смисъл да ти я сортира N пъти: Arrays.sort(inputarr);

Успех :slight_smile:

Благодаря ти!Оправих се с Arrays.equals и ги сравних!

1 Like

Здравейте, имам малко странен въпрос за тази задача, но загубих много време, а не мога да разбера какво точно се случва - в Системата ми я приема за вярна, дава ми 100 точки, но когато тествам в IntelliJ Аутпутът ми не излиза както трябва: първите 5 отговора излизат веднага щом пейстна инпута, без да съм сложила enter, а последният излиза само ако после натисна enter, не знам дали грешката е в мен, ако и други са срещнали същия проблем, моля да споделят :slightly_smiling_face:

Това е кодът ми:
import java.util.Arrays;
import java.util.Scanner;
import java.util.ArrayList;

public class WordAnagrams {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String word = sc.nextLine();
char[] wordChar = word.toLowerCase().toCharArray();
Arrays.sort(wordChar);
// word =word.replaceAll("\s", “”);
int wordsNumber = Integer.parseInt(sc.nextLine());
boolean[] answer = new boolean[wordsNumber];

    for (int i = 1; i <= wordsNumber; i++) {
        String currentWord = sc.nextLine();
       // answer = new boolean[i];

        if (word.length() == currentWord.length()) {
                char[] currentWordChar = currentWord.toLowerCase().toCharArray();
                Arrays.sort(currentWordChar);
                if (Arrays.equals(wordChar, currentWordChar)) {
                    //answer[i] = true;
                    System.out.println("Yes");
                } else {
                  //  answer[i] = false;
                    System.out.println("No");
                }

            } else {
              //  answer[i] = false;
            System.out.println("No");

                }
            }
        }
    }

Това получавм когато пейстна инпута


когато натисна enter излиза и последният отговор

Дебъгвах много пъти и интересното е, че там всичко изглежда съвсем в реда на нещата

Здравей,

пробвай да не пействаш input-а, а да го пишеш ред по ред (може и да дебъгнеш), и ще си отговориш :slight_smile:
Като пействаш няколко реда за input наведнъж, резултатът изглежда малко по-объркано. Реално дори да не натиснеш enter, а какъвто и да е др.input пак ще се отпечата последният ред (който ще отговаря за последната дума от input-а) >>>
word

Реално ти обработваш всяка дума веднага след input-а й (и съответно печаташ Yes/No) и след това повтаряш това за следващата - това ще е ясно видимо като Input-ваш ред по ред:)
Другият вариант, при който output-ът сигурно ще ти изглежда по-добре, е ако запишеш думите, които следва да бъдат обработени, в един списък или масив и ги пуснеш в цикъл една по една и на всяка отпечатваш резултата Yes/No (както колегата от горния коментар го е правил) - тогава ще ти изглежда по-добре:)

1 Like

Много благодаря за отговора!

1 Like