解決済みの質問
Javaで素数の表を作りたいです。
Javaで素数の表を作りたいです。
Javaの課題で頭を悩ませております。
1から10までの数字を横に並べて、1だけ色を青にして、素数である2、3、5、7・・・は赤色を塗る、といったJavaプログラムを実行するにはどうすればよいのでしょうか?
添付した画像のような感じにしたいのですが・・・
とりあえず1から10まで数字を並べることはできたので、記載します。
import java.applet.*;
import java.awt.*;
public class sosuu extends Applet {
public void paint(Graphics g){
String sosuu = "";
int xPosition = 10, yPosition = 60;
for(int i=1; i<=10; i++){
sosuu = sosuu + i;
}
g.drawString(sosuu, xPosition, yPosition);
}
}
数字の間隔も、もう少し広げたいです。
よろしくお願いします(>_<)
- 補足
- 必要はありますね。単に2、3、5、7を素数として赤くするNGでして…並べることはできた↓
http://onnsei-okiba.radilog.net/article/479078.html
と思うのですが…素数判定のメソッドは、ここ↓
http://www.tsg.ne.jp/text/2004/c/mansaku/P01.html
とか参考にしたのですが、やっぱりうまく書けません(>_<)
-
- 質問日時:
- 2009/11/7 20:38:26
-
- 解決日時:
- 2009/11/14 18:04:26
-
- 回答数:
- 3
-
- お礼:
- 知恵コイン
- 100枚
-
- 閲覧数:
- 671
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
とりあえず作りましたので、参考にしてください。
//エラトステネスの篩(ふるい)により素数を求める
// 1 から 200 までの整数を表示し、"エラトステネスのふるい"の方法で,
// 2の倍,3の倍数,5の倍数,7の倍数-------を順次画面からふるい 落とす
// 最後の画面に残った赤い数字が素数
import java.awt.*;
import java.awt.event.*;
public class Sosuu extends Frame {
static final int N=200;
int k,x,y; // (x,y) は 数字の表示位置
public Sosuu() {
setTitle("エラトステネスの篩(ふるい)により素数を求める");
setLocation(170,0);
setBackground(Color.WHITE);
//画面を閉じるための処理
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void paint(Graphics g) {
Font f=new Font("MS 明朝",Font.BOLD,12);
g.setFont(f); // フォントの設定
g.setColor(Color.red);// 数字を赤で表示
//初めはすべて赤字で表示
for (int i=0; i<20; i++) {
for (int j=1; j<=10; j++) {
x=10+50*j;
y=100+i*25;
int k;
k=10*i+j;
// 数字を揃えて表示するための操作
// subString(int beginindex, int endindex)は部分文字列を返す
// beginindexは取りだす最初の文字位置、endindexは取りだす最後の文字位置
String str = " "+k;
str =str.substring(str.length()-4,str.length());
g.drawString(str,x,y);
}
}
//素数でないものを青字で表示
k=(int)Math.sqrt(N);// N までの素数を求めるとき, sqrt(N)までの数の
// 倍数であるかどかを調べれば十分
g.setColor(Color.blue);//素数でない 数を青で表示
String str = new String();
//1は素数でないので除く
str = " 1";
str =str.substring(str.length()-4,str.length());
g.drawString(str,60,100);
for (int i=2; i<=k; i++) {
int n=i; //iの整数倍
int nn=0;//iの倍数を作るのために
while(n<=N){//N以下の時続ける
x=60+50*((n-1)%10); //横の位置
y=100+25*((n-1)/10);//縦の位置
//初めてでてきた数値は素数、それ以外は素数でない
if(n != i){
str = " "+n;
str =str.substring(str.length()-4,str.length());
g.drawString(str,x,y);
}
n=i*(++nn);
}
}
}
public static void main(String[] args) {
//インスタンスの生成
Sosuu so=new Sosuu();
//画面のサイズ
so.setSize(630,650);
//描画(つまりpaint()を呼ぶ)
so.setVisible(true);
}
}
- 違反報告
- 回答日時:2009/11/9 15:38:39
- この質問・回答は役に立ちましたか?
- 役に立った!
お役立ち度:
0人が役に立つと評価しています。
ベストアンサー以外の回答
(2件中1〜2件)
- 並べ替え:回答日時の
- 新しい順
- |
- 古い順
ご質問からは、プログラムでの素数判定はしなくてよさそうにも読めるのですが。素数判定もプログラムでやる必要があるのでしょうか、ないのでしょうか?
> g.drawString(sosuu, xPosition, yPosition);
これで「1から10まで数字を並べることはできた」というのはおかしいです。数字が同じ場所に重ね書きされただけなのでは?
「java drawString」で検索して、引数の意味を調べてみてください。
--
補足を受けての追記。
sosuuはString型でしたか。見間違えていました。これだと12...90という文字列を1つ表示するだけですね。そうではなくて、一つ一つの数字をバラバラに表示できるように書き換えてみてください。下記サイトあたりが参考になるでしょう。
http://www.javadrive.jp/applet/graphics/index.html
素数判定についてはすでに回答がついているようなので省略します。なお「うまく書けません」だけでは何がうまくいかないのか分からず、回答側も答えようがないので、何がどううまくいかないのか、質問時にきちんと書くことをお勧めします。
- 違反報告
- 編集日時:2009/11/9 01:38:06
- 回答日時:2009/11/7 22:20:07
まずは素数判定のメソッドを書いてみるべきでしょう。話はそれからではないでしょうか。
「Java 素数判定」などで検索をおすすめします。
----
うまく書けないとはどう書いたのでしょうか?超シンプル・超遅バージョンであれば誰でも書けると思います。こんな感じ?
public boolean isSosuu(int number) {
int yakusu = 0;
for (int i = 1; i <= number; i++) {
if (number % i == 0) yakusu++;
}
return yakusu == 2;
}
- 違反報告
- 編集日時:2009/11/8 13:55:28
- 回答日時:2009/11/7 20:52:21


質問した人からのコメント
ありがとうございます!
「エラトステネスの篩」って、何かカッコいいですね!
>komi55888さん
すいません、以後気をつけます(>_<)
リンク先ありがとうございます!
>bear52502278さん
ありがとうございます!
ただ、私のコードのどの部分にbear52502278さんが書いてくださったコードを入れてみても、うまく動作しなかったんですよね・・・はぁ、勉強不足です(>_<)