| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1924 人关注过本帖
标题:JAVA改错和程序解释
只看楼主 加入收藏
zacom
Rank: 2
等 级:论坛游民
威 望:2
帖 子:381
专家分:15
注 册:2007-9-15
结帖率:88.89%
收藏
 问题点数:0 回复次数:10 
JAVA改错和程序解释
这是我看书打的,,但运行时有个错误....说符号找不到是什么原因..另外判断秒针,分针,时针位置是怎么算来的,,看不懂,,希望明白的解释下
import java.awt.*;
import java.util.Date;
import java.applet.Applet;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class CLOCK extends Applet implements  Runnable
{
    private Thread athread;
    private SimpleDateFormat sdateformat;
    private int second_lastx=0,second_lasty=0;
    private int minute_lastx=0,minute_lasty=0;
    private int hour_lastx=0,hour_lasty=0;
    public void  init(){
        this.setBackground(Color.white);
        this.athread=null;
        this.sdateformat=new SimpleDateFormat("yyyy年mm月dd日hh时mm分ss秒a EEEEE");
    }
    public void paint(Graphics g)
    {
        Calendar rightnow=Calendar.getInstance();
        int second=rightnow.get(Calendar.SECOND);
        int minute=rightnow.get(Calendar.MINUTE);
        int hour=rightnow.get(Calendar.HOUR);
        int center_x=this.getWidth()/2;
        int center_y=60;
        int second_x=(int)(Math.cos(second*Math.PI/30-Math.PI/2)*45+center_x);
        int second_y=(int)(Math.sin(second*Math.PI/30-Math.PI/2)*45+center_y);
        int minute_x=(int)(Math.cos(minute*Math.PI/30-Math.PI/2)*40+center_x);
        int minute_y=(int)(Math.sin(minute*Math.PI/30-Math.PI/2)*40+center_y);
        int hour_x=(int)(Math.cos((hour*30+minute/2)*Math.PI/180-Math.PI/2)*30+center_x);
        int hour_y=(int)(Math.sin((hour*30+minute/2)*Math.PI/180-Math.PI/2)*30+center_y);
//这里是怎么来的??
        g.setFont(new Font("TimesRoman",Font.PLAIN,14));
        g.setColor(Color.blue);
        g.drawOval(center_x-50,center_y-50,100,100);
        g.setColor(Color.darkGray);
        g.drawString("9",center_x-45,center_y+3);
        g.drawString("3",center_x+40,center_y+3);
        g.drawString("12",center_x-5,center_y-37);
        g.drawString("6",center_x-3,center_y+45);
        g.setColor(this.getBackground());
        if(second_x!=second_lastx||second_y!=second_lasty)
            g.drawLine(center_x,center_y,second_lastx,second_lasty);
        if(minute_x!=minute_lastx||minute_y!=minute_lasty)
        {
            g.drawLine(center_x,center_y-1,minute_lastx,minute_lasty);
            g.drawLine(center_x-1,center_y,minute_lastx,minute_lasty);
        }
        if(hour_x!=hour_lastx||hour_lasty!=hour_lasty)
        {
            g.drawLine(center_x,center_y-1,hour_lastx,hour_lasty);
            g.drawLine(center_x-1,center_y,hour_lastx,hour_lasty);
        }
        g.setColor(Color.darkGray);
        g.drawString(sdateformat.format(new Date(),0,150));
        g.setColor(Color.blue);
        g.drawLine(center_x,center_y,second_x,second_y);
        g.drawLine(center_x,center_y-1,minute_x,minute_y);
        g.drawLine(center_x-1,center_y,minute_x,minute_y);
        g.drawLine(center_x,center_y-1,hour_x,hour_y);
        g.drawLine(center_x-1,center_y,hour_x,hour_y);
        second_lastx=second_x;
        second_lasty=second_y;
        minute_lastx=minute_x;
        minute_lasty=minute_y;
        hour_lastx=hour_x;
        hour_lasty=hour_y;
    }
    public void start()
    {
        if(athread==null)
        {
            athread=new Thread(this);
            athread.start();
        }
    }
    public void stop()
    {
        if(athread!=null)
        {
            athread.interrupt();
            athread=null;
        }
    }
    public void run()
    {
        while(athread!=null)
        {
            repaint();
            try{
                athread.sleep(1000);}
            catch(InterruptedException e){
            }
    }
   
   }
}

[[it] 本帖最后由 zacom 于 2008-10-2 22:06 编辑 [/it]]
搜索更多相关主题的帖子: JAVA 改错 解释 
2008-10-01 13:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
int second_x=(int)(Math.cos(second*Math.PI/30-Math.PI/2)*45+center_x);

这个是算秒针末尾的坐标X。用秒数换算成角度(比如30秒,刚好是PI(180度))具体点就是:指针的长度是固定的,所以它的横坐标是根据其水平夹角去算,你画个图就知道了
45是指指针的长度,分针短点(40)

g.drawString(sdateformat.format(new Date(),0,150));


就是画一个字符串(时间格式)

倚天照海花无数,流水高山心自知。
2008-10-03 20:23
zacom
Rank: 2
等 级:论坛游民
威 望:2
帖 子:381
专家分:15
注 册:2007-9-15
收藏
得分:0 
回复 2# nuciewth 的帖子
你说的我明白。。但是我不知道为什么second*Math.PI/30-Math.PI/2这个能求出角度。。请解释下

没有最好只有更好
2008-10-03 23:53
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
貌似你会解释下面一道题的话就OK了

数学题:已知一圆的半径R和圆心坐标(X,Y),以垂直向上为起始边,圆心为端点,做圆心角为A的射线交圆与M,求M 的坐标


画个图吧,你就会很清楚
还有就是秒数就对应了角度。

倚天照海花无数,流水高山心自知。
2008-10-04 11:33
zacom
Rank: 2
等 级:论坛游民
威 望:2
帖 子:381
专家分:15
注 册:2007-9-15
收藏
得分:0 
你说的那个我会做。。但还是不明白我那问题。。MATH。PI能做什么,烦了很久了

[[it] 本帖最后由 zacom 于 2008-10-4 19:21 编辑 [/it]]

没有最好只有更好
2008-10-04 19:20
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
角度换算成弧度啊,不是要用到PI(3.1415926)

倚天照海花无数,流水高山心自知。
2008-10-04 19:38
zacom
Rank: 2
等 级:论坛游民
威 望:2
帖 子:381
专家分:15
注 册:2007-9-15
收藏
得分:0 
回复 6# nuciewth 的帖子
难道我用的方法和你的不一样。。我都不用使用到PI。。晕

没有最好只有更好
2008-10-04 22:34
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
你的程序就是这样做的。

倚天照海花无数,流水高山心自知。
2008-10-05 12:34
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
这个是教材上的基本例题。。。自己看看啊

学习需要安静。。海盗要重新来过。。
2008-10-05 16:25
伤狼
Rank: 1
等 级:新手上路
威 望:2
帖 子:58
专家分:0
注 册:2008-10-10
收藏
得分:0 
呵呵 钻进牛角尖了
他肯定是被 Math.PI 给弄得头晕了
2008-10-10 14:40
快速回复:JAVA改错和程序解释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046108 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved