日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Forth Week :快速上手一门编程语言

發布時間:2025/4/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Forth Week :快速上手一门编程语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速上手一門編程語言

    • 概述
      • 圖靈完備性語言
      • 識別類型
    • 學習路徑
      • 一 掌握該語言的背景 - 2h
      • 二 掌握該語言的基本程序邏輯語法 - 1h
        • 1、順序結構
          • 2、分支結構
            • 1)if語句
            • 2)switch ... case多分支語句
          • 3、循環結構
            • 1)while
            • 2)do......while
            • 3)for
            • 4)foreach 【java5的新特征之一】
      • 三 掌握該語言的變量 - 2h
        • 1 明確語言的類型
        • 2 基本類型和封裝類型
          • 1)基本數據類型
            • (1)內置數據類型
            • (2)引用數據類型
            • (3)常量
            • (4)特殊轉義字符
            • (5)類型轉換
        • 運算符
          • 1)算數運算符
          • 2)關系運算符
          • 3)位運算符
          • 4)邏輯運算符
          • 5)賦值運算符
          • 6)其他運算符
            • 泛型
    • 3 時間和日期的類型和處理
        • 4 字符串的實現和種類
      • 四 容器對象學習 - 1h
      • 五 實現抽象的方法、類、接口與函數的實現、使用 - 2h - coder
      • 六 函數式編程的支持
      • 七 依賴與項目管理工具與生態支持 - developer
      • 八 內置高級功能 - professional
      • 九 文件讀取和寫入

概述

圖靈完備性語言

圖靈完備的語言,有循環執行語句,判斷分支語句等。理論上能解決任何算法。但有可能進入死循環而程序崩潰。
Pyhton java php等都是圖靈完備的

識別類型

https://blog.csdn.net/sinat_38682860/article/details/86492429?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control
四個概念:
強類型 & 弱類型
動態類型 & 靜態類型
因此:
Python是動態強類型語言 編程語言環境幫助我們判斷類型
Java是靜態強類型的
C是靜態弱類型的 char a -> %c顯示a %d顯示65 人來判斷是什么類型 (PHP也是弱類型)
強弱是指本身能夠判斷這個變量是什么類型
動靜是指聲明變量時指定變量類型是靜態類型(有強制類型轉換),不需要指定的是動態類型(可以自動轉換)。

學習路徑

一 掌握該語言的背景 - 2h

二 掌握該語言的基本程序邏輯語法 - 1h

1、順序結構

2、分支結構
1)if語句
if(表達式){語句塊; } else if(表達式){語句塊; } else{語句塊; }
2)switch … case多分支語句
switch(表達式){case 常量1{語句塊;break}case 常量2{語句塊;break}[default:{語句塊;}] }
3、循環結構

break和continue語句:break是終止本層循環,跳到外層繼續執行代碼;continue終止本次循環,繼續下一次循環;

