2017年6月24日 星期六

第九章 傳回星期

題目:撰寫一個程式,其中包含一個類別Dates,並再建構方法中初始化一個包含有七個元素的字串陣列,

各個元素對應到星期一到星期天的英文縮寫,

並提供一個方法askDate(),並傳入1~7的數字,傳回對應的英文縮寫 

import java.util.Scanner;
class Dates{
String []day={"Mon", "Tue", "Wed", "Thu", "Fri","Sat" ,"Sun"};
void askDate(int i){

System.out.print(day[i-1]);
}
}


public class HomeWork0901 {

public static void main(String[] args) {
int i;
   loop:
   while (true){//檢查是否1~7不然要重新輸入一次
     System.out.print("1~7-> ");
     Scanner sc=new Scanner(System.in);
   
      i=sc.nextInt();
   
      if (i>=1 && i<=7){
      sc.close();
        break;
      }
      continue loop;
   }

Dates day =new Dates();

day.askDate(i);

}

}

第八章 QuickSort排序法 由大排到小


題目:使用Ellis Horowitz法,將陣列由大到小依序排列


class Sorter1 {
int[] data;

void quickSort(int start,int end) {

if(start >= end) {
return;
}

int mid = data[(start + end) / 2];

int left = start;
int right = end;
while(true) {
while(data[left] > mid) {
left++;
}
while(data[right] < mid) { //
right--;
}
if(left < right) { //
int temp = data[left]; //
data[left] = data[right];
data[right] = temp;
left++; //
right--; //
show();
}
else //
break;
}

  quickSort(start,left-1);
  quickSort(right+1,end);
  }

  void show() {
  for(int i:data) {
  System.out.print(i +" ");
  }
  System.out.println("");
  }

  void sort(int[] data) {
  this.data = data;
  show();
  quickSort(0,data.length - 1);
  }
 }

 public class HomeWork0810 {

 public static void main(String[] argv) {


int[] data = new int[argv.length];


for(int i = 0;i < data.length;i++) {
data[i] = java.lang.Integer.parseInt(argv[i]);
}

Sorter1 s = new Sorter1();

s.sort(data);
  }
 }

2017年6月23日 星期五

第八章 用MyCalc類別回傳特定三種數值

題目:撰寫一個MyCalc的Class,可以由Keyboard輸入一個數值n,然後分別呼叫3種方法來計算並顯示下列三種結果:
1.
1/1+1/2+1/3+...1/n
2.
1+2+3+...+n
3.
1~n之中可以被13整除的數字

import java.util.Scanner;
class MyCalc{
public static double harmonic (int n){
double sum=0;
for(double b=1;b<=n;b++)
sum+=(1/b);

System.out.println(sum);
return 0;
}
public static double triangular  (int n){
int  sum=0;
for(int j=1;j<=n;j++)
sum+=j;
System.out.println(sum);
return 0;
}

public static double Div13(int n){
for(int k=1;k<=n;k++){
if(k%13==0)
System.out.print(k+" ");
}
return 0;
}
}

public class HomeWork0809 {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
MyCalc.harmonic(n);
MyCalc.triangular(n);
MyCalc.Div13(n);
sc.close();

}

}

第八章 傳入陣列並計算其平均值

題目: 撰寫部論是傳入Int陣列或Float陣列,皆可以傳回陣列內所有元素平均值的方法

import java.util.Scanner;
class testAVG{
public static float intAVG(int []a,float []b){
float sum=0;

for(int i=0;i<a.length;i++){
sum+=a[i];
}
System.out.print(sum/a.length);
return sum/(a.length-1);

}
public static float floatAVG(int []a,float []b){
float sum=0;

for(int i=0;i<b.length;i++){
sum+=b[i];
}
System.out.print(sum/b.length);
return sum/(b.length-1);

}

}
public class HomeWork0808 {

public static void main(String[] args) {

System.out.println("請選擇\n1.整數\n2.浮點數");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();

if(i==1)
{
System.out.print("請輸入陣列長度");
int j=sc.nextInt();

int a[]=new int[j];
for(int k=0;k<j;k++){
a[k]=sc.nextInt();
}

float b[]=null;
testAVG.intAVG(a,b);
}
else if(i==2)
{
System.out.print("請輸入陣列長度");
int k=sc.nextInt();
float b[]=new float[k];
for(int m=0;m<k;m++){
b[m]=sc.nextFloat();
}
int a[]=null;
testAVG.floatAVG(a,b);
}
else
System.out.print("輸入錯誤");

sc.close();

}

}

2017年6月21日 星期三

第八章 傳入陣列並加總其值

題目:
請使用多重定義的技巧,撰寫不論是傳入整數陣列,並將陣列內容個元素的加總傳回

class test{
public static void show(int[] b){
int sum=0;

for(int i=0;i<b.length;i++){
sum+=b[i];
}
System.out.print(sum);
return;
}
}

public class HomeWork0807 {

public static void main(String[] args) {
   
   System.out.println("陣列內各元素總和為");
   test.show(new int[] {1,2,3,4,5});

}

}

2017年6月20日 星期二

第六章 中獎查詢

題目:預先設定六個介於1~49之間中獎號碼,並讓使用者輸入六個1~49之間的號碼。如果兩者相同就顯示中獎的訊息


import java.util.*;
public class HomeWork0608 {
public static void main(String[] args){
Scanner sc=new
Scanner(System.in);

int []envoice={3,5,18,28,33,40};//事先排好中獎號碼
int []check=new int[6];

for(int j=0;j<6;j++){
check[j]=sc.nextInt();
}

for (int i=0;i<check.length-1;i++){
for (int j = 0; j < check.length-1-i; j++){
if(check[j]>check[j+1]){
check[j]=check[j]^check[j+1];
check[j+1]=check[j]^check[j+1];
check[j]=check[j]^check[j+1];
}//使用XOR交換,未使用到變數儲存變數
}
}
//輸入內容,並以氣泡法排序

for(int t=0;t<6;t++){
if(check[t]!=envoice[t]){
System.out.print("未中獎");
break;
}
else
System.out.print("恭喜中獎");
break;
}//開始查詢是否中獎


sc.close();


}


}

2017年6月19日 星期一

第八章 河內塔計次版

題目:顯示盤子的移動狀況,並且在完成移動後輸出移動次數

import java.io.*;
class HanoiTowerGame{
static int count1=0;//累積移動次數用

void go(int discs){
hanoiTower('A','C','B',discs);
}

//實際搬動盤子
void moveDisc(char source, char target, int disc){
System.out.println("將"+disc+"號碟子從柱子"+
source+ "搬到"+target);
count1++;
}

/**
a: 來源柱子
b: 目的地
c: 空的柱子
discs: 碟子數量
*/

void hanoiTower(char a,char c, char b ,int discs){
if(discs==1){
moveDisc(a, c, discs);
return;
}

//先將最大碟子以外的碟子搬到B
hanoiTower(a, b, c, discs-1);

//把最大的碟子搬到C
moveDisc(a,c,discs);

//將搬到B的碟子搬到C
hanoiTower(b, c, a, discs-1);
}
}
public class Hanoi {

public static void main (String [] argv)throws IOException{
HanoiTowerGame game =new HanoiTowerGame();

BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));

System.out.println("請輸入碟子數量");
int discs= java.lang.Integer.parseInt(br.readLine());

game.go(discs);

System.out.print(HanoiTowerGame.count1);

}
}