1.算术测试。
² 实验要求:
编写一个算书测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。
package lzy;
public class MainClass
{ public static void main(String args[])
{
ComputerFrame frame;
frame=new ComputerFrame("算术测试 ");//创建窗口,其标题为:算术测试
}
}
package lzy;
import java.awt.*;
import java.awt.event.*;
public class ComputerFrame extends Frame implements ActionListener
{
TextField textOne,textTwo,textResult;
Button getProblem,giveAnwser;
Label operatorLabel,message;
Teacher teacher;
ComputerFrame(String s)
{ super(s);
teacher=new Teacher();
setLayout(new FlowLayout());
textOne=new TextField(10); //创建textOne,其可见字符长是10
textTwo=new TextField(10); //创建textTwo,其可见字符长是10
textResult=new TextField(10); //创建textResult,其可见字符长是10
operatorLabel=new Label("+");
message=new Label("你还没有回答呢");
getProblem=new Button("获取题目");
giveAnwser=new Button("确认答案");
add(getProblem);
add(textOne);
add(operatorLabel);
add(textTwo);
add(new Label("="));
add(textResult);
add(giveAnwser);
add(message);
textResult.requestFocus();
textOne.setEditable(false);
textTwo.setEditable(false);
getProblem.addActionListener(this); //将当前窗口注册为getProblem的ActionEvent事件监视器
giveAnwser.addActionListener(this); //将当前窗口注册为giveAnwser的ActionEvent事件监视器
textResult.addActionListener(this); //将当前窗口注册为textResult的ActionEvent事件监视器
setBounds(100,100,450,100);
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==getProblem) //判断事件源是否是getProblem
{
int number1=teacher.giveNumberOne(100);
int number2=teacher.giveNumberTwo(100);
String operator = teacher.giveOperator();
textOne.setText(""+number1);
textTwo.setText(""+number2);
operatorLabel.setText(operator);
message.setText("请回答");
textResult.setText(null);
}
if(e.getSource()==giveAnwser) //判断事件源是否是giveAnwser
{ String answer=textResult.getText();
try{
int result=Integer.parseInt(answer);
if(teacher.getRight(result)==true)
{ message.setText("你回答正确");
}
else
{ message.setText("你回答错误");
}
}
catch(NumberFormatException ex)
{ message.setText("请输入数字字符");
}
}
textResult.requestFocus();
validate();
}
}
package lzy;
public class Teacher
{
int numberOne,numberTwo;
String operator="";
boolean right;
public int giveNumberOne(int n)
{
numberOne=(int)(Math.random()*n)+1;
return numberOne;
}
public int giveNumberTwo(int n)
{
numberTwo=(int)(Math.random()*n)+1;
return numberTwo;
}
public String giveOperator()
{
double d=Math.random();
if(d>=0.5)
operator="+";
else
operator="-";
return operator;
}
public boolean getRight(int answer)
{
if(operator.equals("+"))
{
if(answer==numberOne+numberTwo)
right=true;
else
right=false;
}
else if(operator.equals("-"))
{
if(answer==numberOne-numberTwo)
right=true;
else
right=false;
}
return right;
}
}
2.信号灯。
² 实验要求:
编写一个带有窗口的应用程序。在窗口的北面添加一个下拉列表,该下拉列表有“”、“”和“”三个选项。在窗口的中心添加一个画布,当用户在下拉列表选择某项后,画布上绘制相应的信号灯。
package lzy;
public class SignalMainClass
{
public static void main(String args[])
{
SignalFrame frame;
frame=new SignalFrame() ;
frame.setTitle("信号灯");
}
}
package lzy;
import java.awt.*;
import java.awt.event.*;
public class SignalFrame extends Frame implements ItemListener
{
Choice choice;
SignalCanvas signal=null;
String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";
public SignalFrame()
{
choice= new Choice(); //创建choice
choice.add(itemRed); //创建choice添加itemRed
choice.add(itemYellow); //创建choice添加itemYellow
choice.add(itemGreen); //创建choice添加itemGreen
choice.addItemListener(this); //将当前窗口注册为choice的ItemEvent事件监视器
add(choice,BorderLayout.NORTH);
try{
Class cs=Class.forName("SignalCanvas");
signal=(SignalCanvas)cs.newInstance();
add(signal,BorderLayout.CENTER);
}
catch(Exception e)
{
add(new Label("您还没有编写SignalCanvas类"),BorderLayout.CENTER);
}
setBounds(100,100,360,300);
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
}
);
}
public void itemStateChanged(ItemEvent e)
{
String item= choice.getSelectedItem(); // choice返回被选中的条目
int w=signal.getBounds().width;
int h=signal.getBounds().height;
int m=Math.min(w,h);
signal.setRadius(m/6);
if(item.equals(itemRed))
{
if(signal!=null)
{
signal.setRed(1);
signal.setYellow(0);
signal.setGreen(0);
signal.setPosition(w/3,0);
signal.repaint();
}
}
else if(item.equals(itemYellow))
{
if(signal!=null)
{
signal.setRed(0);
signal.setYellow(1);
signal.setGreen(0);
signal.setPosition(w/3,h/3);
signal.repaint();
}
}
else if(item.equals(itemGreen))
{
if(signal!=null)
{
signal.setRed(0);
signal.setYellow(0);
signal.setGreen(1);
signal.setPosition(w/3,2*h/3);
signal.repaint();
}
}
}
}
package lzy;
import java.awt.*;
public class SignalCanvas extends Canvas
{
int red,green,yellow,x,y,r;
SignalCanvas()
{
setBackground(Color.white);
}
public void setRed(int r)
{
red=r;
}
public void setGreen(int g)
{
green=g;
}
public void setYellow(int y)
{ yellow=y;
}
public void setPosition(int x,int y)
{
this.x=x;
this.y=y;
}
public void setRadius(int r)
{
this.r=r;
}
public void paint(Graphics g)
{
if(red==1)
{
g.setColor(Color.red);
}
else if(green==1)
{
g.setColor(Color.green);
}
else if(yellow==1)
{
g.setColor(Color.yellow);
}
g.fillOval(x,y,2*r,2*r);
}
}
3.布局与日历。
² 实验要求:
编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。
package lzy;
public class CalendarMainClass
{
public static void main(String args[])
{
CalendarFrame frame=new CalendarFrame();
frame.setBounds(100,100,360,300);
frame.setVisible(true);
frame.validate();
frame.addWindowListener(new java.awt.event.WindowAdapter()
{
public void windowClosing(java.awt.event.WindowEvent e)
{
System.exit(0);
}
}
);
}
}
package lzy;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class CalendarFrame extends Frame implements ActionListener
{
Label labelDay[]=new Label[42];
Button titleName[]=new Button[7];
String name[]={"日","一","二","三", "四","五","六"};
Button nextMonth,previousMonth;
int year=2006,month=10;
CalendarBean calendar;
Label showMessage=new Label("",Label.CENTER);
public CalendarFrame()
{
Panel pCenter=new Panel();
pCenter.setLayout(new GridLayout(7,7));//将pCenter的布局设置为7行7列的GridLayout 布局。
for(int i=0;i<7;i++)
{
titleName[i]=new Button(name[i]);
pCenter.add(titleName[i]); //pCenter添加组件titleName[i]。
}
for(int i=0;i<42;i++)
{
labelDay[i]=new Label("",Label.CENTER);
pCenter.add(labelDay[i]); //pCenter添加组件labelDay[i]。
}
calendar=new CalendarBean();
calendar.setYear(year);
calendar.setMonth(month);
String day[]=calendar.getCalendar();
for(int i=0;i<42;i++)
{
labelDay[i].setText(day[i]);
}
nextMonth=new Button("下月");
previousMonth=new Button("上月");
nextMonth.addActionListener(this);
previousMonth.addActionListener(this);
Panel pNorth=new Panel(),
pSouth=new Panel();
pNorth.add(previousMonth);
pNorth.add(nextMonth);
pSouth.add(showMessage);
showMessage.setText("日历:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" );
ScrollPane scrollPane=new ScrollPane();
scrollPane.add(pCenter);
add(scrollPane,BorderLayout.CENTER); // 窗口添加scrollPane在中心区域
add(pNorth,BorderLayout.NORTH); // 窗口添加pNorth 在北面区域
add(pSouth,BorderLayout.SOUTH); // 窗口添加pSouth 在南区域。
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==nextMonth)
{
month=month+1;
if(month>12)
month=1;
calendar.setMonth(month);
String day[]=calendar.getCalendar();
for(int i=0;i<42;i++)
{
labelDay[i].setText(day[i]);
}
}
else if(e.getSource()==previousMonth)
{
month=month-1;
if(month<1)
month=12;
calendar.setMonth(month);
String day[]=calendar.getCalendar();
for(int i=0;i<42;i++)
{
labelDay[i].setText(day[i]);
}
}
showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );
}
}
package lzy;
import java.util.Calendar;
public class CalendarBean
{
String day[];
int year=2005,month=0;
public void setYear(int year)
{ this.year=year;
}
public int getYear()
{ return year;
}
public void setMonth(int month)
{ this.month=month;
}
public int getMonth()
{ return month;
}
public String[] getCalendar()
{ String a[]=new String[42];
Calendar 日历=Calendar.getInstance();
日历.set(year,month-1,1);
int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
int day=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{ day=31;
}
if(month==4||month==6||month==9||month==11)
{ day=30;
}
if(month==2)
{ if(((year%4==0)&&(year%100!=0))||(year%400==0))
{ day=29;
}
else
{ day=28;
}
}
for(int i=星期几,n=1;i<星期几+day;i++)
{
a[i]=String.valueOf(n) ;
n++;
}
return a;
}
}
文章浏览阅读95次。 这几天看到一个同学进不去他的Linux下的root权限,su root的时候让他敲root的密码他自己都不知道。貌似这个密码是当时装Linux的时候设的,如果自己当时不设一下的话,系统就会自动给随机一个密码给你。据说是为了安全性。那他怎么获得他的root权限呢?sudo固然可以短暂获得,但那终究是扬汤止沸。下面介绍一下做法。sudo passwd root 然后输入自己的密码,...
文章浏览阅读1.8k次,点赞2次,收藏11次。新建实例类型2C-4G-20G修改controller和各个computer节点的nova.cnf文件vim /etc/nova/nova.conf[DEFAULT]allow_resize_to_same_host=Truescheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,Serv_openstack 调整实例大小
文章浏览阅读382次。java笔试面试总结java基础基础多线程虚拟机数据库Spring网络dubbojava基础基础Object类常用的方法有哪些?wait:final方法,无法被重写。作用:阻塞当前线程,且当前线程必须拥有此对象的monitor(即锁)notify:final方法,无法被重写。作用:唤醒一个正在等待该对象monitor的线程。如果有多个线程都在等待该对象的monitor,只唤醒一个n..._java 笔试减少去同一地方的次数
文章浏览阅读666次。转载至华为官方技术文档,只做笔记参考,不作它用。定义以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出生成树协议STP(Spanning Tree Protocol)。与众多协议的发展过程一样,生成树协议也是随着网..._mstp 名词定义 bid pid
文章浏览阅读1.2k次。Centos7.4网卡配置1、Linux操作系统安装完毕,那接下来如何让Linux操作系统能上外网呢?如下为Linux服务器配置IP的方法。Linux服务器网卡默认配置文件在/etc/sysconfig/network-scripts/下,命名的名称一般为:ifcfg-eth0 ifcfg-eth1 ,eth0表示第一块网卡,eth1表示第二块网卡,依次类推。修改服务器网卡IP地址命令为vi /etc/sysconfig/network-scripts/ifcfg-eth0 (注CentOS7网卡名i_centos7.4配置网卡
文章浏览阅读1.4k次,点赞3次,收藏3次。windows terminal 执行 curl 报 invalid character '\" looking for beginning of value_urllib content:{"describe":"invalid character 'p' looking for beginning of v
文章浏览阅读3.3k次。在前两篇我们介绍了mrcp接收后的处理,最后会调用apr_queue_push扔到消息队列里面。 对应的,在apt_consumer_task.apt_consumer_task_run()中会循环调用pr_queue.apr_queue_pop()从队列里面取出数据:apt_consumer_task.apt_consumer_task_run –> apr_queue.apr_queue_p_freeswitch 对接腾讯云mrcp
文章浏览阅读335次。**一、数据库表的操作:** 1. 创建数据库表创建数据库:create table 表名( _id integer primary key autoincrement,//主键id自增长 name varchar(40), age integer(20), birthday datetime //最后一行不用写 逗号(,)_sqlite数据库 in 语句
文章浏览阅读1.5k次。官网地址: http://zeppelin.apache.org/docs/0.8.1/简介:Zeppelin是一个Apache的孵化项目.一个基于web的笔记本,支持交互式数据分析。你可以用SQL、Scala等做出数据驱动的、交互、协作的文档。(类似于ipython notebook,可以直接在浏览器中写代码、笔记并共享)多用途笔记本可实现你所需要的:数据采集数据发现数据分析..._zeppelin 容器化部署
文章浏览阅读4k次,点赞4次,收藏18次。Ubuntu16.04下opencv4.0+opencv_contrib4.0安装及配置一. OpenCV 以及OpenCV_contrib的安装1.下载并解压 OpenCV-4.0.0及OpenCV_contrib-4.0.0源码至同一个文件夹。2.因为之前安装过Opencv3.4,我们将OpenCV的prefix目录安装在/usr/local/opencv4.0.0,在终端进入至Open..._opencv 4 initmodule_nonfree
文章浏览阅读1.5k次。<?phpreturn [/*|--------------------------------------------------------------------------| Validation Language Lines|----------------------------------------------------------..._laravel validator 全局custommessage
文章浏览阅读2w次,点赞21次,收藏157次。1、下列关于多任务操作系统的叙述中,正确的是Ⅰ. 具有并发和并行的特点Ⅱ. 需要实现对共享资源的保护Ⅲ. 需要运行在多 CPU 的硬件平台上A. 仅ⅠB. 仅ⅡC. 仅Ⅰ、ⅡD.Ⅰ、Ⅱ、Ⅲ答案:C解析:多任务操作系统可以在同一时间内运行多个应用程序,即多任务操作系统具有并发和并行的特点,即 I 正确;多个任务必须互斥地访问共享资源,为达到这一目标必须对共享资源进行必要的保护,即 II 正确;现代操作系统都是多任务的,并不一定需要运行在多CPU的硬件上,单个CPU也可以满足要求,即 I_多任务操作系统具有并发和并行的特点