• ベストアンサー

コンパイルできません。

コマンドプロンプト上で、乱数をいくつか取得するというプログラムを作成したいのですが、コンパイル出来なくて困っています。発生させる乱数を0~900までの数字の中から0~9個のうちのいずれかの個数だけ取得するようにしたいです。j< の所に変数を記述するのはダメなのでしょうか?わかる方いましたらお願いします。 import java.util.*; public class RandomTest{ int rand; public static void main(String[] args){    Random generator = new Random();    for(int i=0; i<1; i++){     int rand = (int)(Math.random() * 10);    }    for(int j=0; j<rand; j++){     int ran = (int)(Math.random() * 1000);       System.out.println(ran);    } } }

  • mos21
  • お礼率46% (128/273)
  • Java
  • 回答数5
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • busybull
  • ベストアンサー率100% (1/1)
回答No.4

コンパイル出来ない原因としては、rand変数はstaticで宣言していないだと思います。 下記のURL([S011 Q-04])参照してください mos21さんのソースの場合、変数randを使おうとしたら、 まず、randの宣言をmainメソッドの中に移して、最初のループにrand対して、もう一度宣言しないようにします。もちろん、osamuyさん言ったように、for文でループさせる必要がないと思いますよ こういう風に import java.util.*; public class RandomTest{ public static void main(String[] args){ int rand; Random generator = new Random(); rand = (int)(Math.random() * 10); for(int j=0; j<rand; j++){ int ran = (int)(Math.random() * 1000); System.out.println(ran); } } } なら、OKだと思います。

参考URL:
http://www.gimlay.org/~javafaq/S011.html
mos21
質問者

お礼

コンパイルできました。ご丁寧な回答ありがとうございました^^

その他の回答 (4)

回答No.5

とりあえず、コンパイルエラーの原因は 2回目のfor文の j < rand です。 スコープの概念は解かりますか? 変数の有効範囲というやつです。 一回目のfor文の中で定義している int rand = (int)(Math.random() * 10); この rand は、for文の中でのみ有効です。 つまり、for文のスコープを抜けると、randはもう使えなくなってしまいます。 でここで混乱するのは、 2回目のfor文の j < randですね。 これは正確に書くと、 j < this.rand です。 Static関数からはインスタンス変数にアクセスできないので、 コンパイルエラーとなります。 解決案はすでに出ているとおりで、 int rand を main関数のトップで定義して、 フィールド変数の rand は消してしまいましょう。 フィールド変数を使いたいのであれば、 static int rand; と定義すればOKです。 ちなみに、ソースをそのまま動かした際の、エラーコードは、 static 参照は非 static フィールド rand ではできません。 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:274) at Hoge.main(Hoge.java:3) Exception in thread "main" ですね。 エラーメッセージは重要なので次からは ぜひ提示してくださいね。

mos21
質問者

お礼

わからなかったです。勉強になりました^^ありがとうございました。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

> ループさせる必要ないですか? randを求めるのに、for文でループさせる事はない、という意味です。 しかも、1回しかループさせないのですから。 shiro-haseさんが回答されてるように、素直に、 rand = (int)(Math.random() * 10); だけで良いのでは。

回答No.2

