1. 用户输入一个月份,程序输出这个月的月历,每星期一行,星期天开始,星期六结束。
2. 用户输入一个日期,程序显示这个日期当天是星期几。
3. 用户输入两个日期,程序计算这两个日期相差的天数。
设计思路:
日历程序中需要使用日历类的实例,生成一个Calendar实例:Calendar c=GregorianCalendar.getInstance();将12个月的天数保存在一个数组中,以便程序中方便的调用各个月的天数int []day={31,28,31,30,31,30,31,31,30,31,30,31};同样的也将一个星期的名称也保存于一个数组中String []weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};用户输入年月日后通过set()函数赋值给Calendar对象的:YEAR,MONTH,DATE字段
c.set(Calendar.YEAR, temp);
c.set(Calendar.MONTH, temp);
c.set(Calendar.DATE, temp);在要求显示月历时是将DATE设置为1,表示从1号开始显示。System.out.println("------------"+year+"年"+(month+1)+"月------------");
System.out.println("SUN MON TUE WED THU FRI SAT");
c.set(Calendar.DATE,1);
int first=c.get(Calendar.DAY_OF_WEEK);
int i;
for(i=1;i<first;i++) System.out.print(" ");
for(i=1;i<=day[month-1];i++){
if(i<10) System.out.print(" ");
System.out.print(" "+i);
System.out.print(" ");
if(first++%7==0) System.out.println();
}DAY_OF_WEEK表示的是一个星期的第几天,SUNDAY是第一天,MONDAY是第二天,以后的以此类推,要求根据需要对应到数组相应项weeks[c.get(Calendar.DAY_OF_WEEK)-1]获得一个Calendar对象实例并设置值后,需要转换成一个Date类,用以计算相差的天数。Date d2=c.getTime();
long daterange=Math.abs(d1.getTime()-d2.getTime()); //getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
long time=1000*3600*24; //一天的微秒数
System.out.println("两个日期相隔"+daterange/time+"天");摆脱高手给出答案,谢谢啦!!!!!!!!!!!!!!!!!!!!!!!!!!
2. 用户输入一个日期,程序显示这个日期当天是星期几。
3. 用户输入两个日期,程序计算这两个日期相差的天数。
设计思路:
日历程序中需要使用日历类的实例,生成一个Calendar实例:Calendar c=GregorianCalendar.getInstance();将12个月的天数保存在一个数组中,以便程序中方便的调用各个月的天数int []day={31,28,31,30,31,30,31,31,30,31,30,31};同样的也将一个星期的名称也保存于一个数组中String []weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};用户输入年月日后通过set()函数赋值给Calendar对象的:YEAR,MONTH,DATE字段
c.set(Calendar.YEAR, temp);
c.set(Calendar.MONTH, temp);
c.set(Calendar.DATE, temp);在要求显示月历时是将DATE设置为1,表示从1号开始显示。System.out.println("------------"+year+"年"+(month+1)+"月------------");
System.out.println("SUN MON TUE WED THU FRI SAT");
c.set(Calendar.DATE,1);
int first=c.get(Calendar.DAY_OF_WEEK);
int i;
for(i=1;i<first;i++) System.out.print(" ");
for(i=1;i<=day[month-1];i++){
if(i<10) System.out.print(" ");
System.out.print(" "+i);
System.out.print(" ");
if(first++%7==0) System.out.println();
}DAY_OF_WEEK表示的是一个星期的第几天,SUNDAY是第一天,MONDAY是第二天,以后的以此类推,要求根据需要对应到数组相应项weeks[c.get(Calendar.DAY_OF_WEEK)-1]获得一个Calendar对象实例并设置值后,需要转换成一个Date类,用以计算相差的天数。Date d2=c.getTime();
long daterange=Math.abs(d1.getTime()-d2.getTime()); //getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
long time=1000*3600*24; //一天的微秒数
System.out.println("两个日期相隔"+daterange/time+"天");摆脱高手给出答案,谢谢啦!!!!!!!!!!!!!!!!!!!!!!!!!!
解决方案 »
- java中怎么理解“堆空间”和“栈空间”?
- java se 嵌入 IE浏览器 要有地址栏功能在地址栏输入下面显示内容,把两个java程序合成一个java程序,求代码
- mousePressed鼠标位置获取
- java基础
- 计算文本中单词出现的次数
- 如何从string中截取字符串
- 用swing做一个报表式的录入窗体——跪求,正文里面有截图。
- 请教各位大虾,我的jsp保存成txt后,前面有两个空行,怎么解决????????????????
- 我的类继承JFrame,使他显示在其他窗体前面?
- Java多线程中start和run的区别
- jboss 1099端口不能远程访问
- 求一段 把10进制 转成 20进制的java代码---急!!!
import java.util.*;public class AppCalendar{
static int[] day={31,28,31,30,31,30,31,31,30,31,30,31};
static String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
public static void main(String[] args){
try{
Scanner input=new Scanner(System.in);
System.out.println("请入一个年份和一个月份:");
int year=input.nextInt();
int month=input.nextInt();
monthCalendar(year,month-1);
System.out.println("请输入一个年份,一个月份,一个日:");
year=input.nextInt();
month=input.nextInt();
int d=input.nextInt();
Calendar c1=GregorianCalendar.getInstance();
c1.set(Calendar.YEAR, year);
c1.set(Calendar.MONTH, month-1);
c1.set(Calendar.DATE,d);
System.out.println("你输入的日期是"+getWeekName(c1));
System.out.println("请再输入一个年份,一个月份,一个日:");
year=input.nextInt();
month=input.nextInt();
d=input.nextInt();
Calendar c2=GregorianCalendar.getInstance();
c2.set(Calendar.YEAR, year);
c2.set(Calendar.MONTH, month-1);
c2.set(Calendar.DATE,d);
System.out.println("你输入的日期是"+getWeekName(c2));
getDays(c1,c2);
}catch(Exception e){
e.printStackTrace();
}
}
public static void monthCalendar(int year,int month){
Calendar c=GregorianCalendar.getInstance();
System.out.println("------------"+year+"年"+(month+1)+"月------------");
System.out.println("SUN MON TUE WED THU FRI SAT");
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DATE,1);
int first=c.get(Calendar.DAY_OF_WEEK);
int i;
for(i=1;i <first;i++) System.out.print(" ");
System.out.print(" ");
for(i=1;i <=day[month-1];i++){
if(i <10) System.out.print(" ");
System.out.print(" "+i);
System.out.print(" ");
if(first++%7==0) System.out.println();
}
System.out.println("");
}
public static String getWeekName(Calendar c){
return weeks[c.get(Calendar.DAY_OF_WEEK)-1] ;
}
public static long getDays(Calendar c1,Calendar c2){
Date d1=c1.getTime();
Date d2=c2.getTime();
long daterange=Math.abs(d1.getTime()-d2.getTime());
//getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date对象表示的毫秒数。
long time=1000*3600*24; //一天的微秒数
System.out.println("两个日期相隔"+daterange/time+"天");
return daterange/time; }
}
设计要求:
1.使用线程实现基本的动画显示。
2.在基本实现动画的基础上重载update()的方法改善动画质量。
3.使用双缓冲方法减少帧之间的闪烁,改善动画质量。
设计思路:
动画的本质就是运动的图形,即在屏幕上高速的显示一系列图像,没帧图像相似但又有所不同,从而造成动画的感觉。
Java中支持的图形格式只有GIF和JPEG两种文件格式。
Java中关于图形的处理的主要方法有:java.applet包中的Applet类中的getImage(URL url)和getImage(URL url,String name);java.awt包中的Graphics类中的几个drawImage()方法,程序通过继承Runnable接口来实现多线程,在构造函数中定义一组图像Image数组对象,利用Toolkit类(Toolkit将各种组件绑定到特定本机工具包实现)的getDefaultToolkit()方法获得系统默认的工具包对象defaultTk,然后设置一个MediaTracker类对象tracker,用于对本机上的多媒体资料进行处理。用一个for循环利用defaultTk的getImage()方法将图像添加进图像数组,最后分别tracker的addImage()方法媒体跟踪器正在跟踪的图像列表添加一个图像和waitForID()方法加载由此媒体跟踪器跟踪且具有指定标识符的所有图像,创为本程序建一个线程,并启动。spin=new Image[totalImages];
Toolkit defaultTk=Toolkit.getDefaultToolkit();
MediaTracker tracker=new MediaTracker(this); 。
for(int i=0;i<totalImages;i++){
spin[i]=defaultTk.getImage((i+1)+".gif");
tracker.addImage(spin[i], i);
try{
tracker.waitForID(i);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
x=0;
animator=new Thread(this);
animator.start();实现线程的run方法,定义线程等待时间while(Thread.currentThread()==animator){
repaint();
try{
Thread.sleep(delay);
}
catch(InterruptedException e){
e.printStackTrace();
}调用paint(Graphics g)方法循环更新显示图片g.drawImage(spin[currrentImage],10+x,30,this);
x=(x+5)%400;
currrentImage=++currrentImage%totalImages;对于用重载uodate()方法的办法改善图像动画质量,update()方法提供了可以不必先清除当前图像而更新一个Graphics对象的能力,这就允许将连续图像作为当前所显示图像的边缘增量来显示。
当AWT接收到一个重绘(repaint)请求时,程序想调用update()清除背景,而update()又会调用paint()方法。重载update()方法避免每次重绘时将整个区域清除,即背景不再自动清除,这样可以有效避免闪烁。public void update(Graphics g){
g.setColor(Color.yellow);
g.fillRect(x1, 30, spin[0].getWidth(this), spin[0].getHeight(this));
paint(g);
}对于双缓冲的方法,这个技术主要原理是创建一个后台图像,将一帧画如图像,然后调用drawImage()将整个图像一次画到屏幕上去。使用双缓冲方法应重载update()方法。if(offscreen==null){
offscreen=createImage(getSize().width,getSize().height);
Graphics og=offscreen.getGraphics(); // 创建供绘制闭屏图(off-screen image)使用的图形上下文。
og.setClip(0, 0, getSize().width, getSize().height);
og.setColor(Color.yellow);
og.fillRect(x1, 30, pin[0].getWidth(this),spin[0].getHeight(this));
og.drawImage(spin[currrentImage],10+x,30,this);
super.paint(og);
g.drawImage(offscreen,0,0,null);
x1=x;
x=(x+5)%400;
currrentImage=++currrentImage%totalImages;
希望高手指教~~我是初学者~我会加分的~
import java.util.*;public class AppCalendar{
static int[] day={31,28,31,30,31,30,31,31,30,31,30,31};
static String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
public static void main(String[] args){
try{
Scanner input=new Scanner(System.in);
System.out.println("请入一个年份和一个月份:");
int year=input.nextInt();
int month=input.nextInt();
monthCalendar(year,month-1);
System.out.println("请输入一个年份,一个月份,一个日:");
year=input.nextInt();
month=input.nextInt();
int d=input.nextInt();
Calendar c1=GregorianCalendar.getInstance();
c1.set(Calendar.YEAR, year);
c1.set(Calendar.MONTH, month-1);
c1.set(Calendar.DATE,d);
System.out.println("你输入的日期是"+getWeekName(c1));
System.out.println("请再输入一个年份,一个月份,一个日:");
year=input.nextInt();
month=input.nextInt();
d=input.nextInt();
Calendar c2=GregorianCalendar.getInstance();
c2.set(Calendar.YEAR, year);
c2.set(Calendar.MONTH, month-1);
c2.set(Calendar.DATE,d);
System.out.println("你输入的日期是"+getWeekName(c2));
getDays(c1,c2);
}catch(Exception e){
e.printStackTrace();
}
}
public static void monthCalendar(int year,int month){
Calendar c=GregorianCalendar.getInstance();
boolean isLeapYear=false;
if(year%400==0||year%4==0&&year%100!=0){
isLeapYear=true;
day[1]=29;
}
System.out.println("------------"+year+"年"+(month+1)+"月------------");
System.out.println("SUN MON TUE WED THU FRI SAT");
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DATE,1);
int first=c.get(Calendar.DAY_OF_WEEK);
int i;
//System.out.print(" ");
for(i=1;i <first;i++) System.out.print(" ");
for(i=1;i <=day[month];i++){
if(i <10) System.out.print(" ");
System.out.print(" "+i);
System.out.print(" ");
if(first++%7==0) System.out.println();
}
System.out.println("");
if(isLeapYear) day[1]=28; //改回来,因为day是static数组.
}
public static String getWeekName(Calendar c){
return weeks[c.get(Calendar.DAY_OF_WEEK)-1] ;
}
public static long getDays(Calendar c1,Calendar c2){
Date d1=c1.getTime();
Date d2=c2.getTime();
long daterange=Math.abs(d1.getTime()-d2.getTime());
//getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date对象表示的毫秒数。
long time=1000*3600*24; //一天的微秒数
System.out.println("两个日期相隔"+daterange/time+"天");
return daterange/time; }
}
用applet给你搞了个,看能不能用吧
只做了第一个功能,后面两个太简单就省了package test;import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Calendar;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;public class Clock extends Applet {
private static final String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
private JComboBox yearCbox;
private JComboBox monthCbox;
private JComboBox dayCbox;
private DatePanel datePanel; @Override
public void init() {
super.init();
setSize(500, 500);
setLayout(null);
datePanel = new DatePanel();
datePanel.setBounds(10, 50, 400, 200);
add(datePanel);
Calendar calendar = Calendar.getInstance();
yearCbox = new JComboBox();
yearCbox.setBounds(10, 0, 90, 20);
for(int i = 0 ; i < 60 ; i ++)
yearCbox.addItem(1970 + i);
add(yearCbox);
SelectChangeListener l = new SelectChangeListener();
yearCbox.setSelectedItem(calendar.get(Calendar.YEAR));
yearCbox.addItemListener(l);
JLabel label = new JLabel("年");
label.setBounds(100, 0, 15, 20);
add(label);
monthCbox = new JComboBox();
monthCbox.setBounds(120, 0, 50, 20);
for(int i = 0 ; i < 12 ; i++)
monthCbox.addItem(1 + i);
add(monthCbox);
monthCbox.setSelectedItem(calendar.get(Calendar.MONTH) + 1);
monthCbox.addItemListener(l);
label = new JLabel("月");
label.setBounds(175, 0, 15, 20);
add(label);
dayCbox = new JComboBox();
dayCbox.setBounds(190, 0, 50, 20);
add(dayCbox);
label = new JLabel("日");
label.setBounds(240, 0, 15, 20);
add(label);
setDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
}
public void setDate(int year,int month,int day){
dayCbox.removeAllItems();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i = 0 ; i < dayCount ; i ++)
dayCbox.addItem(i + 1);
dayCbox.setSelectedItem(calendar.get(Calendar.DAY_OF_MONTH));
datePanel.setDate(calendar);
datePanel.repaint();
}
public void paint(Graphics g){
super.paint(g);
}
private class DatePanel extends JPanel{
private Calendar date;
public DatePanel(){
}
private void setDate(Calendar calendar){
this.date = calendar;
}
@Override
public void paint(Graphics g){
super.paint(g);
if(date != null){
int count = weeks.length;
for(int i = 0 ; i < count ; i++){
g.drawString(weeks[i], i * 40, 20);
}
int x = 0,y = 40;
int dayCount = date.getActualMaximum(Calendar.DAY_OF_MONTH);
x = getXPosition(date.get(Calendar.DAY_OF_WEEK));
for(int i = 0 ; i < dayCount ; i++){
g.drawString(String.valueOf(i + 1), (x + i) % 7 * 40, y);
if((x + i) % 7 == 6){
y += 20;
}
}
}
}
private int getXPosition(int dayOfWeek){
int temp = dayOfWeek - Calendar.SUNDAY ;
if(temp < 0 )
temp += 7;
return temp;
}
}
public class SelectChangeListener implements ItemListener{ @Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED){
int year = Integer.parseInt(yearCbox.getSelectedItem().toString());
int month = Integer.parseInt(monthCbox.getSelectedItem().toString()) - 1;
setDate(year, month, 1);
}
}
}
}