![](/img/trans.png)
[英]if condition in Java Anagram Class not validating the String properly. getting not an anagram for anagram string
[英]Check for an anagram using only the string class in java
我的任務是編寫一個接受 2 個單詞的程序,然后返回它們是否是彼此的字謎。 目前我正在嘗試遍歷第一個字母的每個字母,並檢查它是否與第二個單詞中的字母匹配。 然后,我將計數器 int 與任一單詞的總長度進行比較,如果它們是字謎,它們應該相等。
我有一個錯誤,如果單詞是字謎,我目前會無限循環向上計數,並且計算以程序結尾的單詞中的字母數,如果不是,則不會關閉。
分配狀態“僅使用字符串 class 中可用的方法。不要使用其他 Java 庫實用程序”,所以我無法將單詞放入數組並使用 ZA3CBC3F9D0CE2F2C1554E1B671D71D9ZC
import java.util.Scanner;
public class anagram {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter two strings");
String s1 = scanner.next();
String s2 = scanner.next();
int counter = 0;
int number1 = 0;
int number2 = 0;
if(s1.length() != s2.length()) {
System.out.println("The strings are not anagrams");
} else {
for(int i = 0; i < s1.length() ; i++) {
for(int j = 0; j < s1.length() ; i++) {
// number1 = i;
// number2 = j;
if(i == s1.length()){
number1 = i - 1;
}
if(j == s2.length()){
number2 = j - 1;
}
if(s1.charAt(number1) == s2.charAt(number2)) {
counter ++ ;
System.out.println(counter);
}
}
}
System.out.println(counter);
}
System.out.println(s1 + " " + s2 + " " + counter);
}
}
你的問題就在這里
for(int j = 0; j < s1.length() ; j++) { ///change i to j
您正在檢查n^2
次,但是這只能完成2n
次。
您的陣列將具有26個元素存儲的發生az
(如果情況不敏感)
在for循環的第二級中,您將遞增i而不是j。 因為j從不增加,所以(j <s1.length)始終為true。
import java.util.Scanner;
public class anagram {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter two strings");
String s1 = scanner.next();
String s2 = scanner.next();
int counter = 0;
int number1 = 0;
int number2 = 0;
if(s1.length() != s2.length()) {
System.out.println("The strings are not anagrams");
} else {
for(int i = 0; i < s1.length() ; i++) {
for(int j = 0; j < s1.length() ; j++) { //LOOK HERE <======
// number1 = i;
// number2 = j;
if(i == s1.length()){
number1 = i - 1;
}
if(j == s2.length()){
number2 = j - 1;
}
if(s1.charAt(number1) == s2.charAt(number2)) {
counter ++ ;
System.out.println(counter);
}
}
}
System.out.println(counter);
}
System.out.println(s1 + " " + s2 + " " + counter);
}
}
public class Main {
static boolean isAnagram(String a, String b) {
// Complete the function
boolean flag = true;
if (a.length() != b.length())
return false;
char str1[] = a.toCharArray();
char str2[] = b.toCharArray();
int countstr1[] = countLetters(str1);
int countstr2[] = countLetters(str2);
for (int i = 0; i < countstr1.length; i++) {
if (countstr1[i] != countstr2[i])
flag = false;
}
return flag;
}
public static void main(String[] args) {
String a = "anagram";
String b = "margana";
boolean ret = isAnagram(a, b);
System.out.println((ret) ? "Anagrams" : "Not Anagrams");
}
/** Count the occurrences of each letter */
public static int[] countLetters(char[] chars) {
// Declare and create an array of 26 int
int[] counts = new int[26];
// For each lowercase letter in the array, count it
for (int i = 0; i < chars.length; i++)
counts[Character.toLowerCase(chars[i]) - 'a']++;
return counts;
}
}
countLetters方法是這個程序中真正的英雄。 該方法計算每個字符的出現頻率並將其存儲在一個數組中,並將該數組返回給調用方法。 該程序忽略大小寫並確定兩個字符串是否為字謎
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.