动手动脑集合一
题目一:【枚举类型】
截图如下:
代码如下:(虽然不是我自己写的)
1 public class EnumTest { 2 public static void main(String[] args) { 3 Size s=Size.SMALL; 4 Size t=Size.LARGE; 5 //s和t引用同一个对象? 6 System.out.println(s==t); 7 //是原始数据类型吗? 8 System.out.println(s.getClass().isPrimitive()); 9 //从字符串中转换 10 Size u=Size.valueOf("SMALL"); 11 System.out.println(s==u);//true 12 //列出它的所有值 13 for(Size value:Size.values()) { 14 System.out.println(value); 15 } 16 } 17 } 18 19 enum Size{SMALL,MEDIUM,LARGE};
题目二:阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。
机器数:一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,,负数为1。
真值:为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
反码:反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.。
补码:补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。
详情可见链接:https://www.cnblogs.com/despatch/p/10832980.html
题目三:【两数相加】1.使用两个输入框输入数据 2.用一个消息框显示计算结果
真的挺神奇的,虽然里面的JOptionPane.showInputDialog和JOptionPane.showMessageDialog这些我不懂。
截图如下:
代码如下:(虽然不是我自己写的)
1 import javax.swing.JOptionPane; 2 3 public class Addition { 4 public static void main(String[] args) { 5 String firstNumber,//first string entered by user 6 secondNumber;//second string entered by user 7 int number1,//first number to add 8 number2,//second number to add 9 sum;//sum of number1 and number2 10 11 //read in first number from user as a string 12 firstNumber= 13 JOptionPane.showInputDialog("Enter first integer"); 14 15 //read in second number from user as a string 16 secondNumber= 17 JOptionPane.showInputDialog("Enter second integer"); 18 19 //convert numbers from type String to type int 20 number1=Integer.parseInt(firstNumber); 21 number2=Integer.parseInt(secondNumber); 22 23 //add the numbers 24 sum=number1+number2; 25 26 //display the results 27 JOptionPane.showMessageDialog( 28 null,"The sum is "+sum,"Results", 29 JOptionPane.PLAIN_MESSAGE); 30 31 System.exit(0);//terminate the program 32 } 33 }
题目四:Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。
同名变量的屏蔽原则:每个变量都有一个有效区域,即定义的那片区域,出了这个区域,变量将不再有效。(全局变量除外)
代码如下:
1 public class Test { 2 public static int t=10; 3 public static int i=9; 4 public static void main(String[] args) { 5 System.out.println("t="+t); 6 System.out.println("i="+i); 7 for(int u=0;u<1;u++) { 8 t=12; 9 i=17; 10 System.out.println("t="+t); 11 System.out.println("i="+i); 12 } 13 System.out.println("t="+t); 14 System.out.println("i="+i); 15 } 16 }
截图如下:
题目五:看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?
Java中每个数据类型所占的位数:
结论:java中的数据类型大概的与之前C中的差不多。
题目六:请运行以下代码TestDouble.java,你看到了什么样的输出,意外吗?
TestDouble.java:
1 public class TestDouble { 2 public static void main(String[] args) { 3 System.out.println("0.05+0.01="+(0.05+0.01)); 4 System.out.println("1.0-0.42="+(1.0-0.42)); 5 System.out.println("4.015*100="+(4.015*100)); 6 System.out.println("123.3/100="+(123.3/100)); 7 } 8 }
运行结果如下:
确实挺意外的,没想到会是这样的结果。
结论就是使用double类型的数值进行计算, 其结果是不精确的。
题目七:为什么double类型的数值进行运算得不到“数学上精确”的结果?
原因:double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
题目八:在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。(为什么会这样呢?)
TestBigDecimal.java
1 import java.math.BigDecimal; 2 public class TestBigDecimal 3 { 4 public static void main(String[] args) 5 { 6 BigDecimal f1 = new BigDecimal("0.05"); 7 BigDecimal f2 = BigDecimal.valueOf(0.01); 8 BigDecimal f3 = new BigDecimal(0.05); 9 System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:"); 10 System.out.println("0.05 + 0.01 = " + f1.add(f2)); 11 System.out.println("0.05 - 0.01 = " + f1.subtract(f2)); 12 System.out.println("0.05 * 0.01 = " + f1.multiply(f2)); 13 System.out.println("0.05 / 0.01 = " + f1.divide(f2)); 14 System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:"); 15 System.out.println("0.05 + 0.01 = " + f3.add(f2)); 16 System.out.println("0.05 - 0.01 = " + f3.subtract(f2)); 17 System.out.println("0.05 * 0.01 = " + f3.multiply(f2)); 18 System.out.println("0.05 / 0.01 = " + f3.divide(f2)); 19 } 20 }
运算结果截图:
因为double不能准确的代表BigDecimal(String) 16位有效数以上的数字,在使用BigDecimal时,用*、/构造器创建对象。BigDecimal所创建的对象不能使用传统的等算术运算符直接对其对象进行数学运算,必须调用相对应的方法。方法中的参数必须是BigDecimal的对象。
Java之BigDecimal详解可见参考链接https://www.cnblogs.com/zhangyinhua/p/11545305.html
题目九:以下代码的输出结果是什么?为什么会有这样的输出结果?
1 int X=100; 2 int Y=200; 3 System.out.println("X+Y="+X+Y); 4 System.out.println(X+Y+"=X+Y");
运行结果截图:
1.在System.out.println("X+Y="+X+Y);中“X+Y”中的“+”是直接连接两个字符
2.在System.out.println(X+Y+"=X+Y");中“X+Y”中的“+”是指的X与Y的求和运算