• 締切済み

ファイル出力

下記のプログラムはランダムな黒い円を10個描くプログラムです。描かれた円の大きさ(wの値)を知りたいのでwの値を1つづつテキストファイルに出力するようにしたいのです。宜しくお願いします。 import ij.*; import ij.process.*; import ij.gui.*; import java.awt.*; import java.util.Random; import ij.plugin.*; public class Random_1 implements PlugIn { public void run(String arg) { IJ.run("New...", "name='Random 1' type='32-bit RGB' width=256 height=256"); drawOvals(); } void drawOvals() { ImagePlus imp = WindowManager.getCurrentImage(); Random ran = new Random(); int width = imp.getWidth(); int height = imp.getHeight(); for (int i=0; i<500; i++) { int w = (int)(ran.nextDouble()*width/16+1); int h = w; int x = (int)(ran.nextDouble()*width-w/2); int y = (int)(ran.nextDouble()*height-h/2); IJ.setForegroundColor((int)(0), (int)(0), (int)(0)); IJ.makeOval(x, y, w, h); IJ.run("Fill"); } } }

  • Java
  • 回答数3
  • ありがとう数2

みんなの回答

  • Gishi
  • ベストアンサー率57% (11/19)
回答No.3

JDK(Java2 SDK)のバージョンが古いのかも知れません。 new PrintWriter(ファイル名) というコンストラクタを使えるのは、JDK1.5以降です。 もしJDKのバージョンが原因であるならば、 PrintWriter out = new PrintWriter(new FileWriter("test.txt")); を使うとよいでしょう。 すこし手抜きなやり方ですが、 ループの中に System.out.println(w); を書いておいて、 実行するときに、ファイルにリダイレクトする方法もあります。 java SomeMainClass > test.txt ↑こうすると、System.outに出力したデータは 指定したファイルに書き込まれます。

nobruob
質問者

お礼

アドバイスありがとうございます。 PrintWriter out = new PrintWriter(new FileWriter("test.txt")); をやってみましたが同じエラーが出てしまいました。

回答No.2

出たエラーは何ですか? 省略しないでコピーペーストして書いて下さい。 それとどの時点で出ましたか? (コンパイル中? それとも実行中?)

nobruob
質問者

補足

コンパイル中に出たエラー文です。 constructor ????????java.lang.String ?? java.io.OutputStream ?????????? PrintWriter out = new PrintWriter("test.txt"); のtestの前の「"」のところにエラーのマークがついています。

回答No.1

まずループに入る前の所で PrintWriter でファイルを開きます。(下記) PrintWriter out = new PrintWriter("出力ファイル名"); 次に w に値を代入した直後に out.println(w); を入れます。これで w がファイルに出力されます。 最後にループを抜けた所で out.close(); をすればバッファに溜った分も全てファイルに書かれてクローズされます。

nobruob
質問者

お礼

回答ありがとうございます。 import java.io.*; を加えてやってみたところ PrintWriter out = new PrintWriter("test.txt"); の行にエラーが表示されました。 ファイル名の記入の仕方が違うのでしょうか?

関連するQ&A

  • javaのエラーの原因

    javaをテキストを使い独学しているのですが、演習問題でコンパイルに失敗する原因がわからず、回答もついていないので困っています 助けてください 問題文:-1.0以上1.0未満の実数地をランダムに生成して表示。実数地の乱数の生成にはnextDouble()を使うこと。 import java.util.Random; class Ran { public static void main(String[] args) { Random rand =new Random(); double x = rand.nextDouble(2); System.out.println(1-x); } } と記述したところ エラー 1 個 C:\MeikaiJava\Chap02>javac Ran.java Ran.java:8: nextDouble() (java.util.Random 内) を (int) に適用できません double x = rand.nextDouble(2); ^ と表示されます どこで失敗しているのでしょうか?

  • 意味がわかりません。

    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
  • androidの円(circle)を連続で出したい

    android初心者です。 androidの円(circle)を連続で出したいソースを作成していますがうまくいきません。 現在のソースではランダムで座標を取得することは出来ますが表示されません。 for文for(i=0;i<100;i++)で作成してみましたが、100回終わるまで円が表示されません。 以下が自分で作成してみたソースです。 どなたか詳しい方教えてください。 public class Balltataki extends Activity { int ran_width; int ran_height; Paint paint; boolean running=true; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(new BallView(this)); class BallView extends View { int flag=1; public BallView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { while(running==true){ ran_width = (int)(Math.random()*getWidth()); ran_height = (int)(Math.random()*getHeight()); Log.i("tag","ran_w:"+ran_width); Log.i("tag","ran_h:"+ran_height); paint=new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(1); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.argb(255, 255, 255, 255)); canvas.drawCircle(ran_width,ran_height,60,paint); try { Thread.sleep(100); } catch (Exception e) {} } } } }

  • コンパイルできません

    imgにオリジナルの画像データを格納して、それを配列pixelsに格納した後、またpixelsをimg2等に格納してimg2を画面上に表示する。というものを作りたいのですが、コンパイルできなくて困っています。次はプログラムの一部です。pixelsに格納するところでエラーが出てしまいます。エラー内容は シンボルを解釈処理できません。 シンボル: クラス PixelGrabber 位置 : na3 の クラス PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,scan) と表示されます。 わかるかたいましたらお願いします。 img = Toolkit.getDefaultToolkit().createImage(imagedata); int w,h; w = (int)getSize().width; h = (int)getSize().height; buffer = this.createImage(w,h); bufferGraphics = buffer.getGraphics(); } public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; int[] pixels = new int[w * h]; int scan = w; int offset = 0; PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,scan); try{ pg.grabPixels(); } catch(InterruptedException e){ ; } bufferGraphics.drawImage(img,0,0,this); bufferGraphics.setColor(Color.black); //処理を10回繰り返す for(int j=0; j<10; j++){ //2から1002の中で乱数を1つranに取得 int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ //ranの値にしたがって画面上にラインを表示 bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } }

    • ベストアンサー
    • 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
  • 改良したいのですが

    画面上に表示している静止画像(img)の上に、ランダムに黒色のライン(buffer)を数本表示するというプログラムを作成しました。次はそのプログラムの一部なのですが、静止画像の上に表示している線を、黒色ではなく、静止画像の輝度情報が半分(50%)になっている線(画質が劣化している線)を表示させるように改良したいのですが、どこを変えたらいいのか、どのように変えたらいいのかわかりません。わかる方いましたら、アドバイス等お願いします。多分setColorの部分を変えると思うのですが・・・(^^; public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; bufferGraphics.drawImage(img,0,0,this); bufferGraphics.setColor(Color.black); //処理を10回繰り返す for(int j=0; j<10; j++){ //2から1002の中で乱数を1つranに取得 int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ //ranの値にしたがって画面上にラインを表示 bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } } public void update(Graphics g){ paint(g); } public void run(){ while( true ){ try{ Thread.sleep(10); } catch(InterruptedException e){ } } } public void start(){ thread = new Thread(this); thread.start(); } }

    • ベストアンサー
    • Java
  • JAVA初心者です。

    以下の文法でコンパイルエラーが出ます。 添削をお願いします。 import java.util.Random; public class Test{ public static void main(String[] args){ int n; for (n = 0; n < 200; n++){ int i; for (i = 0; i < 38; i++) { Random rnd = new Random(); int ran = rnd.nextInt(10); System.out.print(ran); System.out.print(" "); for (t = 0; t < 200; t++) } System.out.println(); } } }

    • ベストアンサー
    • 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; public class Aruf{ public static void main(String[] args) { //Randomクラスのインスタンス化 Random rnd = new Random(); //変数の宣言 int ran; int a; char c; //10回繰り返す for(int b=0;b<10;b++){ //0~25の乱数を作成 ran = rnd.nextInt(26); //65を足して65~90にする a = 65 + ran; //charに型変換 c = (char)a; //表示 System.out.print(c); } } }

    • ベストアンサー
    • Java
  • Androidアプリ実行エラー2

    Androidアプリ実行エラー ソースはこちらです。 package com.example.sudoku; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Paint.FontMetrics; import android.graphics.Paint.Style; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnimationUtils; public class PuzzleView extends View { private static final String TAG = "Sudoku"; private float width; private float height; private int selX; private int selY; private final Rect selRect = new Rect(); private final Game game; public PuzzleView(Context context) { super(context); this.game = (Game) context; setFocusable(true); setFocusableInTouchMode(true); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { width = w / 9f; height = h / 9f; getRect(selX, selY, selRect); Log.d(TAG, "onSizeChanged: width " + width + ", height" + height); super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { //背景色の描画 Paint background = new Paint(); background.setColor(getResources().getColor( R.color.puzzle_background)); canvas.drawRect(0, 0, getWidth(), getHeight(), background); //盤面を描画する //枠線の色を定義する Paint dark = new Paint(); dark.setColor(getResources().getColor(R.color.puzzle_dark)); Paint hilite = new Paint(); hilite.setColor(getResources().getColor(R.color.puzzle_hilite)); Paint light = new Paint(); light.setColor(getResources().getColor(R.color.puzzle_light)); //マス目を区切る線 for (int i = 0; i < 9; i++) { canvas.drawLine(0, i * height, getWidth(), i * height, light); canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, hilite); canvas.drawLine(i * width, 0, i * width, getHeight(), light); canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), hilite); } //3*3を区切る線 for (int i = 0; i < 9; i++) { if(i % 3 != 0) continue; canvas.drawLine(0, i * height, getWidth(), i * height, dark); canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, hilite); canvas.drawLine(i * width, 0, i * width, getHeight(), dark); canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), hilite); } //数値を描画する Paint foreground = new Paint(Paint.ANTI_ALIAS_FLAG); foreground.setColor(getResources().getColor(R.color.puzzle_foreground)); foreground.setStyle(Style.FILL); foreground.setTextSize(height * 0.75f); foreground.setTextScaleX(width / height); foreground.setTextAlign(Paint.Align.CENTER); //マスの中央に数字を描く FontMetrics fm = foreground.getFontMetrics(); //x軸方向でセンタリングする。中央のx座標に揃える float x = width / 2; // float y = height / 2 - (fm.ascent + fm.descent) / 2; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { canvas.drawText(this.game.getTileString(i, j),i * width + x, j * height + y, foreground); } } //ヒントを描画する //選択されたマスを描画する } private void getRect(int x, int y, Rect rect) { rect.set((int) (x * width), (int) (y * height), (int) (x * width + width), (int) (y * height + height)); } } ログはこちらです。 ご回答をよろしくお願いします。 http://okwave.jp/qa/q8272113.html

専門家に質問してみよう