2017-10-03 4 views
0

2ワードを受け入れ、それらが互いにアナグラムであるかどうかを返すプログラムを作成する課題があります。現在、私は最初の文字をすべてループし、2番目の単語の文字と一致するかどうかを確認しようとしています。次に、カウンタの整数を、いずれかの単語の長さの合計と比較します。これは、アナグラムの場合は等しいはずです。Javaの文字列クラスのみを使用してアナグラムを確認してください

単語がアナグラムの場合、現在カウントアップの無限ループが発生していますが、プログラムで終了する単語の文字数がカウントされない場合はエラーになります。

「文字列クラスで使用できるメソッドのみを使用してください。他のJavaライブラリユーティリティを使用しないでください。」という言い方をすると、単語を配列に入れて配列を使用できません。あなたのforループの第二レベルで

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); 

} 

}

+1

a-zの発生を保存する26の要素を持つことになります。あなたのjループでは、私は+ +を持っている必要があります+ + @ – Steampunkery

+0

@T Jonesあなたは配列を使用することができますか? – user3437460

+0

各文字のASCII値を取得できますか?それで、値を追加して等価性をチェックすることができるからです – Steampunkery

答えて

1

あなたの問題はここに

for(int j = 0; j < s1.length() ; j++) { ///change i to j 

をあるあなたは、しかし、これが唯一の2n回で行うことができ、n^2回をチェックしています。

  1. 同時に両​​方の配列をループ
  2. 第1列からすべての文字の出現(配列で店舗)
  3. は、(アレイに格納)第2列からすべての文字の発生をゲットし、すべての出現するかどうかを比較します同じだ。

(大文字と小文字が区別されない場合)あなたの配列は、あなたがあなたのネストされたループに二回変数iあなたをインクリメント

+0

@T Jones私の答えの横にあるくぼんだようなチックをクリックすると、私の解決策を受け入れることができます。あなたは2リペアーを返す。 1つの質問につき1つのソリューションしか受け付けられないことに注意してください。 – user3437460

0

、あなたは私の代わりに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); 

} 
} 
+0

ありがとう、これを実行して2つのコメント行のコメントを外していただきありがとうございます –

+0

私の答えがあなたの問題を解決したと感じたら、それを解決策としてマークしてください。 –

関連する問題