タイトルがとてつもなくわかりにくいのにもかかわらず見ていただいてありがとうございます。
たとえば、原子番号に対応する原子の電子の数を返すメソッド
get電子の数(原子番号)
だけを使うクラスを作るとします。(データベースみたいな使い方?)
その場合、クラス定義の中にそれぞれの原子番号の原子の電子の数を入れた配列のフィールドとそれを戻り値として返す上記のメソッド書くと思うのですが、これってオブジェクトを生成する必要ありますか?
いまいちオブジェクトを生成する意味がわかっていなくて…
その機能を実現するのにもっと標準的な方法があるとしたら(いや、あるでしょう。)おしえてください。m(__)m
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
そういう場合は,staticにするのではないでしょうか.
やりたいのはおそらくこういうことですよね?
java
1public class Atom{ 2 private static final int[] electron = {/* 電子数を配列にする */}; 3 public static int numE(int atomNumber){ 4 return electron[atomNumber - 1]; //配列添字の関係上1引く 5 } 6}
これで呼び出す際はAtom.numE(12);
などとすればいいわけです.
オブジェクトを生成する意味はこの場合ありません.
投稿2015/07/24 14:43
編集2015/07/24 14:53総合スコア20651
0
java に Math という計算関係のメソッド、定数を集めたクラスがあります。
- java.lang.Math https://docs.oracle.com/javase/jp/8/api/java/lang/Math.html
- http://www.docjar.com/html/api/java/lang/Math.java.html
public final class Math と宣言され、
static double PI // 円周率
static double abs(double a) // double値の絶対値を返します。
など定数、関数が定義されます。
Math は オブジェクトを作れないようになっています。
(オブジェクトをつくれるようにしたとしても、どのオブジェクトも同一動作しかしないので意味がないから)
質問のケースの場合も これを真似するとよいとおもいます。
不変の情報を扱うなら、オブジェクトを生成する必要は無いです。
原子番号に対応する原子の電子の数ではなく、原子番号から元素名を得るメソッドをつくってみました。
java
1public final class Atom { 2 3 private Atom() { 4 } 5 6 // See http://plaza.umin.ac.jp/~ikeda/element.htm 7 private final static String info[][] = { 8 {"水素", "Hydrogen", "H"}, // 1 9 {"ヘリウム", "Helium", "He"} // 2 10 }; 11 12 // 元素番号から 日本語名を得る 13 public static final String getName(int n) { 14 return info[n - 1][0]; 15 } 16 //... 17} 18 19class Main { 20 public static void main(String[] args) { 21 System.out.println("1 = " + Atom.getName(1)); 22 System.out.println("2 = " + Atom.getName(2)); 23 } 24}
実行例:
1 = 水素 2 = ヘリウム
用途に合わせて、 Atom の中での情報の持ち方を工夫したり、メソッドを追加していくことが可能です。
(元素番号から 価電子の数を得る etc...)
投稿2015/07/24 23:38
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
こんにちは。
ある元素についての情報を1レコードとするDBテーブルを作成しないで
済まそうとするなら、列挙型を使うという方法もあります。
以下は例です。(簡略のため原子番号1の水素から9のフッ素までしか
書いておりません。実用的なものにするなら、すべての元素を書く必要
があります。)
java
1package teratail; 2 3public enum Atom { 4 H("水素"), 5 He("ヘリウム"), 6 Li("リチウム"), 7 Be("ベリリウム"), 8 B("ホウ素"), 9 C("炭素"), 10 N("窒素"), 11 O("酸素"), 12 F("フッ素"); 13 14 // 元素名 15 private String name; 16 17 // コンストラクタ(引数として元素名を指定) 18 private Atom(String name) 19 { 20 this.name = name; 21 } 22 23 /** 24 * 指定された原子番号の元素を返す。 25 */ 26 public static Atom byNumber(int atomicNumber) 27 { 28 if ( 0 <= atomicNumber -1 && atomicNumber -1 < Atom.values().length ) 29 return Atom.values()[atomicNumber -1]; 30 31 throw new IllegalArgumentException("指定された原子番号の元素はありません。"); 32 } 33 34 /** 35 * 文字列化 36 */ 37 public String toString() 38 { 39 return ( "原子番号:" + this.getNumber() + ", 元素名:" + this.name ); 40 } 41 42 /** 43 * 元素名を返す。 44 */ 45 public String getName() 46 { 47 return this.name; 48 } 49 50 /** 51 * 原子番号を返す。 52 */ 53 public int getNumber() 54 { 55 return ( this.ordinal() + 1 ); 56 } 57 58 /** 59 * 電子数を返す。(原子番号と同じ) 60 */ 61 public int getNumElectrons() 62 { 63 return this.getNumber(); 64 } 65 66 /* 67 * テスト 68 */ 69 public static void main(String[] args) 70 { 71 int atomicNumber = 6; 72 73 Atom atom = Atom.byNumber(atomicNumber); 74 75 System.out.println("原子番号:" + atomicNumber + " の元素は「" 76 + atom.getName() + "」で、その電子数は " 77 + atom.getNumElectrons() + " 個です。"); 78 79 } 80}
上記のmainメソッドを実行すると、以下のように表示されます。
原子番号:6 の元素は「炭素」で、その電子数は 6 個です。
単なる電子数だと、原子番号と同じ数を返すことになりますが、
たとえば、この列挙型に最外殻電子数を返すメソッド
java
1public int getNumPeripheralElectrons()
を追加したり、あるいは、K、L、M 、N と内側の順に
それぞれの殻の電子数を表す配列を返すメソッドのような
ものを追加するなど、機能拡張が考えられます。
以上、ご参考になれば幸いです。
投稿2015/07/24 15:55
編集2015/07/24 16:08総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/24 16:29
2015/07/24 16:53
2015/07/25 00:27
2015/07/25 00:56
0
原子番号=電子の数なので、原子番号がわかればイオンでない限り電子の数もわかりますよね。
普通は、イミュータブルにして生成時に原子番号を指定、といった形ではないでしょうか?
Java
1public class Atom{ 2 private int number; 3 Atom(int number){ 4 this.number = number; 5 } 6 public int getNumberOfElectrons(){ 7 return this.number; 8 } 9}
また、原子番号に対応する電子の数が知りたければそのまま代入すればいいです。
投稿2015/07/24 14:49
編集2015/07/25 01:47総合スコア56
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/24 14:46
2015/07/24 14:52