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

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

ただいまの
回答率

90.62%

  • C#

    6834questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

c# 文字数を決めるコード(乱数に近いかな?)の続き

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 710

come25136

score 240

前回の質問
動作確認をした所
~省略~
int pos = r.Next(randomInput.Length);
            char c = randomInput[pos];
            //↓文字重複させたくない場合
            //if (sb.ToString().IndexOf(c) >= 0) continue;
            sb.Append(c);
~省略~
の"//if (sb.ToString().IndexOf(c) >= 0) continue;"を有効にすると何故か応答なしになります
解決方法を教えて下さい(_ _)

※追記
private static readonly string randomInput = "10101010101010101";  //本当は文字ですが都合上数字に変えています(元の例:あいあいあいあい...←こんな感じです)
        static string GetHoge()
        {
            StringBuilder sb = new StringBuilder();
            Random r = new Random();
            //↓文字数固定であればこれを固定値にする
            int length = r.Next(5, 17);  //◯~◯文字
            while (sb.Length <= length)
            {
                int pos = r.Next(randomInput.Length);
                char c = randomInput[pos];
                //↓文字重複させたくない場合
                if (sb.ToString().IndexOf(c) >= 0)continue;
                sb.Append(c);
            }
            return sb.ToString();
        }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Tak1wa

    2015/06/12 22:26

    既にコメントアウトされてる行ですが、有効行に変更したという意味でしょうか?いずれかの理由で無限ループしていますね。 「randomInput」の内容と、前の質問の「int length = r.Next(3, 5); 」の部分が現在どういう実装になっているか教えてください。

    キャンセル

  • come25136

    2015/06/12 22:27

    すみません、そうです有効にしたのです

    キャンセル

  • Tak1wa

    2015/06/12 22:34

    あー、すみません。無限ループになり得ますねこれは…。 修正するのでお待ちを。

    キャンセル

回答 2

checkベストアンサー

0

文字数だけであれば、以下だけでいいことになります。

static string GetHoge()
{
    Random r = new Random();
    int length = r.Next(5, 18);
    return randomInput.Substring(0, length);
}

#ちなみにNextメソッドの第二引数は最大桁数-1が正しかったです。
#上の例では5~17までがランダムで取得されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/12 23:19

    ありがとうございます!!
    無事解決しました
    今回は多分ですが・・・"乱数"と言う言葉を使ったことにより解釈を間違ったのだと思います
    次からは最初からわかりやすく質問しますのでこれからもよろしくお願いします(_ _)

    キャンセル

0

こんにちは。

ガラリと変わりますが以下のように変更しました。
重複してなくて良いとのことなので、文字列をランダムソートし、ランダムな長さだけ先頭から切り出しました。

static string GetHoge()
{
    StringBuilder sb = new StringBuilder();
    Random r = new Random();
    int length = r.Next(5, 17);  //◯~◯文字
    var shuffle = randomInput.OrderBy(x => Guid.NewGuid()).ToArray();
    for (int i = 0; i < length; i++)
    {
        sb.Append(shuffle[i]);
    }
    return sb.ToString();
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/12 22:51

    うーんやはり無限ループになってしまいます
    (コメントアウトを有効にした時だけ)

    キャンセル

  • 2015/06/12 22:55

    このロジックのコメント部分は全て削除して良いです。以前のロジックは重複した文字があれば再度ループして乱数から文字列を取得していました。
    しかし「あいあいあいあいあい」の場合は重複を考慮してしまうと2文字までにしかなりません。

    今回のロジックは重複かどうかに関係なく、最初に与えられた文字をソートしますのでその問題は解決されています。
    GetHogeメソッドの中を入れ替えてみてください。
    コメント行は削除しておきます。

    キャンセル

  • 2015/06/12 23:03

    再度試しましたが今度は"11100101111100010"みたいになってしまいます
    夜遅くまですみません(_ _)
    (理想:10101010101010101から10101010←文字数だけランダムで変えれればいい)

    キャンセル

  • 2015/06/12 23:05

    すみません。そもそもの質問を解釈違っていたかもしれません。
    最初に与えられた文字列自体はランダム化しなくても良かったのですね。
    上記の場合だと開始位置は先頭からですか?ランダムですか?

    キャンセル

  • 2015/06/12 23:07

    先頭からです(_ _)

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    c#ランダム文字列の続き

    前回の質問のURL イメージ的にはusing System; using System.Text; using System.Windows.Forms; namespace t

  • 解決済

    c# 文字数を決めるコード(乱数に近いかな?)

    c#で乱数的なものを作成したいです やりたいこと 「あいうえお」の中から3~5文字取り出したいのですがやり方がわかりません 都合上簡単な質問文ですが教えてくださいお願いします(_ 

  • 解決済

    Javaでサロゲートペア文字を含む文字列のreplace

    サロゲートペア文字(例えば😆とか𩸽)を含む文字列でStringBufferのreplaceメソッドを 使用したいのですが、replaceメソッドはサロゲートペア文字を考慮した実装で

  • 解決済

    java でしりとり

    java でひとりで遊べるしりとりを作りたいと思っているのですが コンピューターが自動的に返事してくれるようなものを作りたいと考えているのですが なにか参考になるようなサイトがあれ

  • 解決済

    listの参照があいまいです

    この前質問させていただいたときに回答して下さった方のソースをコンパイルしてみたんですが(いらないimportまで書いてると思いますが気にしないでください)listの参照があいまいで

  • 解決済

    Android用サイコロアプリの無駄な動作を教えてほしい

    本文 うまく動くようになったので改善できるところを教えてください。 (例外は発生しているか試しました) package com.mycompany.myappdicepl

  • 解決済

    toString()メソッドのうまい書き方がわかりません。

    簡単な単方向連結リストの実装をしてみたのですが、toStringメソッドがうまく書けないで、困っています。 どのように記述するのがベストだと思われますか? public c

  • 解決済

    decimalFormat で数字を3つ区切りにした場合の頭の0を表示

    前提・実現したいこと decimalFormatで数字を3つ区切りにした場合、数字の頭に0がついていたら消えてしまいます。それを消さないように表示したいです。 具体的には

同じタグがついた質問を見る

  • C#

    6834questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。