2017-11-12 20 views
0

スペース、句読点、およびすべての小文字を使わずに単語をランダムに並べ替えるプログラムを作成する必要があります。部分文字列やcharAtが必要ですが、まだ学習していないので配列を使用できません。それはまた、毎回異なる、本当にnとhsa!私は思う。これは私が遠単語を取り、文字をランダム化してアナグラムを作成するJavaプログラム

public static void main(String[] args) { 
     Scanner kboard = new Scanner(System.in); 
     System.out.println("Enter a word that is less than 11 lowercase letters and has no punctuation or spaces: ");  
     String word = kboard.next(); 
     while(word.length()>1) 
     { 
      System.out.print(word.charAt(1)); 
      System.out.print(word.charAt(0)); 
      word = word.substring(2); 
     } 
     System.out.println(word); 
} 

これは言葉の並び替えを持っているものですが、それはそれをランダムに毎回行いません。私はこのようなことをすることができると思ったが、それは面倒であり、あまり意味がないと思う。

public static void main(String[] args) { 
     Scanner kboard = new Scanner(System.in); 
     String word, pt1 = "", pt2 = "", pt3 = ""; 
     System.out.println("Enter a word that is less than 11 lowercase letters and has no punctuation or spaces: "); 
     word = kboard.nextLine(); 
     int num1 = 0, num2 = 0, thing = 0; 
     while(thing<4) 
     { 
      thing = thing + 1; 
      num1 = (int)(word.length() * Math.random() + 1); 
      num2 = (word.length() - (word.length() % num1)); 
     } 
      pt1 = word.substring(num1, num2); 
      pt2 = word.substring(num1, num2); 
      pt3 = word.substring(num1, num2); 
      System.out.print(pt1); 
      System.out.print(pt2); 
      System.out.print(pt3); 

文字をランダム化するにはどうすればよいですか?

+0

、それはAのために非常に困難であろう初心者。私はあなたがタスクの記述についてのいくつかの重要な詳細を見逃していると思う。私はダブルチェックを行い、すべての詳細を必ず含めることをお勧めします。 – janos

+0

割り当ては、11文字未満、句読点なし、スペースなし、および文字をランダムに並べ替えることです。私たちは文字列を始めたばかりであり、まだ配列に入っていません。それが私たちに言われたすべてです。それは私たちに、単語がabcdeならばebadcとして出力することができるという例を与えました –

+0

私は以下の答えとしてあなたの問題に私の解決策を提供しましたが、あなたの質問に本当に関連していないので、私もコメントします。句読点やスペースを入れずに11小文字以下の文字を入力するように要求された場合は、入力を確認してください。 メソッドのisLowerCase、isWhiteSpaceなどを見てください(クラスのCharacterで) – zbyszekt

答えて

1

要素の固定されたセットを「どのようにランダム化するか」という単純な解決策は、シャッフルです。

文字列を文字のリストに変換するだけで、そのリストにはshuffleとなります。

(リストを作成すると、new ArrayList<>(yourWord.toCharArray()になります)。

1

GhostCatは数秒で私を打つ:)何これについて

char[] arr = "abcdefg".toCharArray(); 
    List<Character> list = new LinkedList<>(); // copy the chars to a list 
    for (int i = 0; i < arr.length; i++) { 
     list.add(arr[i]); 
    } 
    Collections.shuffle(list); // use to shuffle 
    for (int i = 0; i < arr.length; i++) { // copy the shuffled chars back to the array 
     arr[i] = list.get(i); 
    } 
    System.out.println(new String(arr)); 
+1

あなたはコードを置くことのために私の投票を受け取ります;-) – GhostCat

+1

配列を使用する方法はわかりません。このプログラムでは使用できません –

0

:基本的には文字列を取得

public static void main(String[] args) { 
     String test = "onetwothree"; 
     Random random = new Random(); 
     for (int i=0;i<test.length();i++){ 
      int randomCharacterPosition = random.nextInt(test.length()); 
      String start = test.substring(0,randomCharacterPosition); 
      String end = test.substring(randomCharacterPosition); 
      test = end.concat(start); 

     } 
     System.out.println(test); 
    } 

、ランダム文字列の位置を選択します。 この位置を使用して、入力文字列を2つの文字列に分割してスワップします。

これを作る

1

これは、標準ライブラリを使用して非常に簡単に実装 が、あなたが配列やリストを使用することはできませんと思われることができた(+演算子と交換することができる)ランダム、部分文字列と連結以外の何物でも、 必要以上に強く運動してください。

次のアルゴリズムを実装することができます:単語が

  • がに文字を追加し
  • ランダムな文字を選んで空でないながら

    • 空の文字列として出力を初期化します出力
    • wordの前の部分をwordの後に置き換えて、単語から選択した文字を削除します。インデックス

これはStringBuilderを使用して合理的に効率的に実装することができます。

String shuffled(Random random, String word) { 
    StringBuilder result = new StringBuilder(word.length()); 
    StringBuilder rest = new StringBuilder(word); 
    while (rest.length() > 0) { 
     int index = random.nextInt(rest.length()); 
     result.append(rest.charAt(index)); 
     rest.deleteCharAt(index); 
    } 
    return result.toString(); 
} 

あなたがStringBuilder、 を使用することができないならば、あなたは、文字列、 で動作することができますが、これはあまり効率的になります、 、通常はJavaではお勧めできません。 あなたがでこれを呼び出すことができます(それは非効率的である多くの文字列の連結を、必要とするので。)

String shuffled(Random random, String word) { 
    String result = ""; 
    String rest = word; 
    while (!rest.isEmpty()) { 
     int index = random.nextInt(rest.length()); 
     result += rest.charAt(index); 
     rest = rest.substring(0, index) + rest.substring(index + 1); 
    } 
    return result; 
} 

:このタスクは、配列を使用して持つことは確かに可能ではあるが

String shuffled = shuffled(new Random(), word); 
関連する問題