トップページ > プログラム > 2018年01月13日 > wiN0PDfT

書き込み順位&時間帯一覧

1 位/152 ID中時間01234567891011121314151617181920212223Total
書き込み数000000000010000000001000011



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Java入門・初心者質問スレ Part.6

書き込みレス一覧

Java入門・初心者質問スレ Part.6
389 :デフォルトの名無しさん[sage]:2018/01/13(土) 10:25:34.36 ID:wiN0PDfT
累乗する関数 pow というものがありますが、これは入力も出力も double です。
double だと誤差が発生するのではないかと思うのですが、すべての int 型の
入力に対して、正しい結果を返してくれるのでしょうか?
Java入門・初心者質問スレ Part.6
412 :デフォルトの名無しさん[]:2018/01/13(土) 20:22:17.08 ID:wiN0PDfT
以下のプログラムは {1, 2, …, n} 上のすべての位相(開集合系)を求めるプログラムです。

とりあえず、適当に作ったのですが、デザインについて添削してください。
Java入門・初心者質問スレ Part.6
413 :デフォルトの名無しさん[]:2018/01/13(土) 20:23:18.22 ID:wiN0PDfT
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class AllTopologies {
■■private final List<Set<Integer>> topologies;
■■private Set<Integer> setOfSubsets;
■■private int setOfSubsetsID;
■■private final int n;
■■private final int m;
■■private final int maxSetOfSubsetsID;
■■public AllTopologies(int n) {
■■■■topologies = new ArrayList<Set<Integer>>();
■■■■setOfSubsets = new HashSet<Integer>();
■■■■setOfSubsetsID = 0;
■■■■this.n = n;
■■■■m = (int) Math.pow(2.0, (double) n) - 1;
■■■■maxSetOfSubsetsID = (int) Math.pow(2.0, (double) m - 1) - 1;
■■■■computeAllTopologies();
■■}
■■
Java入門・初心者質問スレ Part.6
414 :デフォルトの名無しさん[]:2018/01/13(土) 20:23:36.74 ID:wiN0PDfT
■■public void printAllTopologies() {
■■■■System.out.print("The number of topologies on the set {");
■■■■int i;
■■■■for (i = 1; i < n; i++) {
■■■■■■System.out.print(i + ", ");
■■■■}
■■■■System.out.print(i);
■■■■System.out.println("} is " + topologies.size() + ".");
■■■■System.out.println();
■■■■
■■■■System.out.print("The all topologies on the set {");
■■■■for (i = 1; i < n; i++) {
■■■■■■System.out.print(i + ", ");
■■■■}
■■■■System.out.print(i);
■■■■System.out.println("} are:");
■■■■
■■■■for (Set<Integer> s : topologies) {
■■■■■■System.out.print("[");
■■■■■■System.out.print(convertIntToSet(0));
■■■■■■System.out.print(", ");
■■■■■■for (int e : s) {
■■■■■■■■
■■■■■■■■System.out.print(convertIntToSet(e));
■■■■■■■■System.out.print(", ");
■■■■■■}
■■■■■■System.out.print(convertIntToSet(m));
■■■■■■System.out.println("]");
■■■■}
■■}
Java入門・初心者質問スレ Part.6
415 :デフォルトの名無しさん[]:2018/01/13(土) 20:23:58.33 ID:wiN0PDfT
■■private Set<Integer> convertIntToSet(int s) {
■■■■Set<Integer> set = new HashSet<Integer>();
■■■■for (int i = 1; i <= n; i++) {
■■■■■■if ((s & 0x00000001) == 1) {
■■■■■■■■set.add(i);
■■■■■■}
■■■■■■s >>= 1;
■■■■}
■■■■return set;
■■}
■■
■■private boolean nextSetOfSubsets() {
■■■■if (setOfSubsetsID == maxSetOfSubsetsID) {
■■■■■■return false;
■■■■}
■■■■setOfSubsetsID++;
■■■■setOfSubsets = new HashSet<Integer>();
■■■■int t = setOfSubsetsID;
■■■■for (int i = 1; i < m; i++) {
■■■■■■if ((t & 0x00000001) == 1) {
■■■■■■■■setOfSubsets.add(i);
■■■■■■}
■■■■■■t >>= 1;
■■■■}
■■■■return true;
■■}
Java入門・初心者質問スレ Part.6
416 :デフォルトの名無しさん[]:2018/01/13(土) 20:24:16.43 ID:wiN0PDfT
■■private boolean isSetOfSubsetsTopology() {
■■■■List<Integer> list = new ArrayList<Integer>(setOfSubsets);
■■■■loop:
■■■■for (int i = 0; i < list .size(); i++) {
■■■■ for (int j = i + 1; j < list .size(); j++) {
■■■■ ■■int intersection = intersection(list.get(i), list.get(j));
■■■■ ■■if (intersection != 0 && intersection != m && !setOfSubsets.contains(intersection)) {
■■■■ ■■■■return false;
■■■■ ■■}
■■■■ ■■int union = union(list.get(i), list.get(j));
■■■■ ■■if (union != 0 && union != m && !setOfSubsets.contains(union)) {
■■ ■■■■■■return false;
■■■■ ■■}
■■■■ }
■■■■}
■■■■return true;
■■}
■■
■■private void computeAllTopologies() {
■■■■do {
■■■■■■if (isSetOfSubsetsTopology()) {
■■■■■■■■topologies.add(setOfSubsets);
■■■■■■}
■■■■} while(nextSetOfSubsets());
■■}
Java入門・初心者質問スレ Part.6
417 :デフォルトの名無しさん[]:2018/01/13(土) 20:24:41.80 ID:wiN0PDfT
■■private static int intersection(int subset1, int subset2) {
■■■■return subset1 & subset2;
■■}

■■private static int union(int subset1, int subset2) {
■■■■return subset1 | subset2;
■■}

■■public static void main(String[] args) {
■■■■// TODO Auto-generated method stub
■■■■AllTopologies allTopologies = new AllTopologies(4);
■■■■allTopologies.printAllTopologies();
■■}
■■

}
Java入門・初心者質問スレ Part.6
419 :デフォルトの名無しさん[]:2018/01/13(土) 20:34:51.80 ID:wiN0PDfT
>>418

張り直しました:

https://ideone.com/A7CDkS
Java入門・初心者質問スレ Part.6
421 :デフォルトの名無しさん[sage]:2018/01/13(土) 20:40:33.04 ID:wiN0PDfT
>>420

ありがとうございます。

そういうオブジェクト指向のデザインの本でおすすめの本はありますか?

自然言語でいえば、文法の本ではなく作文の本にあたる本。
Java入門・初心者質問スレ Part.6
424 :デフォルトの名無しさん[sage]:2018/01/13(土) 20:44:39.36 ID:wiN0PDfT
コードについての説明ですが、
例えば、 n = 3 の場合、

集合 {1, 2, 3} の部分集合の集合のうち

空集合 { } と {1, 2, 3} を含み、
共通部分をとる操作について閉じていて、かつ
和集合をとる操作についても閉じているようなものを
すべて求めるというプログラムになります。
Java入門・初心者質問スレ Part.6
425 :デフォルトの名無しさん[sage]:2018/01/13(土) 20:47:33.55 ID:wiN0PDfT
>>422

ありがとうございます。

とりあえず、読んでみます。

>>423

本を読んで習得したいのですが、そう言われるのではないかと恐れていました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。