1)while
public static void main(String args[]){int result = 0;int i = 0;while(i<=100){result += i;i++;}System.out.println("result = "+result); }
2)do…while
public static void main(String args[]){int result = 0;int i=0;do{result += i;i++;}while(i<=100);System.out.println("result = "+result); }
3)for
public static void main(String args[]){for (int i=0;i<10;i++){if(i==3) break;System.out.println("i = "+i);}System.out.println("Game over!"); }
4)foreach 【java5的新特征之一】
for(元素類型t 元素變量x:遍歷對象obj){ 引用了x的java語句; } public void test(){int arr[] = {2,3,4};System.out.println("-----排序前一維數組-----");for(int x:arr){System.out.println(x);//逐個輸出數組元素}Arrays.sort(arr);System.out.println("-----排序后一維數組-----");for(int x:arr){System.out.println(x);}//輸出二維數組int arr2[][] = {{1,2,3},{4,5,6}};System.out.println("二維數組輸出測試");for(int x[] : arr2){for(int e:x){System.out.println(e);}}//輸出三維數組int arr3[][][] = {{{1,2},{3,4}},{{5,6},{7,8}}};System.out.println("三維數組輸出測試");for(int[][] a2:arr){for(int[] a1:a2){for(int x:a1){System.out.println(x);}}} }

三 掌握該語言的變量 - 2h

1 明確語言的類型

靜態?動態?
強 or 弱 ?

2 基本類型和封裝類型

變量類型是值 or 引用類型?
C、C++ - 值類型(保存地址) Python、Javascrip - 引用類型(保存指針 判斷時用equal判斷,否則判斷指針指的是否是同一個地址了) Java 兩者都有

1)基本數據類型
(1)內置數據類型

八種基本類型:六種數字類型(四種整數型、兩個浮點型),一種字符類型,一種布爾類型。

byte:8位,有符號
short:16位,有符號
int:32位,有符號
long:64位,有符號
float:單精度、32位
double:雙精度、64位
boolean:表示一位的信息,取值true和false
char:單個的16位Unicode字符

(2)引用數據類型

類似于C/C++的指針,引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定為一個特定的類型(Employee,Puppy),變量一旦聲明后,類型就不能改變了。

  • 對象、數組都是引用數據類型。
  • array.clone() 否則傳過去的是地址
  • 所有引用類型的默認值都是null。
  • 一個引用類型可以用來引用任何與之兼容的類型。
Site site = new Site("Jacob")
(3)常量

常量在程序運行時不能被修改,使用final關鍵字來修飾,聲明方式和變量類似,變量名常使用大寫字母:

final double PI = 3.14159;
(4)特殊轉義字符
(5)類型轉換

運算符

1)算數運算符
符號含義
-
*
/
%求余
++自增
自減
2)關系運算符
符號含義
==判斷是否相等
!=判斷是否不等
>大于?
<小于?
>=大于等于?
<=小于等于?
3)位運算符
符號含義
&
^
~按位取反
<<按位左移
>>按位右移
4)邏輯運算符
符號含義
&&邏輯與
邏輯非
5)賦值運算符
6)其他運算符
泛型
** 自定義泛型* 泛型字母:T Type* K V key value* E Element* 泛型類:只能用在成員變量上,只能使用引用類型* 泛型接口:只能用在抽象方法上* 泛型方法:返回值前加上* */* //利用泛型方法打印不同的字符串元素 public class GenericMethodTest {public static <E> void printArray(E[] inputArray) {for(E x:inputArray) {System.out.printf("%s ",x);}System.out.println();}public static void main(String[] args) {Integer[] intArray = {1,2,3,4,5};Double[] doubleArray = {1.1,1.2,1.3,1.4};Character[] charArray = {'a','b','c','d'};System.out.println("整型數組元素為:");printArray(intArray);System.out.println("浮點型數組元素為:");printArray(doubleArray);System.out.println("字符串型數組元素為:");printArray(charArray);} }// <任意字符extends類/接口> 表示泛型的上限, 同樣的super表示泛型的下限 public static <T extends Comparable<T>> T maximum(T x,T y,T z) {T max = x;if(y.compareTo(max)>0) {max = y;}if(z.compareTo(max)>0) {max = z;}return max;}public static void main(String[] args) {Scanner scan = new Scanner(System.in); System.out.println("請輸入三個整型數字:");int a = scan.nextInt();int b = scan.nextInt();int c = scan.nextInt();System.out.println("最大的數為:"+maximum(a,b,c));System.out.println("請輸入三個浮點型數字:");float d = scan.nextFloat();float e = scan.nextFloat();float f = scan.nextFloat();System.out.println("最大的數為:"+maximum(d,e,f));}

3 時間和日期的類型和處理

保存時間1970年格林威治到現在的時間戳
Date類

public static void main(String[] args) {Date date = new Date(); //初始化Date對象System.out.println(date.toString());/*日期比較1. getTime()方法獲取兩個時間,然后比較2. before() after() equals()方法eg:new Date(99,2,12).before(new Date(99,2,18)) 返回true3. 使用compareTo()方法*//** 解析字符串為時間* SimpleDateFormat類* */SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");String input = args.length == 0? "1818-11-11 " : args[0];System.out.print(input + "Parse as ");Date t;try {t = ft.parse(input);System.out.println(t);}catch(ParseException e) {System.out.println("Unparseable using"+ft);}/** Sleep休眠 阻塞當前進程* */try {System.out.println(new Date() +"\n");Thread.sleep(3*1000);System.out.println(new Date() + "\n");}catch (Exception e) {System.out.println("GOT an exception!");}}

