• ベストアンサー

コンパイルできません。

feather0411の回答

回答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
質問者

お礼

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

関連する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