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

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

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

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

Q&A

解決済

4回答

362閲覧

java 配列の出力

woooo

総合スコア26

Java

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

0グッド

1クリップ

投稿2018/09/02 03:18

3、6種類のアルファベット "u,d,c,s,t,b" から成るn文字の文字列のうち、"uud"という並びが含まれる文字列を全て列挙するプログラムを作成してください

この問題が分かりません。

1、6種類のアルファベット "u,d,c,s,t,b" から成る3文字の文字列を全て列挙するプログラムを作成してください。ただし、文字列内に同じアルファベットが出現しても構わないものとし、出力順序は問わないものとします。
2、6種類のアルファベット "u,d,c,s,t,b" から成るn文字の文字列を全て列挙するプログラムを作成してください。ただし、nは1以上の整数とし、標準入力より指定されます。その他の条件は(1)と同じであるものとします。

1,2は以下のように考えましたが、よくわかりません。
java歴1ヶ月なので、簡単なコードで返答が欲しいです。
1、
import java.util.Random;

public class Main {
public static void main(String[] args) throws Exception {
// 文字をつめる
String moji[] = {"u", "d", "c", "s", "t", "b"};
// 乱数
Random rnd = new Random();
int rndMoji = rnd.nextInt();

// 配列からList List<String> list=Arrays.asList(moji); // リストの並びをシャッフル Collections.shuffle(list); // listから配列へ戻します String[] moji2 =(String[])list.toArray(new String[list.size()]); int i; // 出力 for(i = 1; i < 3; i++) { for (int a = 0; a < rnd; a++) { System.out.print(moji2[a]+" "); } } }

}

2、
import java.util.Random;

public class Main {
public static void main(String[] args) throws Exception {
// 文字をつめる
String moji[] = {"u", "d", "c", "s", "t", "b"};
// 乱数
Random rnd = new Random();
int rndMoji = rnd.nextInt();
int n =rnd.nextInt();

// 配列からList List<String> list=Arrays.asList(moji); // リストの並びをシャッフル Collections.shuffle(list); // listから配列へ戻します String[] moji2 =(String[])list.toArray(new String[list.size()]); int i; // 出力 for(i = 0; i < n; i++) { System.out.print(moji2[i]+" "); } }

}

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

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

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

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

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

guest

回答4

0

1番の類似問題で書いてみました。
これを元にすれば、 本来の問題も解けると思います。

java

1 2public class ProbexXXX { 3 public static void main(String[] args) throws Exception { 4 // String mojis[] = { "u", "d", "c", "s", "t", "b" }; 5 String mojis[] = { "1", "2", "3" }; 6 show_perm(3, mojis, ""); 7 } 8 9 static void show_perm(int len, String[] mojis, String head) { 10 int mojis_len = mojis.length; 11 if (head.length() == len) { 12 System.out.println(head); 13 } else { 14 for (int p = 0; p < mojis_len; p++) { 15 show_perm(len, mojis, head + mojis[p]); 16 } 17 } 18 } 19}

投稿2018/09/02 06:20

katoy

総合スコア22324

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

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

0

作って見ました。参考にしてください

package aaaa;

import java.util.ArrayList;

public class aaa {
public static void main(String[] args) {
//何文字が判定
int n = Integer.parseInt(args[0]);
// 文字をつめる
String moji[] = {"u", "d", "c", "s", "t", "b"};

ArrayList<String> resultList = new ArrayList<String>(); ArrayList<String> tmpList = new ArrayList<String>(); //nは1以上なので初期値をセット for(int i = 0 ; i<moji.length ; i++){ resultList.add(moji[i]); } while(resultList.size()<Math.pow(6, n) -1){ for(String pResult : resultList){ for(int j = 0 ; j < moji.length ; j++){ String nResult = pResult + moji[j]; tmpList.add(nResult); } } resultList = (ArrayList<String>) tmpList.clone(); tmpList.clear(); } //uudを含んでいたら出力 for(String result : resultList){ if(result.contains("uud")){ System.out.println(result); } } }

}

投稿2018/09/02 04:39

ns3

総合スコア19

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

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

0

ベストアンサー

なるべくわかりやすいようにString[]配列とfor文だけで作ろうとしましたが無理でしたので書き直しました。
もし出来たとしても入力がn文字で不定なので恐らく冗長になると思います。

全組合せを表示する再帰関数や@katoyさんの回答などを参考に素直に再帰処理を使ったほうが簡潔です。

考えてもどうしてもわからない時にこっそり見てください。
以下回答コード

###出力結果
uuud
uudu
uudd
uudc
uuds
uudt
uudb
duud
cuud
suud
tuud
buud

java

1 2public class memo_qa144373 { 3 // 3、6種類のアルファベット "u,d,c,s,t,b" から成るn文字の文字列のうち、 4 // "uud"という並びが含まれる文字列を全て列挙するプログラムを作成してください 5 6 7 8 9 public static void main(String[] args) { 10 11 String[] s = "u,d,c,s,t,b".split(","); 12 String t = "uud"; 13 int n = 4; 14 15 permutation(n,t,s, ""); 16 17 } 18 19 private static void permutation(int n,String t,String[] str, String ans) { 20 if (ans.length() == n) { 21 if (ans.contains(t)) { 22 System.out.println(ans); 23 } 24 } else { 25 for (int i = 0; i < str.length; i++) { 26 permutation(n,t,str, ans + str[i]); 27 } 28 } 29 } 30

投稿2018/09/02 03:58

編集2018/09/02 08:36
opyon

総合スコア1009

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

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

0

3は1,2とつながっている問題ですか?(1,2のコードを利用しないといけない問題か)

そうでないなら、"uud"を先に作ってしまい、その前後に配列内から文字を選び出してつけるという作業をすればいいのでは?

投稿2018/09/02 04:23

swordone

総合スコア20649

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問