2017年4月24日 星期一
2017年4月19日 星期三
TQC JAVA個人解題(108~109)
108 覆載方法
使用類別撰寫三項Add方法
恩...注意傳值型態和數量即可
109 變數範圍
1.呼叫gameRating() 後傳值給adder 做運算,運算完後傳回值
2.adder 運算方式為 skill+action+excitment
3.執行後,如下圖
個人解題:
記得函數如何傳值給另外一個函數 即可...
2017年4月10日 星期一
1A2B 數字比對PART2
會拆數字之後接下來就把兩個數字做拆解後個別存到box1 跟box2上
也就是box1[]跟box2[]
那問題就來了 我們如何讓電腦知道幾A幾B呢?
我們先自己比對一次 是不是就像下圖一樣呢?
如果我把A1(box1)當成主要角色B1(box2)當成次要角色
那麼對應方式就會為.....
box1[0]去對上box2[0,1,2,3]
box1[1]去對上box2[0,1,2,3]
以此類推
所以注意到了嗎? box1和box2的關係是不是就變成巢狀迴圈了呢?
再來.... 接下來A代表數字對位置也對
B則是數字對 位置不對.....
我們把剛剛的巢狀迴圈 控制i j的值 是不是就是位置呢?
不懂的話回去看上一張圖.... A1裡面有4個格子 所以變成box1[i] i=0,1,2,3以此類推
也就是說 我們跑這個巢狀迴圈是在抓box1[i]裡面的值 那i就是索引值也就是位置
囉.....
接下來....了解位置後
應該就能很輕鬆判斷A和B的條件吧
所以 符合A 程式碼就是:if(i==j&&box1[i]==box2[j]) 如果位置正確裡面的值也正確那麼....
符合B 程式碼就是:if(i!=j&&box1[i]=box2[j]) 如果位置不正確 裡面值正確那麼.....
以上就是數字比對的部分
注意!這裡只是教方法如何使用....複製貼上一點意義都沒有.(1A2B 不懂這些程式碼拼拼湊湊絕對不會有答案出來喔..... 真心不騙)
以下程式碼為:
public static void comp(int[] box1,int[] box2) { for(i=0;i<=3;i++) { for(j=0;j<=3;j++) { if(i==j&&box1[i]==box2[j]) { aok++; }else if(i!=j&&box1[i]==box2[j]) { bok++; } } } }
1A2B遊戲讓電腦猜數字成為你心目中的遊戲伴侶
廢話不多說 今天寫一下如何讓電腦成為你心目中的伴侶
結果如下圖:
在此先說明此1A2B的遊戲規則之後文章不在贅述
1.是一個4位數,其中0~9不得在同一個4位數內出現兩次而且千位數不能是0所以以下是不能出現的情況(EX:0123,1223,1315,1454等)所以範圍1023~9876
2.本遊戲是讓電腦猜你心裡的數字後,你回答幾A幾B,所以..流程=>電腦猜你數字假設(1234)=>你心目中的答案是1235所以你回答3A0B=>....以此類推,直到電腦猜到你的數字為止
3.使用者不得欺負電腦,如5A0B不可能出現的數字,或者一次的遊戲內是你心裡想的答案不斷更換,若有以上情況電腦應該都會出現ERROR提示使用者.....
4.電腦成功猜出數字時(當你輸入4A0B時),會高興的跟你說猜到了
-------------------以上為本1A2B大概的遊戲規則-------------------
結果如下圖:
在此先說明此1A2B的遊戲規則之後文章不在贅述
1.是一個4位數,其中0~9不得在同一個4位數內出現兩次而且千位數不能是0所以以下是不能出現的情況(EX:0123,1223,1315,1454等)所以範圍1023~9876
2.本遊戲是讓電腦猜你心裡的數字後,你回答幾A幾B,所以..流程=>電腦猜你數字假設(1234)=>你心目中的答案是1235所以你回答3A0B=>....以此類推,直到電腦猜到你的數字為止
3.使用者不得
4.電腦成功猜出數字時(當你輸入4A0B時),會
-------------------以上為本1A2B大概的遊戲規則-------------------
現在大家清楚了遊戲規則後我大概分成幾個步驟
1.輸入兩個數字 拆數字(稍後本文介紹)
2.比對1A2B
3.創造一個1023~9876之間的陣列且不得有重複數字(請見規則1)此陣列用來標記有無可能是使用者猜的數字 有可能則1不可能則0幾A幾B
4.電腦每次產生一個亂數在1023~9876之間且不得重複數字出現每猜完一次下一次亂數就不可能再出現(利用第二步的陣列)
5.結合 功能整合
-----------------------數字拆解讓電腦辨別幾A幾B---------------------
首要達成目標 使用者輸入兩個數字讓電腦做比對動作,並顯示幾A幾B
假設有兩個數字1023 1024整數
我們自己去比對一個一個看 那麼既然知道是一個一個看
也就可以知道我們能用陣列一個一個下去比對
如下:我把1023 1024個別存到box1和box2這兩個陣列裡面
所以創出兩個陣列大小為4 然後一個一個去比對用迴圈方式做4次
當然若要比對,基本上就是要拆數字 給個觀念
1234=(A*1000+B*100+C*10+D*1)相信這個大家都會算
那麼若用電腦拆數字呢??
我們設一A,B,C,D的整數
是不是就變成...
1234/1000=A
1234=(1234-A*1000)/100=B
1234=(1234-A*1000-B*100)/10=C
1234=(1234-A*1000-B*100-C*10)/1=D
我們發現每次數字拆解都是4次而且取值都需要上一次的結果
抓下來運算 需要一個巢狀迴圈
所以......JAVA結果為
程式碼如下:Dismantling為函數拆解
import java.util.*; public class NumberComparison { static int a1=0,b1=0,i=0,a=0,b=0,c=0,d=0; static int[] box1=new int[4]; static int[] box2=new int[4]; public static void main(String args[]) { Scanner sc=new Scanner (System.in); System.out.println("a1的數值為"); a1=sc.nextInt(); System.out.println("b1的數值為"); b1=sc.nextInt(); Dismantling1(a1); Dismantling2(b1); for(i=0;i<=3;i++) { System.out.println("box1\t"+box1[i]); } for(i=0;i<=3;i++) { System.out.println("box2\t"+box2[i]); } } public static void Dismantling1(int a1) { for(i=0;i<=3;i++) { switch(i) { case 0: a=a1/1000; box1[i]=a; break; case 1: b=(a1-a*1000)/100; box1[i]=b; break; case 2: c=(a1-a*1000-b*100)/10; box1[i]=c; break; case 3: d=(a1-a*1000-b*100-c*10)/1; box1[i]=d; break; } } } public static void Dismantling2(int b1) { for(i=0;i<=3;i++) { switch(i) { case 0: a=b1/1000; box2[i]=a; break; case 1: b=(b1-a*1000)/100; box2[i]=b; break; case 2: c=(b1-a*1000-b*100)/10; box2[i]=c; break; case 3: d=(b1-a*1000-b*100-c*10)/1; box2[i]=d; break; } } } }
TQC JAVA個人解題(106~107)
106數學函數
有一個數學函數 f(x)=3(x^3)+2x-1
撰寫函數傳回值 並傳下列4個值,答案取到小數點第四位
個人解題
f(x)=3(x^3)+2x-1 數學函數 基本上題目沒有要求限制 次方看要使用Math.pow 還是直接相乘,都可以
那....記得傳值給函數 和回傳值型態
還有既然傳回小數點第四位,所以System.out.printf();
另外System.out.printf() 換行 可在字串內用%n 或者是\n 任君選擇
107運動成績
使用類別方法
動作1分技巧2分團隊表現3分
有兩個類別 basketball 和 baseball 各有一個方法
calGrade();
basketball 為動作+技巧+團隊表現
baseball 為10+技巧+團隊表現
個人解題
其實這題是題目敘述不太好......
記得類別是甚麼 函數是甚麼 就好了
方法若是懶得 創造物件 記得 static 加下去
就可以直接呼叫.....
有一個數學函數 f(x)=3(x^3)+2x-1
撰寫函數傳回值 並傳下列4個值,答案取到小數點第四位
個人解題
f(x)=3(x^3)+2x-1 數學函數 基本上題目沒有要求限制 次方看要使用Math.pow 還是直接相乘,都可以
那....記得傳值給函數 和回傳值型態
還有既然傳回小數點第四位,所以System.out.printf();
另外System.out.printf() 換行 可在字串內用%n 或者是\n 任君選擇
107運動成績
使用類別方法
動作1分技巧2分團隊表現3分
有兩個類別 basketball 和 baseball 各有一個方法
calGrade();
basketball 為動作+技巧+團隊表現
baseball 為10+技巧+團隊表現
個人解題
其實這題是題目敘述不太好......
記得類別是甚麼 函數是甚麼 就好了
方法若是懶得 創造物件 記得 static 加下去
就可以直接呼叫.....
2017年4月9日 星期日
TQC JAVA個人解題105
105 存錢筒
1.請輸入您的姓名,後方輸入姓名
2.於畫面後方要求輸入姓名
3.輸出總金額
個人解題
拆數字 假設有個數字為1234
1234=1*1000+2*100+3*10+4*1
那麼
1234/1000=1
(1234-1*1000)/100=2
(1234-1*1000-2*100)/10=3
(1234-1*1000-2*100-3*10)/1=4
1.請輸入您的姓名,後方輸入姓名
2.於畫面後方要求輸入姓名
3.輸出總金額
個人解題
拆數字 假設有個數字為1234
1234=1*1000+2*100+3*10+4*1
那麼
1234/1000=1
(1234-1*1000)/100=2
(1234-1*1000-2*100)/10=3
(1234-1*1000-2*100-3*10)/1=4
2017年4月8日 星期六
TQC JAVA個人解題(101~104)
解題前言:
依照題目要求條件下,能做出答案就可以了
沒有在題目的條件就可以偷吃步
題目是死的 寫法是活的....
101 字串列印
題目要求修改程式碼片段.... 讓他正常運作
不過.....整個重打一次也是可以?
102 單位換算
輸入一個數字 單位轉換1公斤=2.20462ponds
這題....比較需要注意的是
System.out.printf();
這個用法解釋一下....
字串內 第一個%.6f 對應到p 第二個%.6f則是對應到 p*2.20462
%.6f代表取到小數點第6位之後四捨五入
另外還有 %d 整數 %s字串 %n 換行(%n不需要變數對應)
只需要注意字串和變數型態互相對應就可以了
103計算平均值
輸入三整數,分別存入三個整數算平均 取到小數點第二位
此題只需要注意......因為題目要求輸入整數 但輸出要是小數
所以.....算完後記得強制轉型即可.....
104 距離計算
輸入兩個座標然後計算距離
另外使用Math.pow 和Math.sqrt 這兩個函數
會使用Math.pow 和 Math.sqrt 就可以了
大致使用方法
Math.pow(2,4); ==>16(答案)
Math.sqrt(16);==>4(答案)
所以舉一反三一下 答案應該很快就出來了
依照題目要求條件下,能做出答案就可以了
沒有在題目的條件就可以偷吃步
題目是死的 寫法是活的....
101 字串列印
題目要求修改程式碼片段.... 讓他正常運作
不過.....整個重打一次也是可以?
102 單位換算
輸入一個數字 單位轉換1公斤=2.20462ponds
這題....比較需要注意的是
System.out.printf();
這個用法解釋一下....
字串內 第一個%.6f 對應到p 第二個%.6f則是對應到 p*2.20462
%.6f代表取到小數點第6位之後四捨五入
另外還有 %d 整數 %s字串 %n 換行(%n不需要變數對應)
只需要注意字串和變數型態互相對應就可以了
103計算平均值
輸入三整數,分別存入三個整數算平均 取到小數點第二位
此題只需要注意......因為題目要求輸入整數 但輸出要是小數
所以.....算完後記得強制轉型即可.....
104 距離計算
輸入兩個座標然後計算距離
另外使用Math.pow 和Math.sqrt 這兩個函數
會使用Math.pow 和 Math.sqrt 就可以了
大致使用方法
Math.pow(2,4); ==>16(答案)
Math.sqrt(16);==>4(答案)
所以舉一反三一下 答案應該很快就出來了
訂閱:
文章 (Atom)