2011-07-27 11 views
2

私はちょうど "たくさんのメソッドとインスタンス"と呼ばれるYouTubeチュートリアルを見ました。彼はあなたが何かを入力するプログラムを作りました。そして、あなたの最初のgfは_でした。しかしそれはあまりにも複雑すぎた。まず、メインクラスです:printf、getName setName

import java.util.Scanner; 

public class MethodsInstances2 { 
    public static void main(String args[]) { 
     Scanner input = new Scanner(System.in); 
     MethodsInstances object = new MethodsInstances(); 
     System.out.println("Enter name of first gf here: "); 
     String temp = input.nextLine(); 
     object.setName(temp); 
     object.saying(); 
    } 
} 

次はそれからオブジェクト作るクラスです:

public class MethodsInstances { 
    private String girlName; 
    public void setName (String name){ 
     girlName=name; 
    } 
    public String getName(){ 
     return girlName; 
    } 
    public void saying(){ 
     System.out.printf("Your first gf was %s", getName()); 
    } 
} 

は、それはあまりにもovercomplicated見えた、とタイトルが、私は理解していなかったもののすべてです、私はまだJavaの初心者だと考えています。ここでは、私はより速く4回を取った型指定されたものです:

import java.util.Scanner; 
public class programtest { 
    public static void main(String args[]){ 
     Scanner test = new Scanner(System.in); 
     String name; 
     System.out.println("Enter the name of your first girfriend: "); 
     name = test.next(); 
     System.out.println("Your first girlfriend was " + name); 
    } 
} 

誰かが私TUTを行うことを言ったことのポイントを教えて、表題の言葉は何を意味することはできますか?

どうもありがとう、ダン

+0

をこのチュートリアルでは、クラスとオブジェクト名の恐ろしい選択とシンプルなコンセプトの良い例です。私は以下の答えでもっと理にかなっている例を改めました。 (すべてが1つのファイルで動作するはずです) –

答えて

4

このチュートリアルでは「多くのメソッドとインスタンス」という名前が付けられています。私のPOVからは、クラスを作成し、インスタンス化し、そのメソッドを呼び出す方法を簡単に示しています。可能な限り簡単なやり方をすることを意図していたのであれば、「コンソール入力を取得してそれを吐き出す」と呼ばれていたはずです。

ビデオチュートリアルのポイントは、過度に複雑なプログラムを作成しないでしたが、むしろには、オブジェクトどのように呼び出し方法を示しています。

MethodInstancesという名前のクラス(インスタンス名はbtwではありません)をインスタンス化し、メソッドを呼び出して状態(gf名)を保存し、取得して表示するクラスがあります。 (。。私はそれがより多くの意味を作る持っている例をリファクタリングを示唆している言い回しを、それが混乱を引き起こしているとして)

でこれを試してください:あなたは別のクラスを作成避けることによって、プロセスを短絡

import java.util.Scanner; 

public class ObjectInstanceMethodExample { 
    public static void main(String args[]) { 
     Scanner input = new Scanner(System.in); 
     FirstGirlfriend firstGF = new FirstGirlfriend(); 
     System.out.println("Enter name of first gf here: "); 
     String temp = input.nextLine(); 
     firstGF.setName(temp); 
     firstGF.sayFirstGirlfriendName(); 
    } 
} 

class FirstGirlfriend { 
    private String girlName; 
    public void setName (String name){ 
     girlName=name; 
    } 
    public String getName(){ 
     return girlName; 
    } 
    public void sayFirstGirlfriendName(){ 
     System.out.printf("Your first gf was %s", getName()); 
    } 
} 

と代わりにローカル変数を使用します。それは簡単ですが、チュートリアルで教えようとしたことではありません。

私は、OOPやOOPを取り入れて実行する前に、より簡単な例を見つけることをお勧めします。

Btw、あなたは常に最も簡単なやり方でプログラマとして進歩しません。最も簡単なのは、近いうちに最も簡単に見えるだけです。少し複雑なプロジェクトでも、それほど簡単ではありません。

+0

実際には他のツァットは混乱していないので、もう少し時間をかけて実際にすべてを得るかもしれないと思います。D –

+0

カスタマイズされたチュートリアルコードをチェックしてください。元のソースよりも意味があると思います。 –

1

それは、クラスのメソッドすなわち、データ隠蔽をゲッターセッターを証明するために、チュートリアルのように見えます。 セッターメソッドを使用してオブジェクトに何かを追加した後、ゲッターメソッドを使用してオブジェクトを取得します。

はい、これはあまりにも複雑です。しかし、この手法は、より大規模で現実的な種類の問題に非常に役立ちます。

+0

ありがとう、それは私にとって最も混乱しやすいものの1つでした。だから、ちょうど確認するために、セットは何かを取って、あなたが必要とする限りそれを保存し、いつでもあなたがそれを取得できるようになります? –

+0

はい。しかし、ゲッター/セッターメソッドは、単純にプライベート変数を読み書きするよりも、魔法のほうがもっと賢明かもしれないことに注意してください。 –

1

まず、コードでは test.next()を使用します。 の代わりに を入力してください。input.nextLine();

printfはプログラマーに知られている最も古い機能の1つで、約30歳です!

よく知られているユニバーサルスタイルの書式設定パラメータを使用して、テキスト出力を「優先」し、さまざまな型を文字列に挿入します。

+0

は今やちょっと意味が分かります。 –

0

第2のクラスには「girlName」という文字列しか含まれていません。このフィールドはプライベートアクセスを持っているため、独自のクラスの外部からアクセスすることはできません(データ隠蔽を参照)。

代わりに、外部からアクセスできるいわゆるgetterとsetterメソッドを使用して、String値を設定したり、受け取ったりすることができます。

あなたが書く代わりに:

MethodsInstances.girlName = "myGirlsName"; 
MethodsInstances.setName("myGirlName");