Java零基礎學習之路(十四)Java初學者練習題
技術標籤:Java學習資料Java學習視訊教程純乾貨javapython程式語言類jdk
一、Java基礎練習題
1、下載JDK,並安裝,然後配置環境變數path以及classpath,編寫HelloWorld程式輸出以下學生資訊:
2、學號,姓名,年齡,性別,家庭住址等。
3、建議初學者,針對如上練習多寫一遍。
下載JDK,並安裝,然後配置環境變數path以及classpath,編寫HelloWorld程式輸出以下學生資訊:學號,姓名,年齡,性別,家庭住址等。
public class HelloWorld { public static void main(String[] args) { System.out.println("學號 = 100000"); System.out.println("姓名 = 動力節點"); System.out.println("年齡 = 9"); System.out.println("性別 = 男"); System.out.println("住址 = 北京大興經濟技術開發區大族企業灣10號樓A座"); } }
二、Java識別符號與關鍵字練習題
● 熟記識別符號的命名規則和規範。
● 分析以下單詞哪些是合法的識別符號,哪些不合法:
1、myName,字,My_name,Points,$points,_sys_ta,OK,_23b,_3_
2、_3_(合法)
3、_23b(合法)
4、OK(合法)
5、_sys_ta(合法)
6、$points(合法)
7、Points(合法)
8、My_name(合法)
9、字(合法)
10、myName(合法
11、#name,25name,class,&time,if,Hello World
12、Hello World(不合法:識別符號不能含有空格)
13、if(不合法:關鍵字不能做識別符號)
14、&time(不合法:識別符號不能有&)
15、class(不合法:關鍵字不能做識別符號)
16、25name(不合法:識別符號不能以數字開始)
17、#name(不合法:識別符號不能有#)
三、 Java變數練習題
查閱相關資料,使用Java中的八種基本資料型別完成變數的宣告,給每一個變數賦值,並且重新賦值,並將所有變數輸出到控制檯。
public class Chapter02 { public static void main(String[] args) { byte b = 127; short s = 32767; int i = 2147483647; long l = 900L; float f = 3.4f; double d = 3.14; boolean b1 = true; char c = 'a'; System.out.println(b); System.out.println(s); System.out.println(i); System.out.println(l); System.out.println(f); System.out.println(d); System.out.println(b1); System.out.println(c); b = 1; s = 1; i = 1; l = 1L; f = 1.0f; d = 1.0; b1 = false; c = '中'; System.out.println(b); System.out.println(s); System.out.println(i); System.out.println(l); System.out.println(f); System.out.println(d); System.out.println(b1); System.out.println(c); } }
四、Java資料型別練習題
1、short s1 = 1; s1 = s1 + 1;有什麼錯?
s1是short型別,1是int型別,short和int混合運算的時候short會自動轉換為int型別,所以s1 + 1編譯器檢測出是int型別,int型別無法賦值給short型別的變數s1。這樣修改:s1 = (short)(s1 + 1);
2、 char型別變數能不能儲存一箇中文的漢字,為什麼?
java中的文字採用unicode編碼,一箇中文佔用2個位元組,char型別在java中就是佔用兩個位元組,所以java中的char型別完全可以容納一個漢字。
3、float f = 1.0有什麼錯?
1.0字面量被當做double型別處理,大容量double無法賦值給小容量float。這樣修改,兩種方案:第一種方案是1.0後面新增f/F。第二種方案是強制型別轉換:float f = (float)1.0;
4、long a = 2147483648有什麼錯?
不是long型別存不下2147483648,而是java把2147483648當做int型別來處理,但本身已經超出int類型範圍。這樣修改:long a = 2147483648L;
5、 int i = 0xffff有問題嗎?
沒有問題:0xffff以0x開始表示十六進位制表示方式,ffff轉換成十進位制是:65535
6、char c = 65536有問題嗎,為什麼?
65536已經超出char型別取值範圍,不能直接賦值,這樣修改:char c = (char)65536;
五、Java運算子練習題
練習以下程式並分析程式的執行結果。
第1題:
int x = 10;
int a = x+ x++;
System.out.println("a =" + a);
System.out.println("x =" + x);
int b = x + ++x;
System.out.println("b =" + b);
System.out.println("x =" + x);
int c = x + x--;
System.out.println("c =" + c);
System.out.println("x =" + x);
int d = x + --x;
System.out.println("d =" + d);
System.out.println("x =" + x);
執行結果如下圖所示:
第2題:
int a = 15;
int b = 2;
double c = 2;
System.out.println(a + "/" + b + "=" + (a / b));
System.out.println(a + "%" + b + "=" + (a % b));
System.out.println(a + "/" + c + "=" + (a / c));
System.out.println(a + "%" + c + "=" + (a % c));
執行結果如下圖所示:
第3題:
boolean x, y, z;
int a = 15;
int b = 2;
x = a > b; // true;
y = a < b; // false;
z = a != b; // true;
System.out.println("x =" + x);
System.out.println("y =" + y);
System.out.println("z =" + z);
執行結果如下圖所示:
第4題:
int x;
double y;
x = (int) 22.5 + (int) 34.7;
y = (double) x;
System.out.println("x = " + x);
System.out.println("y = " + y);
執行結果如下圖所示:
第5題:
int i = 5;
int j = 5;
int m = 5;
int n = 5;
i++;
j = j + 1;
m--;
n = n - 1;
System.out.println(i);
System.out.println(i++);
System.out.println(++i);
System.out.println(i--);
System.out.println();
System.out.println(j);
System.out.println(j++);
System.out.println(j--);
System.out.println(--j);
System.out.println();
System.out.println(m);
System.out.println(n);
執行結果如下圖所示:
第6題:
int i = 0;
int j = 0;
System.out.println(i);
System.out.println(j);
i++;
++j;
System.out.println(i);
System.out.println(j);
System.out.println("--------------------------");
System.out.println(i++);
System.out.println(++j);
System.out.println("--------------------------");
System.out.println(i);
System.out.println(j);
執行結果如下圖所示:
六、Java控制語句練習題
編寫java程式,用迴圈結構列印如下的數值列表:
1 10 100 1000
2 20 200 2000
3 30 300 3000
4 40 400 4000
5 50 500 5000
public class Test {
public static void main(String[] args) {
for(int i=1 ; i<=5 ; i++){
int temp = i;
for(int j=1; j<=4 ; j++){
System.out.print(temp + " ");
temp *= 10;
}
System.out.println();
}
}
}
●列印2到10000的所有素數,每行顯示8個素數。
public class Test {
public static void main(String[] args) {
int count = 0;
for(int i=2;i<=10000;i++){
boolean isPrimeNum = true;
for(int j=2;j<i;j++){
if(i % j == 0){
isPrimeNum = false;
break;
}
}
if(isPrimeNum){
System.out.print(i + " ");
count++;
if(count == 8){
System.out.println();
count = 0;
}
}
}
}
}
● 編寫程式,計算5的階乘。
public class Test {
public static void main(String[] args) {
int result = 1;
for(int i=1; i<=5; i++){
result *= i;
}
System.out.println("5的階乘 = " + result);
}
}
● 控制檯輸入年齡,根據年齡輸出不同的提示。
public class Test {
public static void main(String[] args) {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("請輸入年齡:");
int age = s.nextInt();
if(age < 0 || age > 150){
throw new RuntimeException("對不起,年齡值不合法!");
}
String grade = "你是老年人";
if(age < 5){
grade = "可愛的小baby";
}else if(age < 10){
grade = "你還是個小屁孩";
}else if(age < 15){
grade = "小少年,不錯哦";
}else if(age < 18){
grade = "你是個青少年";
}else if(age < 35){
grade = "你是個青年人";
}else if(age < 50){
grade = "你已是中年人";
}
System.out.println(grade);
}
}
● 編寫程式輸出下圖菱形。
public class Test {
public static void main(String[] args) {
int lay = 9;
for (int m = 1; m <= (lay + 1) / 2; m++){
for (int b = 1; b <= (lay + 1) / 2 - m; b++){
System.out.print(" ");
}
for (int c = 1; c <= m * 2 - 1; c++) {
System.out.print("*");
}
System.out.println();
}
for (int d = (lay + 1) / 2 - 1; d >= 1; d--){
for (int b = 1; b <= (lay + 1) / 2 - d; b++){
System.out.print(" ");
}
for (int c = (lay + 1) / 2 - d; c <= (lay + 1) / 2 - 2 + d; c++){
System.out.print("*");
}
System.out.println();
}
}
}
● 籃球從5米高的地方掉下來,每次彈起的高度是原來的30%,經過幾次彈起,籃球的高度是0.1米。
public class Test {
public static void main(String[] args) {
double height = 5.0;
int count = 0;
while(height > 0.1){
height *= 0.3;
count++;
}
System.out.println("彈起次數 = " + count);
}
}
七、Java方法練習題
● 使用遞迴方式計算N的階乘。
public class Test {
public static void main(String[] args) {
int n = 5;
int result = factorial(n);
System.out.println(n + "的階乘 = " + result);
}
public static int factorial(int n) {
if(n == 1){
return 1;
}
return n * factorial(n - 1);
}
}
● 編寫程式,模擬使用者登入功能,程式開始執行時先在DOS命令視窗中初始化登入頁面,提醒使用者輸入使用者名稱和密碼,當用戶輸入使用者名稱為admin,密碼為123的時候登入成功,列印歡迎資訊,當用戶輸入的使用者名稱和密碼不正確列印錯誤提示資訊並退出系統。對於以上的程式大家儘可能定義相關方法來完成,不要將所有程式碼都放到main方法當中。
public class Test {
public static void main(String[] args) {
//初始化介面
initUI();
}
public static void login(String username, String password) {
if("admin".equals(username) && "123".equals(password)){
System.out.println("登入成功,歡迎"+username+"回來!");
}else{
System.out.println("對不起,使用者名稱或者密碼錯誤!");
}
}
public static void initUI() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.println("歡迎使用本系統,請登入!");
System.out.print("使用者名稱:");
String username = s.next();
System.out.print("密碼:");
String password = s.next();
//登入
login(username, password);
}
}
● 通過方法過載、方法重複利用完成以下功能:
1、定義一個方法,該方法可以選出2個int型別較大的資料,返回值是較大的資料。
2、再定義一個方法,該方法可以選出3個int型別中較大的資料,返回值是較大的資料。
3、要求使用方法過載機制,要求程式碼體現出重複利用。
main方法中編寫程式進行測試。
public class Test {
public static void main(String[] args) {
System.out.println(getBiger(10, 20));
System.out.println(getBiger(5,6,4));
}
public static int getBiger(int a , int b){
return a > b ? a : b;
}
public static int getBiger(int a , int b , int c){
return getBiger(a , b) > c ? getBiger(a , b) : c;
}
}
八、Java面向物件練習題
●設計日期類,每個日期物件都可以描述年月日資訊。
public class Date {
int year;
int month;
int day;
}
● 設計男人類,每個男人都有身份證號、姓名、性別、女人。設計女人類,每個女人都有身份證號、姓名、性別、男人。
public class Man {
String idCard;
String name;
boolean sex;
Woman gril;
}
public class Woman {
String idCard;
String name;
boolean sex;
Man boy;
}
● 設計銀行賬戶類,每個賬戶都有賬號、密碼、餘額等資訊。
public class Account {
String actno;
String password;
double balance;
}
● 設計微信賬號類,每個微信賬號都有微訊號、手機號、暱稱等資訊。
public class WebChatAccount {
String webChatId;
String phone;
String nickname;
}
九、Java物件的建立和使用練習題
● 定義丈夫類Husband和妻子類Wife,丈夫類的屬性包括:身份證號,姓名,出生日期,妻子。妻子類的屬性包括:身份證號,姓名,出生日期,丈夫。分別給這兩個類提供構造方法(無引數構造方法和有引數構造方法都要提供),編寫測試程式,建立丈夫物件,然後再建立妻子物件,丈夫物件關聯妻子物件,妻子物件關聯丈夫物件,要求能夠輸出這個“丈夫物件”的妻子的名字,或者能夠輸出這個“妻子物件”的丈夫的名字。要求能夠畫出程式執行過程的記憶體圖。並且要求在程式中演示出空指標異常的效果。
public class Husband {
String idCard;
String name;
String birth;
Wife w;
public Husband() {
super();
}
public Husband(String _idCard, String _name, String _birth) {
super();
this.idCard = _idCard;
this.name = _name;
this.birth = _birth;
}
}
public class Wife {
String idCard;
String name;
String birth;
Husband h;
public Wife() {
super();
}
public Wife(String _idCard, String _name, String _birth) {
super();
this.idCard = _idCard;
this.name = _name;
this.birth = _birth;
}
}
public class Test {
public static void main(String[] args) {
Husband zhangsan = new Husband("11111" , "zhangsan" , "2020-10-01");
Wife lisi = new Wife("22222" , "lisi" , "2020-10-02");
zhangsan.w = lisi;
lisi.h = zhangsan;
System.out.println(zhangsan.name + "的妻子是" + zhangsan.w.name);
System.out.println(lisi.name + "丈夫是" + lisi.h.name);
zhangsan.w = null;
lisi.h = null;
System.out.println(zhangsan.name + "的妻子是" + zhangsan.w.name);
System.out.println(lisi.name + "丈夫是" + lisi.h.name);
}
}
執行結果如下圖所示: