初めて利用させていただきます。
今、課題で虫食い算のプログラムを作成しているのですが、うまく動作してくれません。
もしよろしければご指摘をしてもらえればと思い書き込みのほうをさせていただきます。
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;
}
}
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;
}
}
ご回答ありがとうございます。
申し訳ないですが
□には一つの数字が入る。
最上位の□には0は入らない。
□□
×3□
------
□1□
□8
-----
□□□
課題:□に入る数を求めなさい。
上記のように設定したいもので説明不足で申し訳ないです。。。
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
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桁で自動クイズ生成のためのコード書いてみようかと思って挫折しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Java Java です 途中は省いてますが for(int i = 0; i < 25; i ++) { s 4 2022/05/20 23:36
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<forEach> 内で供給された "ite...
-
eclipseに記述したjavaファイル...
-
干支の計算で。。。
-
javaでのエラーがわかりません。
-
javaでキー入力をエミュレート...
-
文字列を数式に
-
gccにおけるimport
-
setAttribute(String, int)は適...
-
「例外 *** は対応する try 文...
-
CSV読み込み 文字化け
-
Chorometerで一時停止した後再...
-
(急募)JavaカレンダーをGUI可に...
-
「1」などの数字を「January」...
-
Log4jで機能毎に別ファイルへ出...
-
flush()とclose()について
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
javaで質問です。 文字列2023/2...
-
[JAVA]try 内の変数を外で!?
-
Javaで改行などが出来ないのです。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
シャットダウンフックが呼ばれない
-
Javaからストアド実行(配列項目)
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
Java での グローバルIP取得
-
python OpenPyXLを使って出力結...
-
データの外挿について
おすすめ情報