Calendar類

4 字符串的實現和種類

可變 or 不可變?
字符串常量池 :String創建的字符串存儲在公共池中,而new創建的字符串對象在堆上

//初始化方式 String s1 = "runoob"; //String直接創建 String s2 = "runoob"; String s3 = s2;//相同引用String s4 = new String("runoob");//對象創建 String s5 = new String("runoob");//也可以提供字符數組 char[] helloArray = new char[] {'h','e','l','l','o'}; String helloSrting = new String(helloArray);//字符串也可以直接轉換成字符數組 char[] arr = helloString.toCharArray();//內置字符串函數 1.連接concat()或者+ 2.equals() compareTo(Object o) equalsIgnoreCase()//忽略大小寫 compareTo(String otherstring) contentEquals(StringBuffer sb) //與stringbuffer有相同順序的字符時,返回真 length() replace(oldChar, newChar) replaceAll() replaceFirst() split() trim() startsWith() endsWith() toUpperCase() toLowerCase() indexOf() contains() subString() isEmpty()

StringBuffer類、StringBuilder比StringBuffer速度快
使用stringBuffer類時,每次都會對Stringuffer對象本身進行操作,而不是生成新的對象,要求線程安全的情況下,必須使用StringBuffer類

StringBuffer sBuffer = new StringBuffer("cainiaoguanwang:"); sBuffer.append("www"); sBuffer.append(".runoob"); sBuffer.append(".com"); System.out.println(sBuffer);StringBuilder sb = new StringBuilder(10); sb.append("Runoob...."); System.out.println(sb); sb.append("!"); sb.insert(8,"java"); sb.delete(5,8); System.out.println(sb);

正則表達式函數 Matcher類
特殊點:
在 Java 中,\ 表示:我要插入一個正則表達式的反斜線,所以其后的字符具有特殊的意義。正常反斜杠表示:\\

String line = "This line is a test!"; String pattern = "(\\D*)(\\d+)(.*)";Pattern r = Pattern.compile(pattern); Match m = r.matcher(line); if(m.find()){System.out.println(m.group(0));System.out.println(m.group(1));System.out.println(m.group(2));}else {System.out.println("No match!");} /** ^ 開始位置* $ 結束位置* * 零次或多次匹配* + 一次或多次匹配* ? 零次或一次匹配* {n} 正好匹配n次* {n,} 至少匹配n次* {n,m} 至少n次,至多m次* (pattern) 匹配pattern并捕獲該匹配的子表達式* x|y 匹配x或者y* [xyz] 字符集,匹配集合中的任意一個字符* [a-z] 字符范圍* \d 數字字符 \D非數字字符* */

四 容器對象學習 - 1h

Hash map、字典、數組等等
Java -
C++ 導入模板庫
1、容器對象的種類和實現原理
2、遍歷
3、深淺復制
4、序列化和反序列化
5、查閱手冊,了解全部容器支持的函數并掌握常用容器操作函數

