2017-07-17 18 views
0

私はこのコードを各変数に入れてビルダーメソッドに渡し、ユーザーが入力した内容に基づいて完全な文章を作成しようとしています。ビルダーメソッドはそれをメインメソッドに戻し、 "subject + verb + adjective + object + adverb"からなる完全な文を出力します。文章作成ツールjava

各ユーザーの入力をArrayListに格納する必要がありますか?もしそうなら、どのように私は新しい文章のそれぞれについてユーザにプロンプ​​トを出すのですか?私はforループを使ってみましたが、Arrayを作ると仮定すると、最初の行を5回尋ねてきます。私が正しくあなたの質問を理解していれば

package assignment.pkg4.pkg3.string.input; 
import java.util.Scanner; 

public class Assignment43StringInput { 
    private static Scanner scanner = new Scanner(System.in); 
    public static void main(String[] args) { 

     System.out.print("Enter a subject: "); 
     String subject = scanner.nextLine(); 

     System.out.print("Enter a verb: "); 
     String verb = scanner.nextLine(); 

     System.out.print("Enter an adjective: "); 
     String adjective = scanner.nextLine(); 

     System.out.print("Enter an object: "); 
     String object = scanner.nextLine(); 

     System.out.print("Enter an adverb: "); 
     String adverb = scanner.nextLine(); 


     System.out.print(builder(text)); 

    } 

    public static String builder(String text) { 
     String sentence = subject + verb + adjective + object + adverb; 
     return sentence; 
    }    
} 
+0

'ArrayList'に追加し、' builder'メソッドでそれらを取り出すことができるとします。 –

+0

あなたの作品を集めるために配列を使うことを選択した場合、 'for'ループのない配列の要素にアクセスすることについては法律はありません。たとえば、 'words [0] = ...'、 'words [3] = ...'など。 –

+0

ありがとう!私は以下のMapオプションを使うつもりだと思う。私は将来的にコードを再利用したいと考えています。私は入力を感謝します。 –

答えて

1

は、1つのユニークな構造の代わりに、各入力に対して1つの変数を使用したいです。サイズが常に5になり、変更されないことが分かっている場合は、String[]を使用できます。また、Listを使用することもできます。

しかし、何が何であるかを正確に知りたい場合は、Mapとすることをおすすめします。例をあげて説明します:

public class Assignment43StringInput { 
    private static Scanner scanner = new Scanner(System.in); 
    public static void main(String[] args) { 
    Map<String, String> map = new HashMap<>(); 

    System.out.print("Enter a subject: "); 
    map.put("subject", scanner.nextLine()); 

    System.out.print("Enter a verb: "); 
    map.put("verb", scanner.nextLine()); 

    System.out.print("Enter an adjective: "); 
    map.put("adjective", scanner.nextLine()); 

    System.out.print("Enter an object: "); 
    map.put("object", scanner.nextLine()); 

    System.out.print("Enter an adverb: "); 
    map.put("adverb", scanner.nextLine()); 

    System.out.print(builder(map)); 
    } 

    public static String builder(Map<String,String> map) { 
    return map.get("subject") + " " + map.get("verb") + " " + map.get("adjective") + " " + map.get("object") + " " + map.get("adverb"); 
    }    
} 

このようにして、必要に応じて文章を並べ替えたり、さらに要素を追加したりすることができます。

+0

地図は間違いなく道に行くようです!非常に役に立ちます。ありがとうございました。 –

+0

@JohnReynolds私の最もよく使用されている構造です。地図は非常に多用途です。原則として、 'String'をキーとして使用しないでください。パフォーマンスはそれほど良くありません。可能であれば 'Integer'を使うようにしてください。しかし、あなたのような小さな「マップ」の場合は、実際にはほとんど違いがありません。 – Tavo

+0

マップを使用する理由ここでは簡単なクラスが適しています。 –

0

あなたは配列や地図などは必要ありません。適切にあなたの条件を達成するために、あなたは自分のbuilder(メソッドは動詞ことになっているとして、私はむしろ、buildSentenceそれを呼びたい)を受け入れる対応する引数にする必要があります。

public static String buildSentence(String subject, 
            String verb, 
            String adj, 
            String obj, 
            String adverb) { 
    return subject + " " + verb + " " 
      + adjective + " " + object + " " + adverb; 
} 

を、あなたは単にあなたの変数を使用してそれを呼び出しますあなたは、彼らがあまりにも汎用性のあるとして、あなたは、これらのデータ構造を使用しないでください、使用する値の非常に明確に定義されたセットを持っている与えられた、配列/ ArrayListを/地図の使用について

System.out.print(buildSentence(subject, verb, adjective, object, adverb)); 

:相応に渡さコードを読みにくくするdエラーが発生しやすい。あなたのメインで

class Sentence { 
    public String subject; 
    public String verb; 
    public String adjective; 
    public String object; 
    public String adverb; 
} 

:構造体のような目的のために奉仕する単純なクラスは、より良い選択肢である宣言

public static void main(String[] args) { 
    Sentence sentence = new Sentence(); 

    System.out.print("Enter a subject: "); 
    sentence.subject = scanner.nextLine(); 
    // do the same for other values 

    System.out.print(buildString(sentence)); 
} 

public static String buildString(Sentence sentence) { 
    return sentence.subject + " " 
     + sentence.verb + " " 
     + sentence.adjective + " " 
     + sentence.object + " " 
     + sentence.adverb; 
} 

は、コードになるどれだけ明確にして読めますか?

buildString()をメンバーメソッドとしてSentenceに移動することがさらに効果的です。

+0

これは非常に読みやすく、非常にきれいに見えることに同意します!ありがとう、私は実際に私がいるjavaコースのために次の週にこれを使用することができます。 –

関連する問題