こん**は。 まず、私の解答から。 int rand = (int)(Math.random()*10) for(int i=0;J<(9-rand);j++) { int ran = (int)(Math.random()*900) //プリント文 } では、いかがでしょうか。 for文の条件文に、変数を記述することは問題ありません。むしろ、よく使うようになると思います。 これで、randが3のとき、ranが7回出力されるはずです。 参考にして(なればですが・・・)試してみてください。 あと、次回から、できればコンパイルエラーの内容を教えてください。ご質問のプログラムのどこが悪いのか見つけられませんでした(泣) よろしくお願いします。

mos21
質問者

お礼

返信が遅れましてすいません。回答ありがとうございました。エラーの内容も記述するようにしますね(^^;

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

for(int i=0; i<1; i++){ int rand = (int)(Math.random() * 10); } 上記のコードだと、randはfor文のブロック内で新たに定義され、ブロック外部に影響を及ぼしません。 よって、このfor文を実行した後でも、randは0のままかと。 そもそも、ループさせる必要は、ないのでは?

mos21
質問者

補足

ループさせる必要ないですか?コマンドプロンプト上でjava RandomTestと実行すると、0から900のあいだで数がランダムに出力するようにしたいのです(^^:1回実行すると3個(0から9のあいだでランダム)の数字(0から900のあいだでランダム)が出力されて、次の実行では7個というように(^^;

関連するQ&A

  • コンパイルできません

    2から150の中から数字を30個取得する。というのを2回繰り返します。そして、その2回とも両方に現れた数字だけを表示させたいのですが、自分が作成したプログラムではうまくコンパイルできませんでした。シンボルを解釈処理できません。互換性のない型。というエラーが出てしまいます。ここが間違っているなどアドバイス等お願いしますm(_ _)m import java.util.*; public class RandomTest { public static void main(String[] args) { Random generator = new Random(); //2から150の中から値が30個表示される for(int i=0; i<30; i++){ int ran = (int)(Math.random() * 148)+2; } for(int j=0; j<30; j++){ int ran2 = (int)(Math.random() * 148)+2; } int ran3 = ran && ran2; System.out.println(ran3); } }

    • ベストアンサー
    • Java
  • 意味がわかりません

    1から10のうちで乱数を1から10個のうちいずれかの個数を表示する。というプログラムを作成したく、次のようなプログラムを作成したのですが、表示結果に0(何も表示されない)が出てしまい意味がわからなくて困っています。1以上としたのになぜ何も表示されない結果が出るのでしょうか? import java.util.*; public class RandomTest{ public static void main(String[] args){ int rand; Random generator = new Random(); //1以上10以下のintの値をrandに rand = (int)(Math.random()*10)+1; for(int j=1; j<rand; j++){ int ran = (int)(Math.random() * 10)+1; System.out.println(ran); } } } お願いします。

    • ベストアンサー
    • Java
  • 変数を取得したい

    例えば、次のようなプログラムで1個の乱数を取得します。その取得した乱数の一番下の桁の数字(0~9)だけに着目し、変数iなどに値を取得するといったことは出来ますでしょうか? import java.util.*; public class RandomTest { public static void main(String[] args) { Random generator = new Random(); for(int i=0; i<1; i++){ int ran = generator.nextInt(); System.out.println(ran); } } }

    • ベストアンサー
    • Java
  • プログラムについて

    1から453までのあいだでランダムに取得された225個の数字をいったんranに格納し、同様にran2,ran3,ran4にもランダムに取得された225個の数字を格納します。そこでran~ran4までで取得された数字の中から全部に共通して格納されている数字だけをran5に格納するようなプログラムは作成できないでしょうか? ranに格納するまでのプログラムは以下のように作成しました import java.util.*; public class RandomTest { public static void main(String[] args) { for(int i=0; i<225; i++){ int ran = (int)(Math.random() * 452)+1; System.out.println(ran); } } }

    • ベストアンサー
    • Java
  • 配列を使用して

    試しに1から150までの中から数字を1つ10回取得しコマンドプロンプト上に表示するというプログラムを作成しました。しかし、コンパイルはできたのですが、変な文字が表示されてしまいます。このプログラムではだめでしょうか? import java.util.*; import java.lang.*; public class hairetu { public static void main(String[] args) { Random generator = new Random(); int hairetu[] = new int[10]; for(int i=0; i<10; i++){ int ran = (int)(Math.random() * 150); hairetu[0]=ran; hairetu[1]=ran; hairetu[2]=ran; hairetu[3]=ran; hairetu[4]=ran; hairetu[5]=ran; hairetu[6]=ran; hairetu[7]=ran; hairetu[8]=ran; hairetu[9]=ran; } System.out.println(hairetu); } }

    • ベストアンサー
    • Java
  • 乱数を発生させて、それを配列して小さい順に並べる

    乱数の発生のさせ方は、質問集で見て import java.util.Random; class ransuu { public static void main(String args[]) { Random rand = new Random(); for ( int i = 0; i <10; i++){ int x = rand.nextInt(9); System.out.println(x); } } } を用いて表示できたのですが、そのあとの配列がよく分かりませんのでぜひ教えてください。ちなみに私の持っているテキストには任意の数(22、80、57、60、50など)を並べ替えるというものはあるのですが、今回のような乱数+配列の例が載っていないのでよく分かりませんでした。

    • ベストアンサー
    • Java
  • java プログラム 範囲を指定した乱数

    正規乱数をボックスミューらー法で発生させて、 範囲を指定して出力したいと思ってます。 プログラムを作成してみたのですが・・・ 平均50で範囲を48から52にしたいのですが たまに範囲外というか「0.0」が出力されてしまいます。 アドバイスをください import java.util.*; public class test2{ public static void main(String args[]){ double R,S; double r[]=new double[200];  double s[]=new double[200]; double s1[]=new double[200]; Random ran=new Random();    for(int i=0;i<200;i++){     R=ran.nextDouble(); S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble())); r[i]=R; s1[i]=S; if(50-2<s1[i]){ if(50+2>s1[i]){ s[i]=s1[i]; } } } for(int j=0;j<150;j++){ System.out.println(s[j]); } } } お願いします

    • ベストアンサー
    • Java
  • 九九のプログラム

    public class kuku{ public static void main(String[] args){ int[][] hyou=new int[10][10]; System.out.print(" "); int i; int yoko; for(i=1;i<hyou.length;i++){ yoko=(int)(Math.random()*10); hyou[i][0]=yoko; System.out.print(" "+hyou[i][0]); } System.out.println(); int j; int tate; for(j=1;j<hyou[0].length;j++){ tate=(int)(Math.random()*10); masu[0][j]=tate; System.out.println(hyou[0][j]); }}} これを実行すると乱数がダブって表示されてしまうのですが、ダブらないようにし、appletで実行できるようにしたいのですがどのように直したらいいのでしょうか。どなたかアドバイスください。

  • 意味がわかりません。

    2から902の中で乱数を10個ranに格納し、それをi=0からi+=ran表示するというプログラムを作成しました。下のプログラムはその1部なのですが、意味のわからない部分があり困っています。ranには得られた10個の乱数のうちの1つの数字が格納されますよね。10個取得したとはどういった処理がされるのでしょうか? public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; bufferGraphics.drawImage(image,0,0,this); bufferGraphics.setColor(Color.black); int rand; //2から902の中で乱数を10個ranに格納 for(int j=0; j<10; j++){ int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } }

    • ベストアンサー
    • Java
  • 0が表示されてしまいます

    次のようなプログラムを作成し、3つの配列の共通部分を表示したいのですが、うまく表示されず0が何個も表示されました。おかしい部分は/**/で囲みましたので、なぜ0が表示されるのかわかる方いましたら教えてください。お願いします。 import java.util.*; import java.lang.*; public class hairetu { public static void main(String[] args) { Random generator = new Random(); int hairetu[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i] = (int)(Math.random() * 450); } int hairetu2[] = new int[90]; for(int i=0; i<90; i++) { hairetu2[i] = (int)(Math.random() * 450); } int hairetu3[] = new int[90]; int k = 0; for(int i=0; i<90; i++) { for(int j=0; j<90; j++) { if(hairetu[i] == hairetu2[j]) { hairetu3[k] = hairetu[i]; System.out.println(hairetu3[k]); k++; } } } System.out.println("\n---------------------------------\n"); int hairetu4[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i] = (int)(Math.random() * 450); } /* int hairetu5[] = new int[90]; int m = 0; for(int i=0; i<90; i++) { for(int j=0; j<90; j++) { if(hairetu3[i] == hairetu4[j]) { hairetu5[m] = hairetu3[i]; System.out.println(hairetu5[m]); m++; } } }*/ } }

    • ベストアンサー
    • Java