day2-变量;类型转换;x++和--x

本文详细介绍了Java中的数据类型,包括基本数据类型与引用数据类型,并深入探讨了数据类型转换、常见算术运算符及赋值运算符的使用规则。通过具体的代码示例解析了各种运算符的应用场景。
1.什么是变量?变量的定义格式?要使用变量需要注意什么?
就是可变的量
数据类型 变量名 = 数值;
同一范围内不能重复定义
不赋值不能使用


2.Java中的数据类型分几类?基本数据类型有哪些?
两大类
基本数据类型
byte(1) short(2) int(4) long(8) float(4) double(6) char(2) boolean(1)
引用数据类型
类 接口 数组 枚举


3.数据类型转换:
隐式转换:由低级专向高级
强制转换:由高级专向低级




面试题:
第一题:
byte b1=3,b2=4,b;
b=b1+b2;//错误 因为他们最终是要转向int类型 而int类型的值不能赋值给byte
b=3+4;//正确 因为他们都是常量 具有常量类型优化机制 可以直接识别为byte
哪句是编译失败的呢?为什么呢?


第二题:
byte  by = 130;有没有问题?有问题如何解决?结果是多少呢?
有问题 因为这个数超出了byte的取值范围 要用byte类型进行强制转换 结果是-126


第三题:
byte b = 10;
b++;
b = b + 1;//失败 因为在和一个int类型的常量进行相加的时候b自动转换成int类型 而一个int类型的数据是没办法直接赋值给byte类型的变量的
哪句是编译失败的呢?为什么呢?
4.常见的算术运算符有哪些?
答:+ - * / %
(1)+运算符的作用有哪些?
可以作为数学运算符 也可用作字符串拼接符
(2)除法和取余的区别?
除法是数学运算机型相初操作 取余数运算符是对除法操作之后取其余数进行操作的
(3)++和--的使用规则?
分别为自增 自减 在放在 变量前面就是先进行运算放在后面就是后进行运算


5.常见的赋值运算符有哪些?
答:= += -= *= /= %=
(1)+=运算的作用是什么?
a += b;== a = a + b;
(2)扩展的赋值运算符有什么特点?
会进行自动强制数据类型转换
6. short s = 1; s = s + 1;有没有问题?如果有怎么解决?
有问题 因为short类型的专用字节数比int小 但是1是int类型 在表达式进行运算的时候就吧其值提升为int类型了 而int类型不能直接赋值给short类型的变量可以同过强制数据类型转换来解决
   short s = 1; s += 1;有没有问题?如果有怎么解决?
没有问题 因为使用的是扩展赋值运算符 这样的话就会实现自动强制数据类型转换
7.分析以下需求,并用代码实现:
(1)已知一个三位数,请分别获取该三位数上每一位的数值
代码1:
public static void main(String[] args) {
@SuppressWarnings("resource")
char chs[] = String.valueOf(new Scanner(System.in).nextInt()).toCharArray();// nextInt()表示接收输入流为数字 toCharArray() 将字符串对象中的字符转换为一个字符数组

System.out.println("个位是:"+chs[2]+"\n十位是:"+chs[1]+"\n百位是:"+chs[0]);
}
代码2:
System.out.println("个位是:" + (354 % 10) + "\n十位是:" + (354 / 10 % 10) + "\n百位是:" +(354 / 100));

(2)例如:123的个位、十位、百位,分别是3、2、1
(3)打印格式"数字123的个位是 3, 十位是 2, 百位是 1"


8.看程序说结果,请不要提前运行?
public class Test1 {
public static void main(String[] args) {
int x = 4;
int y = (--x)+(x--)+(x*10);
System.out.println("x = " + x + ",y = " + y);
}
}


x = 2

y = 26

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1.1 知识点总结

l 数据类型转换

数据类型范围从小到大排序(byte < char < short < int < long < float < double),布尔类型Boolean不能参与类型转换;

l 自动类型转换,范围小的数据类型向范围大的数据类型转换时使用;

l 强制类型转换,范围大的数据类型向范围小的数据类型转换时使用。

 

l 算数运算符

l 用来完成算数运算(如加减乘除计算等)

l ++,--运算符的使用

l ++,--前置(如++a),当参与运算时,变量a的值先自增1,然后用自增后的新值再参与运算;

l ++,--后置(如a++),当参与运算时,变量a先使用原有值参与运算符,变量a的值再自增1。

 

l 赋值运算符

用来完成数据的赋值(如 int a = 100;)

l +=,-,*=,/=这样的赋值运算符包含了一个强制转换的操作,会将左右两边运算后的结果,强制类型转换后赋值给左边

int n = 10;

byte by = 20;

by += n; // 运算完毕后,by的值为byte类型30, 相当于代码 by = (byte)(by + n);

 

l 比较运算符

用来比较数据的大小(如 3>4),比较运算符也称为条件运算符。

比较后的结果为布尔类型Boolean的值

l “==”两个等号代表比较是否相等,“=”一个等号代表赋值。

 

l 逻辑运算符

逻辑与& 和逻辑短路与&&:代表着并且的意思,左右两边都要条件成立,结果才为true;

逻辑或| 和逻辑短路或||:代表着或者的意思,左边两边有一个条件成立,结果就为true;

逻辑非!:代表着相反的意思,原先是false,结果就为true;原先是ture,结果就为false;

逻辑异或^: 左右两边条件结果相同,结果就为false,左右两边条件结果不同,结果就为true;

 

l 三元运算符

根据判断条件运算结果,执行不同的表达式值;条件为true,执行表达式1,否则,执行表达式2。

 


