• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Java Applet での虫食い算での質問)

Java Appletでの虫食い算での質問

このQ&Aのポイント
  • Java Appletで作成された虫食い算プログラムが正常に動作しない問題について相談したいです。
  • プログラム内の特定の条件を満たす穴埋めされた部分の数を求める虫食い算プログラムがありますが、結果が期待通りに表示されません。
  • 指摘やアドバイスをいただけると助かります。

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

  • ベストアンサー
回答No.1

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Event; import java.awt.Font; import java.awt.Graphics; import java.awt.Panel; import java.applet.Applet; /* 元のをベースにしたもので、本来はもっと改良できるはず。 なのでまだ締め切らない方が良いかと */ public class musikuizan_1 extends Applet { public int A, B; public int cnt; public int sub(int n,int m) { int i; for (i=1; i<=m; i++)/* 終了条件を変更 */ { n /= 10; } return n % 10; } public void puzzle() { int a; int b; int c; int d; int e; for (a=1; a<=99; a++) { for (b=1; b<=99; b++) { c = a * (b % 10); d = a * (b / 10); e = a * b; if (c>=100 && c<=999 && d>=10 && d<=99 && e>=100 && e<=999) /*桁数調整*/ { if (sub(b,1)==3 && sub(c,1)==1 && sub(d,1)==8) /*穴埋めされてある部分の数*/ { A = a; B = b; cnt++; } } } } } public void init() { setBackground(new Color(150,180,200)); setLayout(new BorderLayout()); Panel psouth = new Panel(); psouth.add(new Button("実行")); add("South", psouth); } public void paint(Graphics g) { int i, c, d, e; for (i=1; i<=2; i++) { g.drawRect(97-i*20, 5,16,16); g.drawRect(97-i*20,25,16,16); g.drawRect(77-i*20,65,16,16); } for (i=1; i<=3; i++) { g.drawRect(97-i*20,45,16,16); g.drawRect(97-i*20,85,16,16); } for (i=1; i<=4; i++) { g.drawLine(30,43,100,43); g.drawLine(30,83,100,83); g.setFont(new Font("Helvetica",Font.BOLD,18)); g.drawString("x",40, 40); } if (A == 0) { g.drawString("3",60, 40); g.drawString("1",60, 60); g.drawString("8",60, 80); g.setFont(new Font("Helvetica",Font.PLAIN,12)); g.drawString("cnt = ",30,115); /* デバッグ用 g.drawString("A:"+Integer.toString(A),300,300); g.drawString("B:"+Integer.toString(B),300,310); */ } else { c = A * (B % 10); d = A * (B / 10); e = A * B; g.setFont(new Font("Helvetica",Font.BOLD,18)); /* sub関数の変更に伴い、ループの開始条件・終了条件、および表示する座標の式が変化しているので注意 */ for (i=0; i<=1; i++) { g.drawString(Integer.toString(sub(A,i)),80-i*20, 20); g.drawString(Integer.toString(sub(B,i)),80-i*20, 40); } for (i=0; i<=2; i++) { g.drawString(Integer.toString(sub(c,i)),80-i*20, 60); } for (i=0; i<=1; i++) { g.drawString(Integer.toString(sub(d,i)), 60-i*20, 80); } for (i=0; i<=2; i++){ g.drawString(Integer.toString(sub(e,i)),80-i*20,100); } g.setFont(new Font("Helvetica",Font.PLAIN,12)); g.drawString("cnt = "+Integer.toString(cnt),30,115); g.drawString("A:"+Integer.toString(A),300,300); g.drawString("B:"+Integer.toString(B),300,310); } } public boolean action(Event e, Object arg) { if (arg.toString().equals("実行")) { if (A == 0){ puzzle(); } else { repaint(); } } return true; } }

suika2004
質問者

お礼

ご回答ありがとうございます。 申し訳ないですが □には一つの数字が入る。 最上位の□には0は入らない。   □□  ×3□  ------  □1□  □8  -----  □□□ 課題:□に入る数を求めなさい。 上記のように設定したいもので説明不足で申し訳ないです。。。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

>if (sub(b,1)==3 && sub(c,1)==1 && sub(d,1)==8) /*穴埋めされてある部分の数*/ if (sub(b,1)==3 && sub(c,1)==1 && sub(d,0)==8) /*穴埋めされてある部分の数*/ 凡ミスしている自分が本気で嫌になりましたorz

suika2004
質問者

お礼

本当に助かりました。 これを機に私もこれからJavaのほうを勉強していきたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

何かおかしいと思ったら・・・ >実行ボタンを二度押すと 俺のコードのpuzzle();の後ろに repaint(); を入れて。一回で済むようになるから。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