public static void main(String args[]) {//枚舉 一次獲得一個元素 很少使用Enumeration<String> days;Vector<String> dayNames = new Vector<String>();dayNames.add("Sunday");dayNames.add("Monday");dayNames.add("Tuesday");dayNames.add("Wednesday");days = dayNames.elements();while (days.hasMoreElements()) {System.out.println(days.nextElement());}//位集合測試BitSet bits1 = new BitSet(16);BitSet bits2 = new BitSet(16);for(int i=0;i<16;i++) {if((i%2) == 0) bits1.set(i);if((i%5) != 0) bits2.set(i);}System.out.println("bits1: "+bits1);System.out.println("bits2: "+bits2);//Vector類 動態數組和arraylist類似,但兩者不同//1.四種構造方法Vector v = new Vector(3,2);System.out.println("Initial Size:"+v.size());v.addElement(new Integer(1));v.addElement(new Integer(2));v.addElement(new Integer(3));System.out.println(v);System.out.println("Initial capacity:"+v.capacity());//棧stack 本質是vector 除此之外自己也定義了一些方法Stack st = new Stack();st.push(new Integer(1));st.push(new Integer(2));st.push(new Integer(3));st.push(new Integer(4));Integer x = (Integer) st.pop();System.out.println(x);x = (Integer) st.pop();System.out.println(x);x = (Integer) st.pop();System.out.println(x);x = (Integer) st.pop();System.out.println(x);//MAP接口 提供了鍵映射到值,可以通過鍵來獲取值Map m1 = new HashMap();m1.put("zhang",18);m1.put("gao", 22);m1.put("li",23);m1.put("han",31);System.out.println(m1.size());System.out.println(m1.get("gao"));System.out.println(m1.hashCode());System.out.println(m1.remove("gao"));System.out.println(m1.values()); // for(int i=0;i<m1.size();i++) { // System.out.println(m1.get(i)); // }//迭代器 通常情況下使用迭代器遍歷一個集合的元素//可以使用Iterator接口或者ListIterator接口List<String> list = new ArrayList<String>();//1.使用foreach遍歷listlist.add("hello");list.add("world");list.add("hahahah");for(String str:list) {System.out.println(str);}//2.把鏈表變為數組相關的內容進行遍歷String[] strArray = new String[list.size()];list.toArray(strArray);for(int i=0;i<strArray.length;i++) {System.out.println(strArray[i]);}//3.使用迭代器進行相關遍歷Iterator<String> ite = list.iterator();while(ite.hasNext())//判斷下一個元素之后有值{System.out.println(ite.next());}} 深淺復制 序列化和反序列化 transient關鍵字修飾的變量不能夠被序列化//首先實現一個employee類 public class Employee implements java.io.Serializable{public String name;public String address;public transient int SSN;//transient關鍵字 某個字段不被序列化public int number;public void mailCheck() {System.out.println("Mailing a check to "+name+" "+address);} } //實現序列化 public class SerializeDemo {public static void main(String[] args) {Employee e = new Employee();e.name = "a";e.address = "absn";e.SSN = 123454;e.number = 101;File file = new File("./employ.ser");try {if(!file.exists()) {file.createNewFile();}FileOutputStream fout = new FileOutputStream(file);ObjectOutputStream o = new ObjectOutputStream(fout);o.writeObject(e);o.close();fout.close();}catch(IOException i) {i.printStackTrace();}} }//反序列化 public class SerializeDemo2 {public static void main(String[] args) {Employee e = new Employee();String fileName = "./employ.ser";File file = new File(fileName);try {FileInputStream fin = new FileInputStream(file);ObjectInputStream o = new ObjectInputStream(fin);e = (Employee) o.readObject();System.out.println(e.name);System.out.println(e.address);System.out.println(e.SSN); // 未被序列化未保存,反序列化結果0System.out.println(e.number);o.close();fin.close();}catch(IOException | ClassNotFoundException i) {i.printStackTrace();}} }

五 實現抽象的方法、類、接口與函數的實現、使用 - 2h - coder

1、函數的定義與調用
2、參數使用與傳遞方式
3、類和對象的實現方式 - 封裝繼承多態
4、多繼承還是接口
5、常見的設計模式的實現,單例模式、代理模式(委托),觀察者模式

六 函數式編程的支持

1、高階函數對象
2、語法特性與編程習慣(如鏈式語法、閉包等)

七 依賴與項目管理工具與生態支持 - developer

java的maven、gradle

八 內置高級功能 - professional

并發模型、多線程,多進程,系統調用,磁盤管理,數據庫管理,網絡支持等特性
至少要會查看手冊

任務:
1、完成一個支持消息循環的交互程序
開始運行之后不結束 while循環之類的 通過輸入某個命令,再退出
rpg小程序 完成六步以上的劇情??
精細的控制 二進制位進行操作
交互應用程序 凱撒密碼對數據進行加密
加密前選擇位移的序號 在輸入一串字符串 回車后輸出加密字符串 放到文本 在解密程序 導入標準輸入流 輸入一個序號
破解 不知道加密序號 導入文本中數據 找到加密序號 找出加密前的 正確的字符串需要人為判斷 機器只是工具 人才知道要的是什么

public class HomeWork1 {public static void jiami() {Scanner scan = new Scanner(System.in);System.out.println("請輸入待編碼的數據(英文):");String data1 = scan.nextLine();System.out.println("請輸入位移位數:");int number = scan.nextInt();int i=0;char[] data_arr = data1.toCharArray();for(i=0;i<data_arr.length;i++) {if(data_arr[i]>='a' && data_arr[i]<='z') {data_arr[i]+=number;if(data_arr[i]>='z') {data_arr[i] -= 26;}}else if(data_arr[i]>='A' && data_arr[i]<='Z') {data_arr[i] += number;if(data_arr[i]>='Z') {data_arr[i] -= 26;}}}System.out.println();System.out.println("加密結果:");System.out.println(data_arr);}public static void jiemi() {Scanner scan = new Scanner(System.in);System.out.println("請輸入待解密的數據(英文):");String data1 = scan.nextLine();System.out.println("請輸入秘鑰:");int number = scan.nextInt();int i=0;char[] data_arr = data1.toCharArray();for(i=0;i<data_arr.length;i++) {if(data_arr[i]>='a' && data_arr[i]<='z') {data_arr[i]-=number;if(data_arr[i]<'a') {data_arr[i] += 26;}}else if(data_arr[i]>='A'&&data_arr[i]<='Z') {data_arr[i] -= number;if(data_arr[i]<'A') {data_arr[i] += 26;}}}System.out.println();System.out.println("解密結果:");System.out.println(data_arr);}public static char[] jie(char[] data_arr,int key) {int i=0;for(i=0;i<data_arr.length;i++) {if(data_arr[i]>='a' && data_arr[i]<='z') {data_arr[i]-=key;if(data_arr[i]<'a') {data_arr[i] += 26;}}else if(data_arr[i]>='A'&&data_arr[i]<='Z') {data_arr[i] -= key;if(data_arr[i]<'A') {data_arr[i] += 26;}}}return data_arr;}public static void pojie() {Scanner scan = new Scanner(System.in);System.out.println("請輸入待破解的數據(英文):");String data1 = scan.nextLine();char[] data2 = data1.toCharArray();for(int i=0;i<26;i++) {char[] temp = data2;temp = jie(temp,i);System.out.println("key #:"+i);System.out.println(temp);}}public static void main(String[] args) {while(true) {System.out.println("*****凱撒密碼******");Scanner scan = new Scanner(System.in);System.out.println("請輸入想要進行的功能:");System.out.println("***1.加密功能***");System.out.println("***2.解密功能***");System.out.println("***3.破解功能***");System.out.println("***0.退出***");int choose1 = scan.nextInt();switch(choose1) {case 0:return;case 1:jiami();break;case 2:jiemi();break;case 3:pojie();break;default:break;}}} }

九 文件讀取和寫入

1、文件類繼承關系

2、文件讀取
(2)按行讀取
使用BufferedReader中的readLine()方法。無參數,返回包含改行的內容字符串,不包含任何行終止符,如果已經到達流末尾,則返回null。

int position=0; String[] bufstring = new String[1024]; //打開帶讀取的文件 BufferedReader br = new BufferedReader(new FileReader("text.txt")); String line = null; while((line=br.readLine())!=null){bufstrig[position]=line;positon++; } br.close(); //關閉文件 for(int i;i<position;i++){System.out.println(bufstring[i]); }

(3)自動換行寫入
利用OutputStream中的Println()方法

int number = 1; OutputStream os = new FileOutputStream("output.txt"); PrintWriter pw = new PrintWriter(os); for(int i=0;i<10;i++){String s = ""+number;pw.println(s);//每輸入一個數據,自動換行//pw.println(s+",");//不會自動換行,必要時可自己添加分隔符number++; } pw.close(); os.close();

總結

以上是生活随笔為你收集整理的Forth Week :快速上手一门编程语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。