0

この「XX:XX」のように時間を表示し、時計を描く単純なアナログおよびデジタル時計を作成する必要がある学校の課題があります。この例のように:

シンプルな時計

Java で何かを書いたことがありますが、あらゆる種類のエラーが発生します。この課題の目標は、クラスの実装やメソッドの定義などを学習することでした。どこが間違っているのか、何を改善できるのかについて、誰かが (実際の解決策ではなく) ヒントを教えてくれれば、とても感謝しています。

メインコード

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class ShowClock {

    public static void main (String[] args) {
        double hour = Double.parseDouble(JOptionPane.showInputDialog("What time is it (hours)?"));
        double minutes = Double.parseDouble(JOptionPane.showInputDialog("What time is it (minutes)?"));
        String time= String.valueOf(hour) + String.valueOf(minutes) ;

        JFrame frame = new JFrame("test app"); 
        frame.setSize(300,400); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setTitle("Hoe laat is het?");

        Klok k = new Klok(hour, minutes); 
        frame.add(k); 
        frame.setVisible(true);;
    }
}

クラスクロック

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

class Klok extends JComponent {
    private double hour;
    private double minutes;
    private String time;

    int anglehour = (int)((90 - (hour + minutes / 60) * 30 ) * Math.PI / 180);
    int angleminutes = (int)((90 - minutes * 6.0) * Math.PI / 180);
    int xendpointhour = (int)(150+(75*Math.cos(anglehour)));
    int yendpointhour = (int)(150-(75*Math.sin(anglehour)));
    int xendpointminutes = (int)(150+(75*Math.cos(angleminutes)));
    int yendpointminutes = (int)(150-(75*Math.sin(angleminutes)));

    public void draw (Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.drawString(time, 0, 400);
        g2.drawOval(75,75, 150, 150);
        g2.drawLine(150,150, xendpointhour, yendpointhour);
        g2.drawLine(150, 150, xendpointminutes, yendpointminutes);
    }
}

更新: まだよくわかりません。私の本はあまり説明的ではないので、コンストラクターとメソッドがどのように機能するかについて簡単な説明が必要だと思います。これらの初心者の質問で誰かを悩ませて申し訳ありません...

メインクラス

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class KlokTonen {

public static void main(String[] args) {
    double hour = Double.parseDouble(JOptionPane.showInputDialog("What time is it (hours)?"));
    double minutes = Double.parseDouble(JOptionPane.showInputDialog("What time is it (minutes)?"));
    String time= String.valueOf(hour) + String.valueOf(minutes) ;

    JFrame frame = new JFrame("test app"); frame.setSize(300,400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Hoe laat is het?");
    Klok k = new Klok(hour, minutes); 
    frame.add(k); 
    frame.setVisible(true);;
}
}

セカンドクラス

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JComponent;

public class Klok extends JComponent {
private double hour; 
private double minutes;
private String time;
public void draw (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
int angleHour = (int)((90 - (hour + minutes / 60) * 30 ) * Math.PI / 180);
int angleMinutes = (int)((90 - minutes * 6.0) * Math.PI / 180);
int xEndPointHour = (int)(150+(75*Math.cos(angleHour)));
int yEndPointHour = (int)(150-(75*Math.sin(angleHour)));
int xEndPointMinutes = (int)(150+(75*Math.cos(angleMinutes)));
int yEndPointMinutes = (int)(150-(75*Math.sin(angleMinutes)));
g2.drawString(time, 0, 400);
g2.drawOval(75,75, 150, 150);
g2.drawLine(150,150, xEndPointHour, yEndPointHour);
g2.drawLine(150, 150, xEndPointMinutes, yEndPointMinutes);
}
}
4

4 に答える 4

3

ヒント:

  1. Klokこれに一致するようにコンストラクターを宣言する必要があります。new Klok(hour, minutes)

  2. angleHour、 etceteraの計算は、および...angleMinutesの値に依存しますが、これらの式を評価している時点では、これらの変数に値を指定していません。hourminutes

  3. おそらく a のhourminuteの値はKlok変わる可能性があります ...


注意を払っていますが、Java 識別子を複数の単語から構成する場合は、「キャメル ケース」を使用する必要があります。例えばangleHourありませんanglehour


その署名に一致するKlokコンストラクターは次のようになります。

    public Klok (int hours, int minutes) {
        // ... you fill in the rest ...
    }

timeただし、で計算されたものでフィールドを初期化したい場合は、それもmain渡す必要があります...

于 2013-10-14T15:49:37.473 に答える