首先是枚舉,使用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(" ");
}
}
}