我正在编写一个程序,检查n个单词是否是最初给定单词的变位符。如果这个词是一个变位词,它会打印"是",如果不是,则会打印"否"。如果我在控制台中手动输入所有数据,它就能正确地解决问题。如果我复制并粘贴数据,它不会"看到"最后一行,直到我再次点击回车键。所以我粘贴了以下输入:
anagram
6
gramana
aaagrnm
anagra
margana
abc
xy
所以我只得到5个肯定和否定,当我再次点击回车键时,我得到最后一个否定。
这是我的代码
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();
}
}
问题是,当您复制粘贴输入时,最后一个单词的末尾没有'\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:你的循环"for(int i=0;i<=n;i++("循环了7次,n=6。
@kalina199您还可以将代码缩短一点,以避免定义一个方法来检查控制台的输入。我使用一个简单的regex将控制台输入拆分为一个String数组,并立即对其进行排序。然后,我的循环做了一个简单的检查,将新用户输入的单词与原始单词的长度进行比较,如果不匹配,你只需打印出";否";然后继续下一个单词。这是我的代码:
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");
}
}
}
}