顯示具有 JAVA Program 標籤的文章。 顯示所有文章
顯示具有 JAVA Program 標籤的文章。 顯示所有文章

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;
    } 
    
   }
  }
} 

2017年3月10日 星期五

JAVA 一、二維陣列 練習

亂數產生6個(double)實數存到陣列,陣列需由大到小排序,顯示出來。必須要有,排列前排列後,且是用迴圈列印出來






















某一水果商分別賣三種水果A B C,價格分別為 5 10 15元,而在早上 下午 晚上賣出不同數量
數量依序早上 下午 晚上
A:68 77 43
B:45 63 55
C:56 65 97


1.請算出在早上水果個別銷售總金額
2.請算出在這天內,水果個別銷售總金額

除了數量能直接指定給陣列外,其餘只能用迴圈方式操作陣列


JAVA for 亭貽 多載

題目如下
若我們計算 正方形 長方形 與輸入字串 且我們都用 "count" 方法(女僕)來進行多載運算面積

因為多載有兩種情況
所以 變成三胞胎




結果如圖 我們可以看到
正方形面積運算
長方形面積運算
以及字串輸出 Take it Easy (放輕鬆點)

2017年3月9日 星期四

JAVA練習題 5-3迴圈

請利用迴圈撰寫出如下圖結果的程式
使用者能自行輸入階層,來產生不同階級的星號


請撰寫出 使用者能依照自己喜好的範圍 做平方相加相減 規律如下
1^2-2^2+3^2-4^2+5^2-6^2..............
 



起始點與終點安全性請做好 不能崩潰

請試著撰寫 使用者自行輸入範圍內的平方值總和
1^2+2^2+3^2..................
Start為起點 Finsh為終點



請試著撰寫 讓使用者自行輸入幾乘幾的乘法表




2017年3月8日 星期三

JAVA練習題-3

試撰寫出輸入值所有質數
並由大到小排列...

答案如下圖

JAVA 練習題目-2

利用for迴圈撰寫出一個能產生結果程式
請先畫流程圖.....

JAVA 題目練習

假設某工作站工讀生的薪資為

60小時內 基本時薪每小時100元
61-75小時 基本時薪1.5倍
76小時以上 基本時薪2.5倍

所以如果80小時的話 時薪為60*100+15*100*1.5+5*100*2.5=9500

答案如圖

2017年3月5日 星期日

JAVA CLASS 控制 乘法表









/*乘法表 private public 控制*/
import java.util.*;
class SumArray{
 private int xmap,ymap;
    private int[][] map;
 public void set(int x,int y){ //傳直給xmap ymap
  xmap=x;
  ymap=y;
  setmap();
 }
 private void setmap(){
  map=new int[xmap+1][ymap+1];
  int sum=0;
  for(int i=0;i<=xmap;i++){
   for(int j=0;j<=ymap;j++){
    if(i>0&&j>0){
     map[i][j]=i*j;
     sum+=i*j;
     System.out.print(i+"*"+j+"="+map[i][j]+"\t");
    }
   }
   if(sum!=0)System.out.print(sum);
   sum=0;
   System.out.println(); 
  }
 }
}
public class Diffclass{
 public static void main(String[] args){
  Scanner sc=new Scanner(System.in);
  int x=0,y=0;
  System.out.println("plz type x");
  x=sc.nextInt();
  System.out.println("plz type y");
  y=sc.nextInt();
  SumArray sum1=new SumArray();
  sum1.set(x,y); 
 }
}