Word Anagram не получает весь пользовательский ввод - PullRequest
1 голос
/ 07 мая 2020

Я пишу программу, проверяющую, являются ли n слов анаграммами изначально данного слова. Если слово является анаграммой, выводится «да», если нет - выводится «нет». Это решает проблему правильно, если я ввожу все данные вручную в консоль. Если я скопирую и вставлю данные, он не «увидит» последнюю строку, пока я снова не нажму Enter. Поэтому я вставляю следующий ввод:

anagram
6
gramana
aaagrnm
anagra
margana
abc
xy

Итак, я получаю только 5 «да» и «нет», и когда я снова нажимаю Enter, я получаю последнее «нет».

вот мой код

import java.util.Scanner;
import java.util.Arrays;

public class WordAnagrams {

    public static void anagramCheck (String x, String y) {
        char[] initial= new char[x.length()];
        for (int i=0; i<x.length(); i++) {
            initial[i]=x.charAt(i);
        }
        Arrays.sort(initial);

        char[] isAnagram = new char[y.length()];
        for (int i=0; i<y.length(); i++) {
            isAnagram[i]=y.charAt(i);
            // System.out.println(isAnagram[i]);
        }
        Arrays.sort(isAnagram); 
        boolean same=Arrays.equals(initial, isAnagram);

        if (same) {
        System.out.println ("yes");
        }
        else {
            System.out.println ("no");
        }
        // return answer;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input = new Scanner(System.in);
        String word = input.nextLine();
        int n = Integer.parseInt(input.nextLine());
        String anagram=""; // input.nextLine();
        // int counter=0;

        System.out.println();

        /* while (counter<n+1) {
            anagram=input.nextLine();
            anagramCheck(word, anagram);
            // anagram=input.nextLine();
            counter++;
        }*/

        for (int i=0; i<=n; i++) {
            anagram=input.nextLine();
            anagramCheck(word, anagram);
            // anagram=input.nextLine();
        // System.out.println(answers[i]);
        }
        System.out.println();
    }

}

Ответы [ 2 ]

0 голосов
/ 22 августа 2020

@ kalina199 Вы также можете немного сократить свой код, чтобы избавиться от определения метода для проверки ввода с консоли. Я сделал это, разделив ввод консоли на массив String с помощью простого регулярного выражения и сразу же отсортировав его. Затем мой l oop выполняет простую проверку, чтобы сравнить вводимые пользователем данные с исходным словом по их длине, и если это не соответствует, вы просто выводите «нет» и переходите к следующему слову. Вот мой код:

package bg.Cholakov;

import java.util.Arrays;
import java.util.Scanner;

public class Anagram {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] initWord = scanner.nextLine().split("");
        Arrays.sort(initWord);
        int num = Integer.parseInt(scanner.nextLine());

        for (int i = 0; i < num; i++) {
            String[] testWord = scanner.nextLine().split("");
            Arrays.sort(testWord);
            if (!(initWord.length == testWord.length)) {
                System.out.println("no");
            } else if (initWord[i].equals(testWord[i])) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
        }
    }
}
0 голосов
/ 07 мая 2020

Проблема в том, что когда вы копируете и вставляете ввод, последнее слово не имеет '\ n' в конце, поэтому сканер не считывает это как строку, пока вы не нажмете ENTER.

И что Я могу предложить следующее:

1) Использовать файл для ввода или 2) Использовать InputStreamReader для выборки с консоли. Вот код для этого:

`
 public static void main(String[] args) throws IOException {
        char buffer[] = new char[512];
        InputStreamReader input = new InputStreamReader(System.in);
        input.read(buffer,0,512);
        String data[] = (new String(buffer)).split("\n");
    }
`

Он дает вам список строк в конце. PS: ваш l oop "for (int i = 0; i <= n; i ++)" повторяется 7 раз с n = 6. </p>

...