(例)
String val = "01001001";
↓
"01111001";
上記のようにString型の2進数で表示された値の0の部分について
ランダムに1に変更した値を求めるにはどうすればよいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ちゃんとしたランダムじゃないですが‥。
java
1Random rand = new Random(); 2int dec = rand.nextInt(256) | Integer.parseInt(val, 2);
とりあえず8bit決め打ちです。
投稿2018/11/15 08:42
総合スコア16731
0
java の文字列操作の練習ですね。
- Javaの文字列(String)クラスについて
https://morizyun.github.io/java/type-string.html
charAt と setCharAt で書いてみます。(他の方法はいくらでもあります)
java
1import java.util.Random; 2 3public class Tera { 4 public static void main(String[] args) { 5 String val = "01001001"; 6 StringBuilder sb = new StringBuilder(val); 7 Random rnd = new Random(); 8 9 int len = val.length(); 10 for (int i = 0; i < len; i++) { 11 char c = val.charAt(i); 12 if (c == '0') { 13 if (rnd.nextInt(2) == 1) { 14 sb.setCharAt(i, '1'); 15 } 16 } 17 } 18 System.out.println(sb); 19 } 20}
投稿2018/11/15 21:53
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
お好きなコースをどうぞ。
なお共通で変数String val = "01001001";
を扱うことにします。
単純に文字列置き換え
java
1StringBuilder builder = new StringBuilder(val); 2for (int i = 0; i < builder.length(); i++) { 3 // ここは使う確率に応じて変更 4 if (Math.random() * 2 < 1) { 5 builder.setCharAt(i, '1'); 6 } 7} 8System.out.println(builder.toString());
乱数との論理和を取る(intバージョン)
java
1int target = Integer.parseInt(val, 2); 2int rnd = (int)(Math.random() * (1 << val.length())); 3int result = target | rnd; 4System.out.println(Integer.toString(result, 2));
乱数との論理和を取る(BigIntegerバージョン)
java
1BigInteger target = new BigInteger(val, 2); 2String rndStr = Stream.generate(() -> Math.random() < 0.5 ? "0" : "1") 3 .limit(val.length()) 4 .collect(Collectors.joining()); 5BigInteger rnd = new BigInteger(rndStr, 2); 6BigInteger result = target.or(rnd); 7System.out.println(result.toString(2));
ただし論理和バージョンは先頭の0が出ないので注意。別途の工夫が必要になる。
投稿2018/11/15 15:15
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ぱっと思いついた方法。
Java
1final Random rand = new Random(); 2String dst = Arrays.stream(val.split("")) 3 .map( 4 ch -> rand.nextInt(100) < 50 ? "1" : ch 5 ) 6 .collect(Collectors.joining()) 7;
投稿2018/11/15 08:18
編集2018/11/15 12:59総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。