質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

996閲覧

Java 配列の中身を変化させたい

oto_yakiniku

総合スコア1

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/06 09:07

前提・実現したいこと

・Java使用
・要素15個の1次元配列
・配列の中身の値は0,1のみを扱う
・15個の要素を0,1の組み合わせで全通り出力したい
例えば
100000000000000
010000000000000
001000000000000



要素が15個のため、32768通りになると思われる。

該当のソースコード

JAVA

1int A[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 2for(int a=0; a < A.length; a++){ 3 4 }

試したこと

恥ずかしながら、A[a]=1;を入力し配列Aを全て1にしただけです。
上記のコードからまた、for文を使うのではないかと考えていますが、そこからどのように書けば良いのか不明です。
配列の中身の変更は具体的な数値をArray[i]=○、のような形で入れるものばかりで、中身をfor文で回して変化させていくものが見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

eclipseで開発しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/10/06 09:40 編集

32768通りの組み合わせを列挙する方法と配列にそれぞれの値を納める方法は別に考えるべきでは。 32768通り組み合わせを列挙する方法が思い付くのであれば、それをコードで表現するだけです。必ずしも配列にしなくてもよいはず。(既に回答をいただいていますね)
guest

回答3

0

・15個の要素を0,1の組み合わせで全通り出力したい

これだけなら、配列自体が不要なのではないでしょうか。0~32767までをforループで回してはそれぞれの数を2進法に変換して表示、だけで済むかと思います。

投稿2021/10/06 09:09

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

15個の要素を0,1の組み合わせで全通り出力したい

冪集合を作るときによくやるのは、15ビットを用意。n番目の要素を集合に含むか含まないかをビットの(1,0)で表す。全パターンを得るために、15ビットの符号無し整数を、単純に2^15 - 1回カウントアップします。

2進数のインクリメント

配列A全体で15ビットの2進数を表現する。A[0]を最上位桁、A[14]を最下位桁とするなら、以下のループで1回のインクリメントをエミュレートします。

Java

1 for (int j = A.length - 1, carry = 1; j >= 0 && carry == 1; --j) { 2 int c2 = A[j] & carry; 3 A[j] ^= carry; 4 carry = c2; 5 }

インクリメントにはビット演算のAND(&)とXOR(^)を使います。carryは桁上げ出力。1加算するためcarryの初期値を1にしています。加算器

全パターンを作るには整数をインクリメントするのが一般的ですが、配列を使うということなので加算器をエミュレートしました。


整数のインクリメント

整数のインクリメントの例を追記しておきます。配列のサイズが31を超えることがあるでしょうから、汎用性を考慮してjava.math.BigIntegerを利用する例をあげます。意外と早いです。

Java

1import java.math.BigInteger; 2import java.util.Arrays; 3 4public class BitPattern_ { 5 6 public static void main(String[] args) { 7 bitPattern(15); 8 } 9 10 static BigInteger TWO = BigInteger.ONE.add(BigInteger.ONE); 11 12 static void bitPattern(int size) { 13 int[] A = new int[size]; 14 var MAX = TWO.pow(size); 15 for (var n = BigInteger.ZERO; n.compareTo(MAX) < 0; n = n.add(BigInteger.ONE)) { 16 for (int i = 0; i < size; ++i) A[i] = (n.testBit(i)) ? 1 : 0; 17 System.out.println(Arrays.toString(A)); 18 } 19 } 20 21}

投稿2021/10/06 16:00

編集2021/10/08 09:52
xebme

総合スコア1085

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

配列を使わずにできますが、どうしても配列を使いたいのなら、
配列の先頭から順に 0 と 1 を入れて、残りに 0 と 1 を入れるメソッドを
再帰呼出しすればよいでしょう。

Java

1class Main { 2 final int n = 5; // n = 15 3 int[] a = new int[n]; 4 5 public static void main(String[] args) { new Main().gen(0); } 6 7 void gen(int i) { 8 if (i == n) { 9 for (i = 0; i < n; i++) System.out.print(a[i]); 10 System.out.println(); 11 } 12 else { 13 a[i] = 0; gen(i+1); 14 a[i] = 1; gen(i+1); 15 } 16 } 17}

投稿2021/10/06 10:29

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問