java课程学习心得

首先是枚举,使用enum关键字创建,如:enum {SMALL,MEDIUM,LARGE}之后便可定义Size 的类型变量,并复制为{SMALL,MEDIUM,LARGE};其中一个,注意赋值方法,x=Size.SMALL;利用枚举类型可以进行比较,默认的由小到大是从左到右,即SMALL<MEDIUM<LARGE,也可以进行==比较;enum有两个内置方法,values()和valueof();value()可返回一个包含枚举常数列表的数组,可以直接调用如:Size value:Size.values(),这样可为value逐个赋值SMALL,MEDIUM,LARGE

,使用数组也可以,Size all[]=Size.values();这样all就是一个成员为SMALL,MEDIUM,LARGE的数组;最后是valueof();他的作用是从字符串读取值,如Size u=Size.valueOf("SMALL");这样u便赋值为SMALL;注意若字符串内容与枚举类型成员不符,那么程序会报错。

接下来是原码、反码、补码的问题,计算机用二进制储存数据,其最高位数会用于表示正负,如八位进制的二进制中,1表示为00000001,-1为10000001,最高位为0说明是正数,是1则为负数;反码,正数的反码就是它本身,负数的话符号位不不变,后面全部取其反;补码,正数补码是本身,负数补码是在原基础上+1;原因的话,首先是为了提升计算机的性能,在计算中只使用加法(要用减法的话只需加上减数的负数),而用原码进行减法的话结果会因符号位的存在而得不到正确结果,因此发明了反码,反码可以得到减法的正确结果;补码又是因为什么呢?这是因为在计算结果的0的时候,用反码计算会出现11111111(-0),在我们眼中+0(000000000)与-0都是一样的,但计算机不能识别,如果用补码的话,+0与-0都是00000000,这样就只有一个编码来代表0,另外,这样11111111也可以用来代表-128了;最后关于程序中浮点数不精确的问题,这也是因为二进制,比如0.5的二进制表示为0000.1000,二进制只能表示2的n次,小数位只能用1/2、1/4、1/8......来进行表示,但如0.03这样的数只能做到无限接近但无法精确表示,最后进行约等于,这就是精确长度的问题了,精确长度越长,越能接近数值,精确长度越短,越会出现误差。

关于System.out.println()输出问题,

这个涉及+的运算顺序了,+当两端任意一端存在字符串时,会把两端按照字符串输出,1式若想要计算X+Y结果,就要用()括起来。

java课上老师布置的任务是制作一个计算题随机生成程序,两位正整数数以内的四则运算,要求乘法结果不能大于两位数,除法要能整除,另外题目之间不能重复,可以由用户输入来选择输出多少道题,一行输出多少道题。下面我来说一下我解决的思路,希望对遇上相似问题的人有所帮助。

首先,既然要随机的生成运算式,就必定要用随机数了,使用Random函数就能解决这个问题,但运算符也是要随机生成的,这就是一个小问题吧,这里也是用随机数的方法,随机取0~3之间的一个数,使用switch来根据不同的取到的数来对应取到不同的运算符,这就达到了随机运算符的目的,然后就是题目要求了,取好随机数之后用if判定一下,不符合就重新取,这样就可以了。

这道题最有难度的地方大概是不能重复原则吧,这里我是用了一个三维数组int ch[3][100][100]的方法一维存放运算符,一维存放第一个数,一维存放第二个数,但这个存放我需要说明一下存放方式,比如2+3=存放方式,我的‘+’对应的是1,那么我在ch[1][2][3]存放数据1,这样,在生成算式后,先判断他所对应的数组位置是否为1,是的话说明重复了,那么就重新生成式子。

代码如下

package pp;
import java.util.Random;
import java.util.Scanner;
public class tt {

public static void main(String args[]) {
Random ra =new Random();int a,b,c,d=0,l=0;
int [][][] ch=new int [4][100][100];

int limt,line;
Scanner input=new Scanner(System.in);
limt= input.nextInt();
line=input.nextInt();
for(int i=1;i<(limt+1);i++ ) {

a=(ra.nextInt(99)+1);
b=(ra.nextInt(99)+1);
c=(ra.nextInt(4));
if(c==0)
{
while(a<b||ch[c][a][b]==1) {
a=(ra.nextInt(99)+1);
b=(ra.nextInt(99)+1);
}
} if(c==1)
{
while(ch[c][a][b]==1) {
a=(ra.nextInt(99)+1);
b=(ra.nextInt(99)+1);
}
}
if(c==2)
{
while(a*b>=100||ch[c][a][b]==1)
{
a=(ra.nextInt(99)+1);
b=(ra.nextInt(99)+1);
}


}
if(c==3)
{
while(a%b!=0||ch[c][a][b]==1) {
a=(ra.nextInt(99)+1);
b=(ra.nextInt(99)+1);

}
}
ch[c][a][b]=1;
switch(c)
{
case 0:System.out.print(i+". "+a+"-"+b+"= ");break;
case 1:System.out.print(i+". "+a+"+"+b+"= ");break;
case 2:System.out.print(i+". "+a+"*"+b+"= ");break;
case 3:System.out.print(i+". "+a+"/"+b+"= ");break;}
l++;
if(l%line==0)System.out.println(" ");
}

}

}

原文地址:https://www.cnblogs.com/liuleliu/p/11552832.html