public class Gohkaku {
public static void main(String[] args){
int math = new java.util.Random().nextInt(51);
int japanese = new java.util.Random().nextInt(51);
int sience = new java.util.Random().nextInt(51);
int social = new java.util.Random().nextInt(51);
int[] score = { math,japanese,sience,social };
int sum = score[0] + score[1] + score[2] + score[3];
if( sum >= 100 ){
System.out.println(sum + "なので合格");
} else if ( sum <= 100 ) {
System.out.println(sum + "なので不合格");
}
}
}
この文を合格とするまでループ化させたいのですがどのように変えたらよろしいでしょうか?
whileの条件にsumを入れたかったのですが、sumを入れるためにグローバル変数にすると乱数が再生成されないということで困っています。
まだ入門本を読んでるレベルなのでwhileや、for等の簡単な文でご教示頂けると助かります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
whileの条件をtrue(無限ループ)にし、合格したらbreakでループを抜ける、というのはどうでしょうか。
投稿2015/12/29 07:51
退会済みユーザー
総合スコア0
0
はじめてのStream APIプログラミングです。swordoneさんの回答をアレンジしました。
Java
1import java.util.stream.IntStream; 2 3public class IntStream_ { 4 public static void main(String[] args) { 5 IntStream.generate(() -> 6 IntStream.generate( 7 () -> (int)(Math.random() * 51)).limit(4).sum() 8 ) 9 .peek(s -> 10 System.out.println( 11 s + ((s >= 100) ? "なので合格" : "なので不合格") 12 ) 13 ) 14 .anyMatch(x -> x >= 100); 15 } 16}
peekとanyMatchを発見するまでが長かった。やっと眠れる。
sipadan2003さん、swordoneさん、ありがとうございました。
###Random.inits()を利用する(追記)
さらに改良しました。
Java
1import java.util.Random; 2import java.util.stream.IntStream; 3 4public class IntStream_ { 5 public static void main(String[] args) { 6 IntStream.generate( 7 () -> (new Random()).ints(4l, 0, 51) 8 .peek( s -> System.out.print( s + " ") ) 9 .sum() 10 ) 11 .peek( 12 s -> System.out.println( 13 "+++p : " + s + ((s >= 100) ? " なので合格" : " なので不合格") 14 ) 15 ) 16 .anyMatch( s -> s >= 100 ); 17 } 18}
投稿2016/09/23 20:28
編集2016/09/26 15:40退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
java
1public class Gohkaku { 2 public static void main(String[] args){ 3 4 int sum = 0; 5 6 while(sum <= 100){ 7 8 int math = new java.util.Random().nextInt(51); 9 int japanese = new java.util.Random().nextInt(51); 10 int sience = new java.util.Random().nextInt(51); 11 int social = new java.util.Random().nextInt(51); 12 int[] score = { math,japanese,sience,social }; 13 14 sum = score[0] + score[1] + score[2] + score[3]; 15 16 if( sum >= 100 ){ 17 System.out.println(Integer.toString(sum) + "なので合格"); 18 } else if ( sum <= 100 ) { 19 System.out.println(Integer.toString(sum) + "なので不合格"); 20 } 21 } 22 } 23}
こんな感じでどうですかね
投稿2015/12/29 08:03
総合スコア366
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/29 08:55
退会済みユーザー
2016/09/21 18:00
0
booleanを返すメソッドとして切り出して、whileの継続条件に使う手もあります。
java
1import java.util.stream.IntStream; 2 3public class Q23614 { 4 5 public static void main(String[] args) { 6 while(!test()); 7 } 8 9 static boolean test(){ 10 int score = IntStream.generate(() -> (int)(Math.random() * 51)).limit(4).sum(); 11 boolean passed = score >= 100; 12 System.out.println(score + (passed ? "なので合格" : "なので不合格")); 13 return passed; 14 } 15 16}
投稿2016/09/22 17:58
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
入門中とのことですが、Java 8で導入されたStreamを使ったプログラム案です。
Java
1 public static void main(String[] args) { 2 boolean passed = false; 3 final Random r = new Random(); 4 while(passed == false){ 5 final int sum = r.ints(4, 0, 51).sum(); 6 passed = (sum >= 100); 7 if(passed){ 8 System.out.println(sum + "なので合格"); 9 }else{ 10 System.out.println(sum + "なので不合格"); 11 } 12 } 13 }
投稿2016/06/14 13:37
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/09/21 18:19
退会済みユーザー
2016/09/22 04:07
退会済みユーザー
2016/09/22 10:48
退会済みユーザー
2016/09/22 15:20 編集
退会済みユーザー
2016/09/22 16:29
0
処理を関数にして、その関数の呼び出しを while で繰り返すようにしてみました。
また スコアの生成や合計計算部分は、質問文のままでも動作しますが、すこし書き換えてみました。
(無駄な変数をなくした、科目の数が増えても書き開ける部分がすくなくなるようにした)
乱数の生成部分も他の方の回答の内容を反映させています。
java
1import java.util.Arrays; 2import java.util.stream.IntStream; 3import java.util.Random; 4 5public class Gohkaku { 6 public static void main(String[] args) { 7 Random rnd = new Random(); 8 while(!hantei(rnd)) {} 9 } 10 11 static boolean hantei(Random rnd) { 12 int[] score = { 13 rnd.nextInt(51), // math 14 rnd.nextInt(51), // japanese 15 rnd.nextInt(51), // sicence 16 rnd.nextInt(51), // social 17 }; 18 // int sum = score[0] + score[1] + score[2] + score[3]; 19 IntStream intStream = Arrays.stream(score); 20 int sum = intStream.sum(); 21 22 boolean ans = sum >= 100; 23 if (ans) { 24 System.out.println(sum + "なので合格"); 25 } else { 26 System.out.println(sum + "なので不合格"); 27 } 28 return ans; 29 } 30}
実行例
$ javac Gohkaku.java $ java Gohkaku 113なので合格 $ java Gohkaku 93なので不合格 91なので不合格 88なので不合格 153なので合格
投稿2015/12/29 10:23
編集2015/12/29 13:26総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
本題とは関係ないですが、いちいちRandomを生成しているのが非効率的です。
Math.random()
を使うか、一つインスタンスを生成しておいて使うべきでしょう。
java
1import java.util.Random; 2 3public class Gohkaku { 4 public static void main(String[] args){ 5 int sum = 0; 6 Random random = new Random(); 7 while(sum < 100) 8 int math = random.nextInt(51); 9 //あるいはこう書く 以下同じ 10 //int math = (int)(Math.random() * 51); 11 int japanese = random.nextInt(51); 12 int sience = random.nextInt(51); 13 int social = random.nextInt(51); 14 int[] score = { math,japanese,sience,social }; 15 int sum = score[0] + score[1] + score[2] + score[3]; 16 if( sum >= 100 ){ 17 System.out.println(sum + "なので合格"); 18 } else if ( sum <= 100 ) { 19 System.out.println(sum + "なので不合格"); 20 } 21 } 22}
投稿2015/12/29 08:34
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/29 08:05