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大概的遊戲規則-------------------
現在大家清楚了遊戲規則後我大概分成幾個步驟 

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 加下去
就可以直接呼叫.....



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


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(答案)
所以舉一反三一下 答案應該很快就出來了