2024/9/28日 动手动脑
本次动手动脑包含多个题,我将逐一进行重写。
第一个,Enum测试:
点击查看代码
//20234023 张一衡
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用同一个对象?
System.out.println(s==t); //false
//是原始数据类型吗?
System.out.println(s.getClass().isPrimitive());//false
//从字符串中转换
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//列出它的所有值
for(Size value:Size.values()){
System.out.println(value);
}
}
}
enum Size{SMALL,MEDIUM,LARGE};
//分析:
//使用 == 比较枚举常量时,比较的是它们的引用,因此 s 和 t 是不同的引用,返回 false。
//在JAVA中,枚举类型是对象类型,因此可以用 getClass() 方法检查其类型,但它不是原始数据类型,返回 false。
//通过 valueOf 方法可以将字符串转换为对应的枚举常量,且多个变量可以引用同一个枚举实例。
//可以使用 values() 方法获得所有枚举常量,并进行遍历。
点击查看代码
//20234023 张一衡
import javax.swing.*;
import java.math.BigDecimal;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String []num1={"0.05","1.0","4.015","123.3"};
String []num2={"0.01","0.42","100","100"};
BigDecimal[]bd1=new BigDecimal[4];
BigDecimal[]bd2=new BigDecimal[4];
for(int i=0;i<num1.length;i++){
bd1[i]=new BigDecimal(num1[i]);
bd2[i]=new BigDecimal(num2[i]);
}
//在这里选择使用BigDecimal类来处理精度损失问题
System.out.println("BigDecimal---->String:");
System.out.println("0.05 + 0.01 = "+bd1[0].add(bd2[0]));
System.out.println("1.0 - 0.42 = "+bd1[1].subtract(bd2[1]));
System.out.println("4.015 * 100 = "+bd1[2].multiply(bd2[2]));
System.out.println("123.3 / 100 = "+bd1[3].divide(bd2[3]));
System.out.println("Double:");
System.out.println("0.05 + 0.01 = "+(0.05+0.01));
System.out.println("1.0 - 0.42 = "+(1.0-0.42));
System.out.println("4.015 * 100 = "+(4.015*100));
System.out.println("123.3 / 100 = "+(123.3/100));
}
}
//double和float在内存中是以二进制形式存储的,它们遵循IEEE 754标准。由于某些十进制数(例如0.1、0.2等)在二进制中无法精确表示,这会造成误差。
//当使用double进行各种浮点运算时(尤其是多次加减乘除),微小的误差可能会累积,导致最终结果显著偏离理论值。
//BigDecimal类提供了一个高精度的数值表示方式,能够精确表示任意大小的数字,包括小数,避免了双精度浮点数的不精确问题。
//当用字符串构造BigDecimal对象时,如new BigDecimal("0.1"),该字符串表示的是一个确切的值,因此可以避免因浮点表示引起的误差。
点击查看代码
//20234023 张一衡
import javax.swing.*;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String input_1 = JOptionPane.showInputDialog(null, "请输入第一个数:",
"输入", JOptionPane.PLAIN_MESSAGE);
String input_2 = JOptionPane.showInputDialog(null, "请输入第二个数:",
"输入", JOptionPane.PLAIN_MESSAGE);
int output = Integer.parseInt(input_1) + Integer.parseInt(input_2);
JOptionPane.showMessageDialog(null, "The sum is ->" + output,
"输入", JOptionPane.PLAIN_MESSAGE);
}
}
点击查看代码
//20234023 张一衡
//以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y=+X+Y);
System.out.println(X+Y+=X+Y")
为什么会有这样的输出结
果?
import java.util.Random;import java.util.Scanner,
public class Main {
public static void main(Stringlargs){
int X=100;
int Y=200:
System.out.println("X+Y="+X+Y);
//这段代码在处理时会先处理字符串的链接,
//"X+Y="+X将"X+Y="和 X的值(100)连接成一个字符串结果为"X+Y=100"
//然后,这个字符串再与丫的值(200)连接,结果为"X+Y=100200"
//这里的操作顺序是字符串连接优先于算术运算。
System.out.println(X+Y+"=X+Y");
//在这一行,X+Y首先被计算,结果为 100+200=300.
//然后,将 300 和字符串=X+Y"连接,得到结果"300=X+Y"。
}
}
以及第五个,四则运算题
点击查看代码
//20234023 张一衡
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
Scanner sc = new Scanner(System.in);
String []symbol={"+","-","*","/"};
int count=0;
while(count<=30) {
int num1=rand.nextInt(100);
int num2=rand.nextInt(100);
int temp=rand.nextInt(4);
int num3=0;
if(symbol[temp].equals("+")){
num3=num1+num2;
}else if(symbol[temp].equals("-")){
num3=num1-num2;
}else if(symbol[temp].equals("*")){
num3=num1*num2;
}else if(symbol[temp].equals("/")){
num3=num1/num2;
}
System.out.print(num1+" "+symbol[temp]+" "+num2+" = "+num3);
System.out.println();
count++;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署