/计算器/
import javaawt;
import javaxswing;
import javaxswingborder;
import javaawtevent;
public class Calculator implements ActionListener{
JFrame frame;
JPanel panel;
JTextField tfShow;/定义显示文本框/
JButton b1[]=new JButton[10]; /数字按钮/
JButton b2[]=new JButton[6]; / *** 作按钮/
boolean isNumber;/判断是否输入多位数字的变量/
double number;/存储输入数值、显示结果的变量/
double result;/存储中间运算结果的变量/
char operator;/存储当前 *** 作符的成员变量/
public Calculator(){
frame=new JFrame("计算器");
framesetSize(300,300);/指定框架窗口的大小/
framesetResizable(false);/使框架窗口不可改变大小/
JPanel contentPane=(JPanel)framegetContentPane();
contentPanesetBorder(new EmptyBorder(20,20,20,20));/绘制框架的指定大小的空透明边框/
tfShow=new JTextField("0",25);/指定属性的文本域/
tfShowsetHorizontalAlignment(JTextFieldRIGHT);/设置文本域中文本的对齐方式/
isNumber=true;/初始值设置/
number=0;/初始值设置/
result=0;/初始值设置/
operator=' ';/初始值设置/
for(int i=0;i<b1length;i++){
b1[i]=new JButton(IntegertoString(i));/创建数字按钮/
b1[i]setActionCommand(IntegertoString(i));
b1[i]addActionListener(this);
b1[i]setForeground(Colorblue);
}
String bs[]={"/","","-","C","+","="};
for(int i=0;i<b2length;i++){
b2[i]=new JButton(bs[i]);/创建 *** 作按钮/
b2[i]setActionCommand(bs[i]);
b2[i]addActionListener(this);
b2[i]setForeground(Colorred);
}
panel=new JPanel();
panelsetLayout(new GridLayout(4,5));
paneladd(b1[1]);
paneladd(b1[2]);
paneladd(b1[3]);
paneladd(b2[0]);
paneladd(b1[4]);
paneladd(b1[5]);
paneladd(b1[6]);
paneladd(b2[1]);
paneladd(b1[7]);
paneladd(b1[8]);
paneladd(b1[9]);
paneladd(b2[2]);
paneladd(b1[0]);
paneladd(b2[3]);
paneladd(b2[4]);
paneladd(b2[5]);
frameadd(tfShow,BorderLayoutNORTH);/将文本框放置在框架上方/
frameadd(panel,BorderLayoutCENTER);/将装有按钮组的panel放在框架的中心/
framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);/设置框架窗口的默认窗口关闭 *** 作/
framesetVisible(true);/设置框架可见/
}
public double getDisplay(){/返回要显示的结果/
return number;
}
public void reDisplay(){/刷新文本域的内容/
tfShowsetText(""+getDisplay());
}
/对输入数字的处理/
public void numberProcess(int num){
if(isNumber&&num!=0){
String s1=IntegertoString(num);
String s2=IntegertoString((int)(thisnumber));
thisnumber=DoubleparseDouble(s2+s1);/对多位数字的处理/
}else{
thisnumber=num;
}
isNumber=true;/输入连续数字(即多位数字)时为真/
}
public void operationProcess(char operator){/根据输入的 *** 作符改变当前 *** 作符/
switch(operator){
case '-':
thisoperator='-';
break;
case '+':
thisoperator='+';
break;
case '':
thisoperator='';
break;
case '/':
thisoperator='/';
break;
}
result=number;
isNumber=false;/输入 *** 作符时表示输入连续数字的标记变量为假/
}
public void clear(){
number=0;
result=0;
}
public void equal(){/计算运算结果/
switch(operator){
case '-':
result=result-number;
break;
case '+':
result=result+number;
break;
case '':
result=resultnumber;
break;
case '/':
result=result/number;
break;
case ' ':
result=number;
break;
}
number=result; /把运算结果赋值给显示变量/
isNumber=false;
operator=' ';
}
public static void main(String args[]){
Calculator cal=new Calculator();/创建计算器/
}
public void actionPerformed(ActionEvent e){
String command=egetActionCommand();/获取按钮激发的 *** 作事件的命令名称/
char c=commandcharAt(0);/将按钮命令名称的第一个字符赋值给一个字符c/
switch(c){
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
int number=IntegerparseInt(command);
numberProcess(number);/输入数字的处理/
break;
case '+':
case '-':
case '':
case '/':
operationProcess(c);/算数运算符的处理/
break;
case '=':equal();break;/计算运算结果/
case 'C':clear();break;/清零/
}
reDisplay(); /在文本域中显示信息/
}
}
这是我做的一个计算器:运行截图
我收回以下的话,因为我看到了“键盘上的灵魂”等人的回答。之所以说这些是因为以前有次在知道里回答问题结果提问者选了一个最错的答案,让我很气愤。。
''''我本来不想回答,因为在知道上回答问题太亏了,我重视的不是积分,
''''而是中选率。回答这样的问题很多人都是看了答案以后一知半解,
''''随便选一个就通过了。根本不管我的答案是真正正确的。
一、t1~t5 没有经过声明,在vb中默认是可以使用的,只要你的代码最上面没有“option explicit”声明。而关于数据类型,几位都没有说出来,其实这却是根本所在:没有声明的变量类型是Variant类型。
但是不声明在编程语言里是不规范的。
这个类型叫做“变体”,就相当于是其他语言里面的object类型。他可以接受任何类型的赋值。如:
dim a as integer,b as string,v as variant 'v可以不声明
v=a
v=b
都可以。
而t1 = (s1 + s2 + s3 + s4 + s5 >= 450)
其实是
t1的值此时是什么呢?
我们知道 if a>0 then 这句中,a>0所产生的结果是 true或false,也就是Boolean类型。所以当 >、>=、<、<=、=(作为比较是否相等的时候) 作为值赋给变量的时候,它是作为Boolean类型的。
而t1是variant类型,可以兼容Boolean型,因此直接作为Boolean型来用。
如果用整形来存储boolean型,vb自动将true转换为-1,而false转换为0。
说的多了点,但是了解这些才能更好的学习编程。
再多说一句:true之所以转换为-1,是为了做or或and运算,vb的本意是用这两个运算符做位运算,但是实际人们都用来做逻辑运算,-1转换为16进制是FFFF FFFF,而0转换是0000 0000,正好满足or和and的位 *** 作和逻辑 *** 作的一致性。
二、我不知道你的程序是哪里里来的,我要告诉你一点,你的程序是错的!
有没有人注意到,dim s1 as string 这句话。后来有一句:t1=(s1+s2++s5>=450)我知道你的本意是要判断总成绩大于450分,但是你前面定义的是string类型的数据,string类型的+运算符是连接符,因此如果s1~s5分别为1分到5分,那么s1+s2++s5就等于“12345”,12345当然会大于450,但是总分才15分,显然逻辑上是错误的。
数据类型真的很重要的。
应该改为 dim s1 as single,s2 as single
解释你的问题:
if t1 or t2 or t3 then p="" else p=""
这句话,显然是将 t1,t2,t3 三个变量作为Boolean类型进行判断。
t1,t2,t3三个值只要有一个是 True 就满足条件。or 运算符就是只要有一个为true结果就是true
p=这句话就是一个字符串连接 *** 作。
str()函数是将数字转换为字符串,没什么难的,“&”是字符串的标准连接符,与“+”的区别是
3+4=7 ,而 "3"+"4"="34","3"+4="34" 更正见下
3&4="34","3"&"4"="34","3"&4="34"
你自己体会一下就明白了。
Chr(13)是一个回车,就是换一行显示。可以写成VbNewLine。
p= & p 的意思是在p的前面添加其他字符串
两个语句的自然语言意义是:
如果 t1 ,t2 ,t3 之中有一个条件满足,则令 p 等于“可以获奖”否则 p 等于“不能获奖”
然后在 p 的前面添加得分列表和一个换行符。
p最终变成了“
32,4,32,53,89
不能获奖
”
看不懂没关系,以后慢慢会懂的。不过你应该能知道谁回答的正确。
楼下的谢谢,我知道是有区别的,在内存中的存储和基本用法是一样的。所以一直当作一样的来说。实质上vb6-没有继承,所以在逻辑上的关系是不一样的。vbnet就把基本的variant改成了object了。
-----------------------------------------------------------------------
再更正一下:上面标记的地方我说错了一点,就是 "3"+4 应该等于 7 !当时没有确认一下,对不起,在此谢罪,各位中秋快乐
已经是第二次了,最初,我输入了很多文字,结果多按了一下ESC,就全都没有了。。。刚才点了个优化大师上的链接,d出个网页,把这个页面给覆盖了。输入的东西又没了。。
再写一次。。
我自己试过的:输入“1,2,3,4,5”这五个成绩,得出的结果是可以得奖,所以是错误的。
vb里面的加号对变体对象是一个相当头疼的运算符。
它遵循下面几个规则:
1如果两边都是字符串,他就做连接 *** 作,"3"+"4"="34"
2如果两边都是数值,就做算数 *** 作,3+4=7
3如果一边是数值一边是字符串,则:
如果字符串可以转为数值,则取算数 *** 作。"3"+4=7
否则提示出错:3+"k"错误:类型不匹配,要进行连接请使用 & 运算符。
而"&"运算符则遵循:
1运算符两边任何值都转换为字符串。
2当数字转换为字符串的时候是默认调用format(i)进行转换的。
而且当数字赋值给字符串变量时,自动转换为字符串,所取转换函数为format(i)。可见你的代码:
dim s1 as string
s1=val(input) '假设这里输入一个"3"
s1的结果就是 s1=format(val("3")) ,经过两次转换之后,s1的值为"3",是字符串类型。
由上面加号的规则,就是连接 *** 作。
由此可见,数值类型的选择更为重要:
1只要确定你的变量取值,一定要用确切的类型。
2定义时要注意,dim i,j,k as integer,的结果不是你想象的那样,三个类型都是integer型,而是只有k是integer型,而i和j是variant型。正确的应该是dim i as integer,j as integer,k as integer。
3variant可以用来代表字符串,数字,数组,对象……任何类型,但是处理起来最麻烦,尽量不要使用,不过也很难避免,比如split函数和把数组作为参数传递的时候,用variant很方便。
4基本数值类型转换要用标准转换函数好一些:cstr,cint,cdbl,cbool,clng,cbyte……因为这些函数的数据类型比较确定。
多说两句,比较format(3)和str(3)和cstr(3)三个转换为字符串的函数:
format(3)和CStr(3)得到的结果都是"3"
str(3)得到的结果是" 3",数字前面有空格,并不是永远会有空格,只是因为前面省略了正号"+",如果是负数就没有空格了,就是"-3"
format(3,"00")的结果是"30",这就是用format的优势。
日期也可以用format来格式化
format(now,"yyyy年代MM月分dd太阳,HH点了mm分钟ss秒针")就可以以固定的格式输出。
获取的url地址写错了。程序我跑出来了,一张一张查看6张的小程序。
请注意看以下的两个地址不同处。的扩展名错了。 有jif的??路径,当然要正确。你说的位置是对的。
url = UserCardLayoutFrameclassgetResource("/image/"+i+"jif");//源程序错误的
url = UserCardLayoutFrameclassgetResource("/image/"+i+"gif");//修改成这个
默认地,不允许其他线程直接存取(调用)Winform中的控件。
要从其他线程中存取Winform控件,可采用以下两种方法之一:
方法1)不进行线程安全的检查
或者
方法2)通过委托的方式
代码如下所示
public partial class Form1 : Form{
public Form1()
{
InitializeComponent();
//方法1:不进行跨线程安全检查
//SystemWindowsFormsControlCheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
Thread th1 = new Thread(new ThreadStart(CalNum));
th1Start();
}
private void CalNum()
{
//button1Enabled = false;
int result = 0;
for (int i = 1; i < 100000000; i++)
{
result += i;
}
SetCalResult(result);
//button1Enabled = true;
}
//方法2:检查是否跨线程,然后将方法加入委托,调用委托
public delegate void SetTextHandler(int result);
private void SetCalResult(int result)
{
if (label2InvokeRequired == true)
{
SetTextHandler set = new SetTextHandler(SetCalResult);//委托的方法参数应和SetCalResult一致
label2Invoke(set, new object[] { result }); //此方法第二参数用于传入方法,代替形参result
}
else
{
label2Text = resultToString();
}
}
}
二、使用步骤
1uniapp开发map说明
使用uniapp是因为它是一个使用vuejs开发所有前端应用的框架,开发者编写一套代码,可以发布到ios,android,web以及各种小程序,快应用等多个平台。 使用map地图组件开发,地图组件用于展示地图(使用的时腾讯地图),说一下它的属性有:
longitude(类型为Number,没有默认值,表示中心经度)
latitude(类型为Number,没有默认值,表示中心纬度)
scale(类型为Number,默认值为16,缩放级别取值范围为5-18)
markers(类型为Array数组,类型为数组即表示地图上可以有多个,没有默认值,表示标记点)
polyline(类型为Array数组,没有默认值,表示路线,数组上的所有点连成线)
circles(类型Array数组,表示圆)
controls(类型Array数组,表示控件)
include-points(类型Array数组,表示缩放视野已包含所有给定的坐标点)
enable-3D(类型为Boolean,默认值为false,表示是否显示3D搂块)
show-compass(类型为Boolean,默认值为false,表示为是否显示指南针)
enable-overlooking(类型为Boolean,默认值为false,表示为是否开启俯视)
enable-satellite(类型为Boolean,默认值为false,表示为是否开启卫星图)
enable-traffic(类型为Boolean,默认值为false,表示为是否开启实时路况)
show-location(类型为Boolean,表示显示带有方向的当前定位点)
polygons(类型Array,表示为多边形)
点击属性
@markertap-表示点击标记点时触发,edetail={markerId}
@labeltap-表示点击label时触发,edetail = {markerId}
@callouttap-表示点击标记点对应的气泡时触发,edetail = {markerId}
@controltap-表示点击控件时触发,edetail = {controlId}
@regionchange-表示视野发生变化时触发
@tap-表示点击地图时触发; App-nuve、微信小程序29支持返回经纬度
@updated-表示在地图渲染更新完成时触发
我们在写map组件时,组件的宽/高推荐写直接量,比如说是 750rpx,不要设置百分比值,在uni-app中只支持gcj02坐标。 介绍markers属性-类型为数组Array
由之前描述可知,markers属性类型为Array,表示标记点用于在地图上显示标记的位置。这个数组属性,它里面有它的对象配置属性,分别是:
id,表示标记点id,类型为Number,必填项,marker点击事件回调会返回此id,建议为每个marker设置上Number类型id,保证更新marker时有更好的性能。
latitude,纬度,类型Number,必填项,浮点数,范围 -90 ~ 90
longitude,经度,类型Number,必填项,浮点数,范围 -180 ~ 180
title,标注点名,类型String,不是必填,点击时显示,callout存在时将被忽略
iconPath,显示的图标,类型String,必填项,项目目录下的路径
rotate,旋转角度,类型Number,不是必填,顺时针旋转的角度,范围 0 ~ 360,默认为 0
alpha,标注的透明度,类型Number,不是必填,默认1,无透明,范围 0 ~ 1
width,标注图标宽度,类型Number,不是必填,默认为实际宽度
height,标注图标高度,类型Number,不是必填,默认为实际高度
callout,自定义标记点上方的气泡窗口,类型Object,不是必填 - 可识别换行符
label,为标记点旁边增加标签,类型Object,不是必填 - 可识别换行符
anchor,经纬度在标注图标的锚点,默认底边中点,不是必填,{x, y},x表示横向(0-1),y表示竖向(0-1)。{x: 5, y: 1} 表示底边中点
marker 上的气泡 callout(Object类型) marker数组 上属性 callout 对象使用属性:
content,文本,String
color,文本颜色,String
fontSize,文字大小,Number
borderRadius,callout边框圆角,Number
bgColor,背景色,String
padding,文本边缘留白,Number
display,'BYCLICK':点击显示; 'ALWAYS':常显,String
textAlign,文本对齐方式。有效值: left, right, center,String
marker 上的标签 label(Object类型)
content,文本,String
color,文本颜色,String
fontSize,文字大小,Number
x,label的坐标,原点是 marker 对应的经纬度,Number
y,label的坐标,原点是 marker 对应的经纬度,Number
borderWidth,边框宽度,Number
borderColor,边框颜色,String
borderRadius,边框圆角,Number
bgColor,背景色,String
padding,文本边缘留白,Number
textAlign,文本对齐方式。有效值: left, right, center,String
polyline polyline表示指定一系列坐标点,从数组第一项连线至最后一项
points,经纬度数组,类型为Array,必填,如:[{latitude: 0, longitude: 0}]
color,线的颜色,类型为String,不必填,如:#0000AA
width,线的宽度,类型为Number,不必填
dottedLine,是否虚线,类型为Boolean,不必填,默认值false
arrowLine,带箭头的线,类型为Boolean,不必填,默认值为false
arrowIconPath,更换箭头图标,类型为String,不必填,在arrowLine为true时,默认带箭头的线时生效
borderColor,线的边框颜色,类型为String,不必填
borderWidth,线的厚度,类型为Number,不必填
polygon polygon指定一系列坐标点,根据points坐标数据生成闭合多边形
points,经纬度数组,array,必填,如:[{latitude: 0, longitude: 0}]
strokeWidth,描边的宽度,Number,否
strokeColor 描边的颜色,String,否
fillColor,填充颜色,String,否
zIndex,设置多边形 Z 轴数值,Number,否
circles circles在地图上显示圆
latitude,纬度,Number,必填,浮点数,范围 -90 ~ 90
longitude,经度,Number,必填,浮点数,范围-180 ~ 180
color,描边的颜色,String,不必填,如:#0000AA
fillColor,填充颜色,String,不必填,如:#0000AA
radius,半径,Number,必填
strokeWidth,描边的宽度,Number,不必填
controls controls在地图上显示控件,控件不随着地图移动
id,控件id,Number,不必填,在控件点击事件回调会返回此id
position,控件在地图的位置,Object,必填,控件相对地图位置
iconPath,显示的图标,String,必填,项目目录下的路径,支持相对路径写法,以'/'开头则表示相对项目根目录;也支持临时路径
clickable,是否可点击,Boolean,不必填,默认不可点击
position
left,距离地图的左边界多远,Number,不必填,默认为0
top,距离地图的上边界多远,Number,不必填,默认为0
width,控件宽度,Number,不必填,默认为宽度
height,控件高度,Number,不必填,默认为高度
注意在uniapp中地图组件的经纬度必填,如果不填,经纬度则默认值是北京的经纬度。 2uniapp使用map组件 基本使用方法 使用uniapp开发中的map组件,基本使用方法:
代码如下(示例):
<map :scale="scale" style="width: 100%; height: 100%;"
enable-3D="false" show-compass="false" enable-overlooking="false"
:enable-satellite="false" :enable-traffic="false" show-location="false"
:latitude="latitude" :longitude="longitude" :markers="covers">
</map>
markers属性的使用,代码如下(示例):
markers: [{
id: 1, // Number
title: '1', // String-标注点名
rotate: 180, // Number - 顺时针旋转的角度,范围 0 ~ 360,默认为 0
alpha: 05, // 默认1,无透明,范围 0 ~ 1
latitude: 39899,
longitude: 11639742,
width: 30,
height: 30,
// callout: {
// display: "BYCLICK",
// padding: 10,
// borderRadius: 5,
// content: '',
// },
// anchor: {},
iconPath: '///static/locationpng', // 显示的图标
}, {
id: 2,
title: '2', // String
latitude: 3990,
longitude: 11639,
callout: {
color: '#007AFF', // 文本颜色
bgColor: '#563BFF', // 背景色
display: "ALWAYS", // 'BYCLICK':点击显示; 'ALWAYS':常显
fontSize: 15,
textAlign: 'left', // 文本对齐方式。有效值: left, right, center
padding: 10, // 文本边缘留白
borderRadius: 5,
content: '腾讯地图',
},
label: {
content: 'Jeskson',
color: '#000000',
fontSize: 12,
borderWidth: 12,
borderColor: '#007AFF',
borderRadius: 5,
padding: 5,
textAlign: 'center',
bgColor: '#563BFF',
},
iconPath: '///static/locationpng'
}]
为了让你更好的理解,我编个小程序吧,其实goto语句和switch是有点相似的。
#include"stdioh"
main()
{int a;
scanf("%d",&a);
if(a>0) goto exit;
else goto exim;
exit:printf("这是一个正整数\n");
exim:printf("这是一个不大于零的整数\n");
}
其实我估计你是把exit和exit()搞混乱了,前者是标志,后者是函数。
希望回答对楼主有帮助,呵呵。
以上就是关于求一个简单的JAVA小程序,要有图形界面。全部的内容,包括:求一个简单的JAVA小程序,要有图形界面。、还是一段vb小程序请求解释,望行家指点.、JAVA运行时出现 Exception in thread "main" java.lang.NullPointerException等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)