Java Applet での虫食い算での質問
初めて利用させていただきます。
今、課題で虫食い算のプログラムを作成しているのですが、うまく動作してくれません。
もしよろしければご指摘をしてもらえればと思い書き込みのほうをさせていただきます。
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
{
int A, B;
int cnt;
int sub(int n,int m)
{
int i;
for (i=1; i<m; i++)
n /= 10;
return n % 10;
}
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,2)==1 && sub(d,2)==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);
}
else
{
c = A * (B % 10);
d = A * (B / 10);
e = A * B;
g.setFont(new Font("Helvetica",Font.BOLD,18));
for (i=1; i<=2; i++)
{
g.drawString(Integer.toString(sub(A,i)),100-i*20, 20);
g.drawString(Integer.toString(sub(B,i)),100-i*20, 40);
}
for (i=1; i<=3; i++)
{
g.drawString(Integer.toString(sub(c,i)),100-i*20, 60);
g.drawString(Integer.toString(sub(d,i)), 80-i*20, 80);
}
for (i=1; i<=4; i++)
g.drawString(Integer.toString(sub(e,i)),100-i*20,100);
g.setFont(new Font("Helvetica",Font.PLAIN,12));
g.drawString("cnt = "+Integer.toString(cnt),30,115);
}
}
public boolean action(Event e, Object arg)
{
if ("実行".equals(arg))
{
if (A == 0)
puzzle();
else
A = cnt = 0;
repaint();
}
return true;
}
}
お礼
回答ありがとうございます! こういうことでしょうか? Graphics2D g1 = (Graphics2D)this.getGraphics(); Rectangle rect = new Rectangle(); rect.setRect(50,50,200,200); g1.setColor(Color.ORANGE); g1.fill(rect); Rectangle rect2 = new Rectangle(); rect2.setRect(150,350,150,150); g1.setColor(Color.GREEN); g1.fill(rect2); やはりこれだけでは治りませんでした。 文字はともかく、せめて図形を常に表示させたいのですが、 具体的にどこをどうすればよいのかまったくわかりません・・・