>上記のように設定したいもので ええ、ですからそういうコードを書いたのです。 このjavaのソースコードをjavacを利用してコンパイルし、 hoge.html等のobject要素から呼び出し、 実行ボタンを二度押すと  2 9 * 3 4 ------- 1 1 6 8 7  ------- 9 8 6 という答えが出ますよ 。 ただし、 実際に探す時に if (sub(b,1)==3 && sub(c,1)==1 && sub(d,1)==8) /*穴埋めされてある部分の数*/ { A = a; B = b; cnt++; } ということで上書きしてしまっているため cnt = 2 でも 答えは1つしか表示されてないですけどね。(全てが表示されるわけではない) #N桁 * M桁で自動クイズ生成のためのコード書いてみようかと思って挫折しました。

suika2004
質問者

お礼

なるほどです。。。 ほんとにわざわざご回答していただきありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • java applet

    import java. applet.*; import java. awt. Button; import java. awt. Label; import java. awt. TextField; import java. awt. event.*; public class 1120 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private TextField box2 = new TextField(5); private TextField box3 = new TextField(5); private Label moji1 = new Label(" と "); private Label moji2 = new Label(" の和は "); private Label moji3 = new Label(" である。 "); private Button ok = new Button("OK"); public void init() { resize( 320 , 240); add( box1 ); add( moji1 ); add( box2 ); add( moji2 ); add( box3 ); add( moji3 ); add( ok ); ok.addActionListener( this ); } public void actionPerformed( ActionEvent e ) { int i=0 ,j =0 , k; String t1 = box1.getText(); String t2 = box2.getText(); i = Integer.parseInt( t1 ); j = Integer.parseInt( t2 ); k = i + j; String s = Integer.toString( k ); box3. setText( s ); } } //上記のプログラムを書いたのですが、なぜかエラーが出てしまいます。勿論、自分でも見直しましたが、その理由がわかりませんでした。知識のある方、ご回答の方お願いします。

  • Java applet

    Java appletを使用する課題なのですが、 途中まで書いて、それから止まってしまっています。 アドバイスなど頂ければ嬉しいです。 課題は、 (1)右から左へ動く文字列左から右へ動く文字列とを表示 (2)文字列が消えたらまた出てくるようにする (3)マウスのクリックボタンを押すと止まり、離すと動きだすようにする (2)まで考えたプログラム(コンパイル、実行済)を以下に載せます。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class SasakiYui extends Applet implements Runnable{ Thread th = null; Graphics g; int x; public void init(){ setBackground(Color.white); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void run(){ while(!Thread.interrupted()){ for(x=600;x>-300;x=x-5){ repaint(); try{ Thread.sleep(50); } catch(InterruptedException e){} } } } public void paint(Graphics g){ g.drawString("Happy Brithday!",x,10); g.drawString("Happy Birthday!",600-x,40); } } (3)ができるようにするには、 addMouseListener(new Mouseadapter(){ public void mousePressed(MouseEvent e){……} を使用するのだろうとは思うのですが、 ・これを組み込むのはpublic void init(){の後で良いか ・……の部分に何を書けばいいのか の2点がわかりません; よろしければ、アドバイスお願い致します!

    • ベストアンサー
    • Java
  • Javaマウスイベント 応答速度の改善したい。。

    初心者です。 下記のプログラムを実行すると、 連続してクリックしたときに、何回か応答できない 場合があります。 解決策があるようでしtら、教えてください。 import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.Toolkit; import java.lang.String; import javax.swing.JFrame; import javax.swing.JPanel; public class jjj extends JFrame { public jjj() { add(new DrawPanel()); } public static void main(String[] A00) { Toolkit.getDefaultToolkit().setDynamicLayout(true); JFrame L00 = new jjj(); L00.setTitle("マウスの座標を表示"); L00.setDefaultCloseOperation(EXIT_ON_CLOSE); L00.setBackground(Color.white); L00.setSize(1920, 1200); L00.setVisible(true); } } class DrawPanel extends JPanel implements MouseListener { int I00 = 10; int I01 = 10; int w = 10; int h = 10; int a = 100; int b = 100; public DrawPanel() { setBackground(Color.white); addMouseListener(this); } public void paintComponent(Graphics g) { super.paintComponent(g); String L00 = String.format("(%d, %d)", I00, I01); g.drawString(L00, I00, I01); g.drawLine(0,0,I00, I01); g.drawRect(I00-a/2, I01-b/2, a, b); } public void mouseMoved(MouseEvent A00) { I00 = A00.getX(); I01 = A00.getY(); repaint(); } public void mouseDragged(MouseEvent A00) { I00 = A00.getX(); I01 = A00.getY(); int w = I00; int h = I01; repaint(); } public void mousePressed(MouseEvent A00) { } public void mouseReleased(MouseEvent A00) { } @Override public void mouseClicked(MouseEvent A00) { I00 = A00.getX(); I01 = A00.getY(); repaint(); } @Override public void mouseEntered(MouseEvent arg0) { } @Override public void mouseExited(MouseEvent arg0) { } }

    • ベストアンサー
    • Java
  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • javaでgraphicsの描画の件

    今日は javaでgraphicsの描画を行っていますが、CENTERのペインには、描画できますが、 それ以外のペイン(NORTH,WEST、EAST,、SOUTH)には、描画できないように思います。 Q1)この件について、コメント頂けますと大変助かります。 下記に、ソースコードを添付いたします。 =================== package pkg; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class SampleApp extends JFrame { public SampleApp(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 300); this.add(new GPanel(), BorderLayout.WEST); this.add(new GPanel(), BorderLayout.CENTER); } public static void main(String[] args) { new SampleApp().setVisible(true); } } class GPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); // int w = this.getWidth(); // int h = this.getHeight(); int w=200; int h=200; g.setColor(Color.RED); g.fillOval(0, 0, w/2, h/2); Graphics2D g2 = (Graphics2D)g; g2.draw(new Line2D.Double(40, 40, w,h)); g.setColor(Color.BLUE); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString("Graphics draw!", 10, h - 50); // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(8.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } }

    • ベストアンサー
    • Java
  • javaのことで

    ---MainPanel.java--- import java.awt.Dimension; import java.awt.Graphics; import java.event.MouseEvent; import java.event.MouseListener; import javax.swing.JPanel; import java.util.Random; public class MainPanel extends JPanel implements MouseListener { public static final int WIDTH = 640; public static final int HEIGHT = 480; private static final int NUM_FILE = 4; private File[] file; private int prev; public MainPanel() { setPreferredSize(new Dimension(WIDTH, HEIGHT)); file = new File[NUM_FILE]; for (int i = 0; i < NUM_FILE; i++) { file[i] = new File(i, this); } select(); addMouseListener(this); } private void clear() { for (int i = 0; i < NUM_FILE; i++) { file[i].delete(); } } private boolean check(int a, int b) { return a == b || a == prev || b == prev; } private void select() { Random rand = new Random(); int a, b; do { a = rand.nextInt(NUM_FILE); b = rand.nextInt(NUM_FILE); } while (check(a, b)); file[a].set(0, 0); file[b].set(file[a].getX() + file[a].getWith() + File.SPACE, 0); } public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < NUM_FILE; i++) { if (file[i].isSelected()) { file[i].draw(g); } g.drawString("ファイル" + (i + 1) + " … " + file[i].getCnt(), 0, HEIGHT * 3 / 4 + i * 15); } } public void mouseClicked(MouseEvent e) { int x = e.getX(); int y = e.getY(); for (int i = 0; i < NUM_FILE; i++) { if (file[i].isSelected()) { // 表示されていて // 画像内なら if (x > file[i].getX() && x < file[i].getX() + file[i].getWidth() && y < file[i].getY() && y > file[i].getY() + file[i].getHeight()) { file[i].count(); prev = i; clear(); select(); break; } } } repaint(); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } フレームを用意してMainPanelを付加し,pack();してください.

  • Javaプログラムの繋げ方について。

    Javaプログラムの繋げ方について。 今まで(1)のようなプログラムを書いていました。 作りたいものに向けて色々検索するとやりたいものに近い(2)のようなサンプルプログラムを見つけました。 しかし、Java初心者なもので混ぜ方(?)がわかりません。 現在の私の知識からいうと今までのはアプレットでフレーム使うのはアプリケーションなのかな?別物なのかな?そんな感じです。 もし、混ぜることができるなら何かアドバイスをお願いします。 (1)package test; import java.applet.* ; import java.awt.Label ; import java.awt.Font ; import static java.awt.Font.BOLD ; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; public class test extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); g.fillOval(320, 200, 100, 100); } public void init () { ~~~~~~~~~~~~~~~~ } public void start () { ------------ }}} (2)import java.awt.*; import java.awt.event.*; public class MouseEvent7 extends Frame { int posX = 50; int posY = 50; public static void main(String [] args){ new MouseEvent7(); } //コンストラクタ MouseEvent7(){ this.addWindowListener(new WinAdapter()); //ウィンドウリスナーの登録 this.setSize(200,200); this.setVisible(true); //MouseMotionListenerの登録 addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ posX = e.getX(); posY = e.getY(); repaint(); //paintメソッドを実行 } } ); } public void paint(Graphics g){ g.drawOval(posX,posY,50,50); } } (1)の内容に本当に(2)のプログラムで出来るマウスの動きに合わせて円も動く+クリックしたらそこで止まるだけいいのですが。 出来たら止まった点の座標も取りたいですが、そこまではいってません;;

  • Java appletプログラムで困ってます。

    市販の本に掲載せれているEclipse下記プログラムを丸写しで打込みコンパイルしました。 それでWEB上で確認した所、オブジェクト動作上(.pngの表示・非表示)では動作している様に思います。 しかし、どうもLANネットワーク(最終的にはRS232C)動作反応がありません プログラムに問題があるのでしょうか? ネットワーク・セキュリティー・ファイヤウォール等に問題があるのでしょうか? まったく見当がつきません。Java言語は初心者です。 ご教授宜しくお願い致します。 import java.applet.Applet; import java.awt.Button; import java.awt.Event; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class xport002 extends Applet implements Runnable{ boolean sw1,sw2,run; Image img1,img2,img3; String buff; char com; Thread th=null; int port=10001; InetAddress xport_ip=null; Socket xport_socket; DataInputStream socketin; DataOutputStream socketout; public void init(){ try{ xport_ip=InetAddress.getByName(getCodeBase().getHost()); } catch(UnknownHostException e){} try{ xport_socket=new Socket(xport_ip,port); //socketin=new DataInputStream(xport_socket.getInputStream()); socketout=new DataOutputStream(xport_socket.getOutputStream()); } catch(Exception e){} img1=getImage(getDocumentBase(),"base2.png"); img2=getImage(getDocumentBase(),"Red3.png"); img3=getImage(getDocumentBase(),"Red4.png"); add(new Button("LED-R1")); add(new Button("LED-R2")); repaint(); } public boolean action (Event e,Object obj){ if(obj.equals("LED-R1")){ sw1=!sw1; com='1'; repaint(); run=true; } else if(obj.equals("LED-R2")){ sw2=!sw2; com='2'; repaint(); run=true; } return true; } public void start(){ if(th==null){ th=new Thread(this); th.start(); } } public void run(){ Thread me=Thread.currentThread(); while(th==me){ if(run){ try{ socketout.writeByte(com); socketout.flush(); repaint(); th.sleep(1000); } catch(Exception e){} run=false; sw1=false; sw2=false; repaint(); } try{ buff=socketin.readLine(); repaint(); } catch(IOException e){} } } public void stop(){ if(th!=null){ try{ socketin.close(); socketout.close(); xport_socket.close(); } catch(Exception e){} th.stop(); th=null; } } public void paint(Graphics g){ g.drawImage(img1,100,50,this); if (sw1)g.drawImage(img2,100,50,this); if (sw2)g.drawImage(img3,150,50,this); String t1=buff+"℃"; g.setFont(new Font("MS明朝",Font.BOLD,36)); g.drawString(t1, 100, 200); } }

  • Javaを使ってデジタル時計を作りたいです。時、分、秒も表示させたいです。

    Javaの勉強をしている初心者の者です。 Eclipseを使ってデジタル時計を作ろうと試みているのですが、どうしても"●●時●●分●●秒"というように、表示させることができません(;_;) また、時刻は16時台になっていますが、深夜1時とかにアプレットを作動させると、"10235"というように、5桁で表記されてしまいます。 "010235"のように、6桁で時刻を表示させることができません(;_;) 私が書いたコードのどこを修正すれば、6桁の時刻で、なおかつ、時、分、秒も入ったデジタル時計を表示できるのか、教えていただければ幸いです(>_<) よろしくお願いします<m(__)m> import java.awt.*; import java.applet.*; import java.util.*; public class digital_clock extends Applet{ public void paint(Graphics g){ int hour_of_day, min, sec; Calendar cal = Calendar.getInstance(); hour_of_day = cal.get(Calendar.HOUR_OF_DAY ); min = cal.get(Calendar.MINUTE); sec = cal.get(Calendar.SECOND); String s; s = "hour_of_day+月+min+分+sec+秒"; g.setFont(new Font("SansSerif", Font.PLAIN, 60)); g.drawString(Integer.toString(hour_of_day), 20, 50); g.drawString(Integer.toString(min), 85, 50); g.drawString(Integer.toString(sec), 150, 50); } }

    • ベストアンサー
    • Java
このQ&Aのポイント
  • 廃インク吸収パットが限界に達した場合、エプソンの修理窓口に交換を依頼する必要があります。
  • 修理窓口に直接持ち込む方法や、デオデオなどの家電量販店での修理依頼ができる場合もあります。
  • 修理依頼の際は、保証書や購入証明書などの書類が必要になる場合もあるので、事前に確認しておくと良いでしょう。
回答を見る

専門家に質問してみよう