JavaSE編碼試題強化練習1

1. 編寫應用程序,建立類的對象,分別設置圓的半徑、圓柱體的高,計算並分別顯示圓半徑、圓面積、圓周長,圓柱體的體積。
/**
 * 定義父類--圓類
 */
public class Circle {
  /**
   * 私有屬性:成員變量--圓半徑
   */
  private double radius;
  /**
   * 構造方法
   */
  public Circle() {
    radius = 0.0;
  }

  public Circle(double radius) {
    this.radius = radius;
  }

  /**
   *成員方法--求圓周長
   */
  double getPerimeter(){
    return 2*Math.PI*radius;
  }

  /**
   * 成員方法--求圓面積
   */
  double getArea(){
    return Math.PI*radius*radius;
  }
  /**
   * 成員方法--顯示圓半徑、周長、面積
   */
  void show(){
    System.out.println("圓半徑:"+radius);
    System.out.println("圓周長:"+getPerimeter());
    System.out.println("圓面積:"+getArea());
  }
}
/**
 * 定義子類--圓柱類
 */
public class Cylinder extends Circle {
  /**
   * 私有屬性:成員變量--圓柱體的高
   */
  private double hight;
  /**
   * 構造方法、調用父類方法
   */
  public Cylinder() {
  }

  public Cylinder(double r, double h) {
    super(r);
    this.hight = h;
  }

  /**
   * 成員方法--求圓柱體的體積
   */
  public double getVolume(){
    return getArea()*hight;
  }
  /**
   * 成員方法--顯示圓柱體體積
   */
  void showVolume(){
    System.out.println("圓柱體的體積 = "+getVolume());
  }
}
/**
 * 測試類
 */
public class Test {
  public static void main(String[] args) {
    /**
     * 建立圓類對象、調用方法
     */
    Circle c = new Circle();
    /**
     * 調用圓類方法
     */
    c.show();
    /**
     * 建立圓柱體對象(實例)、調用方法
     */
    Cylinder cy = new Cylinder();
    /**
     *調用父類方法
     */
    cy.show();
    /**
     * 調用子類方法
     */
    cy.showVolume();
  }
}

 

 

2.設計4個線程,其中兩個線程每次對j增長1,另外兩個線程對j每次減小1。java

編寫實現,要求:使用內部類實現線程,對j增減的時候不考慮順序問題。編程

/**
 * 測試類
 */
public class ThreadTest {
  /**
   * 聲明成員變量
   */
  private int j;
  /**
   * 程序主入口:main方法
   */
  public static void main(String[] args) {
    /**
     * 建立對象
     */
    ThreadTest tt = new ThreadTest();
    /**
     * 建立線程內部類對象
     */
    Inc inc = tt.new Inc();
    Dec dec = tt.new Dec();
    for (int i = 0;i < 2;i++){
      /**
       * 建立線程對象並啓動線程
       */
      Thread t = new Thread(inc);
      t.start();
      t = new Thread(dec);
      t.start();
    }
  }
  /**
   * 實現同步對j的值+1操做
   */
  private synchronized void inc(){
    j++;
    System.out.println(Thread.currentThread().getName()+"-inc :"+j);
  }
  /**
   * 實現同步對j的值-1操做
   */
  private synchronized void dec(){
    j--;
    System.out.println(Thread.currentThread().getName()+"-dec :"+j);
  }
  /**
   * 內部類
   */
  private class Inc implements Runnable {
    @Override
    public void run() {
      for (int i = 0;i < 100;i++){
        /**
         * 調用加的方法
         */
        inc();
      }
    }
  }
  private class Dec implements Runnable{
    @Override
    public void run() {
      for (int i = 0; i < 100; i++) {
        /**
         * 調用減的方法
         */
        dec();
      }
    }
  }
}

 

 

 3.Java的通訊編程,用Java Socket編程,要求從客戶端錄入幾個字符,發送到服務器端,由服務器端將接收到的字符進行輸出。服務器

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 線程通訊--服務器端
 */
public class Server {
  /**
   * 聲明ServerSocket對象
   */
  private ServerSocket ss;
  /**
   * 聲明Socket對象
   */
  private Socket socket;
  /**
   * 聲明輸入流對象BufferedReader
   */
  private BufferedReader br;
  /**
   * 聲明輸出流對象
   */
  private PrintWriter pw;
  public Server(){
    try {
      /**
       * 建立一個ServerSocket對象,指定等待端口
       */
      ss = new ServerSocket(8848);
      while (true){
        /**
         * 使用ServerSocket接收用戶請求(服務器端處於監聽狀態)
         */
        /**
         * 得到客戶端的socket對象
         */
        socket = ss.accept();
        /**
         * 建立輸入流並讀取信息
         */
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        System.out.println("客戶端請求:"+line);
        /**
         * 建立輸出流並輸出信息
         */
        pw = new PrintWriter(socket.getOutputStream(),true);
        pw.print("請求已接收!");
        /**
         * 關閉流
         */
        pw.close();
        br.close();
        socket.close();
      }
    } catch (IOException e) {
      pw.println("出現異常!");
    }
  }
  /**
   * 程序主入口
   */
  public static void main(String[] args) {
    /**
     * 建立服務器端對象
     */
    new Server();
  }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * 線程通訊--客戶端
 */
public class Client {
  /**
   * 聲明Socket對象
   */
  Socket socket;
  /**
   * 聲明輸入流對象
   */
  BufferedReader br;
  /**
   * 聲明輸出流對象
   */
  PrintWriter pw;
  /**
   * 構造方法
   */
  public Client(){
    try {
      /**
       * 建立Socket對象用來發送請求
       */
      socket = new Socket("127.0.0.1",8848);
      /**
       * 建立字符緩衝區對象並輸出
       */
      BufferedReader line =
        new BufferedReader(new InputStreamReader(System.in));
      /**
       * 建立輸出流對象並輸出
       */
      pw = new PrintWriter(socket.getOutputStream(),true);
      pw.println(line.readLine());
      /**
       * 建立輸入流對象
       */
      br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      System.out.println(br.readLine());
      /**
       * 關閉流
       */
      pw.close();
      br.close();
      socket.close();
    } catch (IOException e) {
      System.out.println("請求出錯!");
    }
  }
  /**
   * 程序主入口
   */
  public static void main(String[] args) {
    /**
     * 建立客戶端對象
     */
    new Client();
  }
}

線程通訊在本身的電腦上測試過程:socket

一、先運行服務器端程序,運行結果以下圖ide

 

 *紅色方框中的紅色方塊按鈕亮起表明程序已運行,正在等待(監聽)客戶端請求測試

二、再運行客戶端程序,並輸入請求,運行以下圖this

2.1  客戶端處於等待輸入指令狀態spa

2.2  客戶端完成指令輸入並獲得服務器端迴應,紅色方塊按鈕滅掉.net

 

 2.3  服務器端,收到客戶端請求給出回饋信息,並未關閉監聽狀態,需手動中止(現實中服務器通常是時刻處於監聽狀態的,維護期間會關閉)線程

相關文章
相關標籤/搜索