前提
Timerクラスを使って定期実行する描画のプログラミングを作りました。
デバックでだいぶ減らしたのですが、ここからどうすればいいのかわからなかったので教えてほしいです。
また、作ろうとしている動作が正常にできるかも判断してほしいです。描画のクラスは描画だけの時に動いたので問題ないと思います。
実現したいこと
正n角形を1秒ごとに正三角形から正n角形まで描画する。
角数が増えるごとに前の描画を消しています。
発生している問題・エラーメッセージ
PolygonTimer.java:20: エラー: 式の開始が不正です public void setI(){this.i++;} ^ PolygonTimer.java:22: エラー: <identifier>がありません System.out.print("How many squares do you want to draw?:"); ^ PolygonTimer.java:22: エラー: 型の開始が不正です System.out.print("How many squares do you want to draw?:"); ^ PolygonTimer.java:31: エラー: 型の開始が不正です if(i = n;){ ^ PolygonTimer.java:31: エラー: <identifier>がありません if(i = n;){ ^ PolygonTimer.java:31: エラー: 型の開始が不正です if(i = n;){
該当のソースコード
java
1import javax.swing.JFrame; 2import javax.swing.JPanel; 3import java.awt.Color; 4import java.awt.Graphics; 5import java.util.Timer; 6import java.util.TimerTask; 7import java.util.Scanner; 8 9class PolygonTimer{ 10 11 private int i = 3; 12 Scanner stdIn = new Scanner (System.in); 13 public static void main(String[] args){ 14 15 16 GameWindow gw = new GameWindow("circle and polygon",1000,1000); 17 gw.add(new DrawCanvas(i)); 18 gw.setVisible(true); 19 20 public void setI(){this.i++;} 21 22 System.out.print("How many squares do you want to draw?:"); 23 int n = stdIn.nextInt(); 24 Timer timer = new Timer(); 25 TimerTask task = new TimerTask(){ 26 27 public void run(){ 28 gw.DrawCanvas(3); 29 gw.setI(); 30 } 31 if(i = n;){ 32 timer.cancel();} 33 34 }; 35 36 public void start(){timer.schedule(task,1000,1000);} 37 38 39 } 40 41 42class DrawCanvas extends JPanel{ 43 44 public void paintComponent(Graphics g) { 45 super.paintComponent(g); 46 47 48g.clearRect(0,0,1000,1000); 49 50 int x0 = 500; 51 int y0 = 500; 52 int r = 400; 53 int x[] = new int[i]; 54 int y[] = new int[i]; 55 56 double delta = ( 2 *Math.PI )/ (double)i; 57 58 for(int l = 0; l<i; l++) { 59 x[l] = (int)(-Math.cos(Math.PI/2.0 + delta * l)*r) + x0; 60 y[l] = (int)(-Math.sin(Math.PI/2.0 + delta * l)*r) + y0; 61 } 62 63 g.setColor(Color.red); 64 g.drawPolygon(x, y, i); 65 i++; 66 67 } 68 69 public void paint(Graphics g) { 70 super.paint(g); 71 g.setColor(Color.blue); 72 g.drawOval(100, 100, 800, 800); 73 } 74 75 } 76 77class GameWindow extends JFrame{ 78 public GameWindow(String title, int width, int height) { 79 super(title); 80 setDefaultCloseOperation(EXIT_ON_CLOSE); 81 setSize(width,height); 82 setLocationRelativeTo(null); 83 setResizable(false); 84 85 } 86} 87
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
デバッグしてください、ということでしょうか。
(コンパイルエラーを取るのはデバッグ以前ですが。)
少なくとも、メソッドの中にメソッドの定義があるのをおかしいと思えないのでは、基本が分かっていないようにしか見えません。

学校の課題で授業ペースが早く、自分でもよくわかっていない状態で難しいものに手を出してしまった状態です、、、申し訳ないです、、
提出が近いのでその場しのぎで書いてもらって後から勉強したいです
おこがましいですが想像しているように直してもらうことは可能でしょうか
作業依頼や課題代行に応える場ではないので、きっちり怒られるか、先生や同級生に聞くしかないと思います。
ひとまずセミコロンは基本的に「文章としての終端」なので、「構文」として成り立たせるのなら、置いていいかどうかというのは考えてみてください。(つまりはエラーの通りということです)
=は代入で==は比較
ただ、さすがにこれを教えない先生も教科書もないはずなので、やりたいことの前に基礎を復習した方が結果的には早く進みますよ。ここで後回しにしてしまうと、ずっと後回しになって永遠に手に付けられることはないと思ってください。人間って楽な方に流れるような頭になってます。
↓の質問をしたBiginnerさんですか?(後半部分が全く同じです)
[javaで正多角形の描画のプログラムをやっています。正n角形のnの部分を入力するところでつまずいています。](https://teratail.com/questions/5dy91ppgg7ybxn)
もしそうであれば利用規約違反です。
[利用規約](https://teratail.com/legal)
同じ学校の別人あるいは先の質問を参考にした、ということであればすいません。
一体どこの学校なのか。課題をこなした後はもうきっとプログラミングはしないのでしょうね。

意見ありがとうございます。
現状進んだところで提出し、テストが終わってからゆっくりプログラミングを勉強しなおそうと思います。これからも何度か修正していくので変身していただけると助かります。
TN8001さんの返答としては、前つかっていたアカウントのパスワード等を忘れてしまい、新しくアカウントを作っていました。そうとは知らず申し訳ございません。
ログイン画面に「パスワードを忘れた方はこちら」が見やすい位置にあるので、そこで新しいアカウントを作ろうという思考に飛んでしまうのはちょっと改めたほうが良いかと。
それにしても前のご質問の投稿は今から2ヶ月以上前ですね。私はこれにて離脱します。
課題に既視感を感じたのはそういうことでしたか。

友達に教えてもらいながら解決することができました。描画するクラスをタイマータスク内で実行することで解決しました。インスタンス化では処理に飛ばないと勘違いしていたのが遠回りした原因でした。
たくさんの意見ありがとうございました。これからの勉強に役立てたいと思います。
>友達に教えてもらいながら
何よりこれが一番ですね。
> 前つかっていたアカウントのパスワード等を忘れてしまい、新しくアカウントを作っていました。
それはいけませんね。
このページの下部のヘルプから、パスワード再設定フォームに飛べます。
多分動いていると思いますが、返信がなかったりうまくいかない場合は直接「お問い合わせ」してください。
[ヘルプ | パスワードを忘れてしまった](https://teratail.com/help#forget-password)
[パスワード再設定リクエストを送る](https://teratail.com/login/forget)
[運営へのお問い合わせ](https://teratail.com/contact/input)
復旧しましたら質問を「解決済」にしたうえで、古いアカウントのほうは速やかに退会手続きをしてください。
[ヘルプ | 退会したい](https://teratail.com/help#about-chancel)
[退会申請](https://teratail.com/users/setting/leave)

了解しました。回答も含めて最後までありがとうございました。
回答3件
あなたの回答
tips
プレビュー