//+------------------------------------------------------------------+ //| MultiTimeZone.mq4 | //| Copyright 2023, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023" #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window //--- 用户输入参数 input string TimeZoneNames = "Server,Local,New York,London,Tokyo,Sydney"; // 时区名称(逗号分隔) input string TimeOffsets = "0,0,-5,0,9,10"; // 时区偏移(小时) input bool AutoPosition = true; // 自动调整位置 input int X_Distance = 20; // X轴距离(像素) input int Y_Distance = 20; // Y轴距离(像素) input color TextColor = clrGold; // 文本颜色 input int FontSize = 10; // 字体大小 input string FontFace = "Arial"; // 字体类型 input bool DST_Adjust = true; // 夏令时调整 //--- 全局变量 string labels[]; int totalZones; //+------------------------------------------------------------------+ //| 自定义指标初始化函数 | //+------------------------------------------------------------------+ int OnInit() { // 分割时区配置 string zoneNames[]; string offsetValues[]; totalZones = StringSplit(TimeZoneNames, ',', zoneNames); StringSplit(TimeOffsets, ',', offsetValues); if(totalZones != ArraySize(offsetValues)) { Alert("错误:时区名称偏移量数量不匹配"); return(INIT_FAILED); } // 创建文本标签 ArrayResize(labels, totalZones); for(int i = 0; i < totalZones; i++) { string labelName = "TZLabel_" + IntegerToString(i); labels[i] = labelName; if(ObjectFind(0, labelName) < 0) { ObjectCreate(0, labelName, OBJ_LABEL, 0, 0, 0); } ObjectSetInteger(0, labelName, OBJPROP_CORNER, CORNER_LEFT_UPPER); ObjectSetInteger(0, labelName, OBJPROP_COLOR, TextColor); ObjectSetInteger(0, labelName, OBJPROP_FONTSIZE, FontSize); ObjectSetString(0, labelName, OBJPROP_FONT, FontFace); ObjectSetInteger(0, labelName, OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER); ObjectSetInteger(0, labelName, OBJPROP_SELECTABLE, false); ObjectSetInteger(0, labelName, OBJPROP_HIDDEN, true); // 设置位置 if(AutoPosition) { ObjectSetInteger(0, labelName, OBJPROP_XDISTANCE, X_Distance); ObjectSetInteger(0, labelName, OBJPROP_YDISTANCE, Y_Distance + i * (FontSize + 5)); } else { ObjectSetInteger(0, labelName, OBJPROP_XDISTANCE, X_Distance); ObjectSetInteger(0, labelName, OBJPROP_YDISTANCE, Y_Distance); } } // 设置定时器每秒更新 EventSetTimer(1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 定时器事件 | //+------------------------------------------------------------------+ void OnTimer() { UpdateTimeDisplay(); } //+------------------------------------------------------------------+ //| 更新时间显示 | //+------------------------------------------------------------------+ void UpdateTimeDisplay() { datetime baseTime = TimeCurrent(); // 经纪商服务器时间 datetime localTime = TimeLocal(); // 本地计算机时间 string zoneNames[]; string offsetValues[]; StringSplit(TimeZoneNames, ',', zoneNames); StringSplit(TimeOffsets, ',', offsetValues); for(int i = 0; i < totalZones; i++) { int offset = (int)StringToInteger(offsetValues[i]); datetime displayTime; // 特殊处理服务器本地时间 if(zoneNames[i] == "Server") { displayTime = baseTime; } else if(zoneNames[i] == "Local") { displayTime = localTime; } else { // 夏令时调整 int dstOffset = 0; if(DST_Adjust && IsSummerTime(offset)) { dstOffset = 3600; // 增加1小时 } displayTime = baseTime + (offset * 3600) + dstOffset; } // 更新时间显示 string timeStr = TimeToString(displayTime, TIME_MINUTES|TIME_SECONDS); string dayStr = TimeDayOfWeek(displayTime) == 1 ? "Mon" : TimeDayOfWeek(displayTime) == 2 ? "Tue" : TimeDayOfWeek(displayTime) == 3 ? "Wed" : TimeDayOfWeek(displayTime) == 4 ? "Thu" : TimeDayOfWeek(displayTime) == 5 ? "Fri" : TimeDayOfWeek(displayTime) == 6 ? "Sat" : "Sun"; ObjectSetString(0, labels[i], OBJPROP_TEXT, zoneNames[i] + ": " + dayStr + " " + timeStr); } } //+------------------------------------------------------------------+ //| 夏令时检查函数 | //+------------------------------------------------------------------+ bool IsSummerTime(int offset) { MqlDateTime current; TimeCurrent(current); // 北半球夏令时(3月最后一个周日 - 10月最后一个周日) if(offset < 0) // 西半球时区 { if(current.mon > 3 && current.mon < 11) return true; if(current.mon == 3 && current.day - current.day_of_week >= 25) return true; if(current.mon == 11 && current.day - current.day_of_week < 25) return true; } // 南半球夏令时(10月首个周日 - 3月首个周日) else if(offset > 0) // 东半球时区 { if(current.mon > 10 || current.mon < 3) return true; if(current.mon == 10 && current.day - current.day_of_week >= 1) return true; if(current.mon == 3 && current.day - current.day_of_week < 7) return true; } return false; } //+------------------------------------------------------------------+ //| 指标卸载函数 | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // 删除所有标签对象 for(int i = 0; i < totalZones; i++) { ObjectDelete(0, labels[i]); } // 移除定时器 EventKillTimer(); } 改一下完整的给我
最新发布
11-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值