主頁 > 後端開發 > 藍橋杯Java組基礎知識鞏固訓練

藍橋杯Java組基礎知識鞏固訓練

2021-04-10 10:26:22 後端開發

一、前言

4.18 藍橋杯省賽即將來臨,為了更好的掌握Java基礎知識的運用,在此做一下總結,若有不足之處,望大家指正批評,

真題地址

在這里插入圖片描述

二、知識總結

1.數值總結
基本介紹與使用

掌握資料型別的特點以及精度的使用控制,
關于精度問題(采用BigDecimal設定保留幾位小數,以及規則)的簡單總結,如下

package lq.base.structrure.base;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;

/**
 * @AUTHOR LYF
 * @DATE 2021/4/3
 * @VERSION 1.0
 * @DESC
 */
public class Decimal {

    public static void main(String[]args){
        // BigDecimal進行設定
        Float f1 = 9.334F,f2 = 9.335F;
        BigDecimal bigDecimal1 = new BigDecimal(f1);
        BigDecimal bigDecimal2 = new BigDecimal(f2);

       float f11 = bigDecimal1.setScale(2,BigDecimal.ROUND_HALF_DOWN).floatValue();// 四舍無入
       float f21 = bigDecimal2.setScale(2,BigDecimal.ROUND_HALF_DOWN).floatValue();// 四舍無入
         System.out.println(f11+";"+f21);

         // ceil往上取,floor直接舍去
       float f12 = bigDecimal1.setScale(2,BigDecimal.ROUND_CEILING).floatValue();//
       float f13 = bigDecimal1.setScale(2,BigDecimal.ROUND_FLOOR).floatValue();//

         System.out.println(f12+";"+f13);

        // 流中的Statics,獲取平均值,最大值,計數等

        IntSummaryStatistics iss = new IntSummaryStatistics();
        List<Integer> list  = new ArrayList<>();
        for(int i=0;i<10;i++){
            Random random = new
                    Random();
            list.add(random.nextInt(20));
        }
        iss = list.stream().mapToInt(Integer::intValue).summaryStatistics();// summary...總結為統計

        System.out.println(iss.getAverage()+";"+iss.getSum());

    }
}

2.日期基本使用總結

掌握Date,SimpleFormat格式化,Calendar的基本使用,明白怎么進行與字串的相互轉換,以及使用Calendar進行日期加減操作,


/**
 * @AUTHOR LYF
 * @DATE 2021/4/5
 * @VERSION 1.0
 * @DESC
 * 一、日期的基本使用
 * 1.Date
 * 2.Calender
 * 3.format(SimpleDateFormat、DateFormat、
 *
 *
 */
public class DateDemo {
    void test(){

        // 日期類,獲取當前時間
        Date date = new Date();
        System.out.println("date:"+date+";time:"+date.getTime());// Mon Apr 05 18:39:21 CST 2021 ;time:1617619161143
        // getTime()或1970至此 的毫秒數
        System.out.println("Year:"+date.getYear()+";month:"+date.getMonth()+";day"+date.getDay()+";date"+date.getDate());
        // Year:121;month:3;day1;date5  ,date才是日期?day 是代表星期幾
        // Year從1900開始算的
        date.setTime(2000);
        System.out.println("2000ms之后:"+date); //Thu Jan 01 08:00:02 CST 1970

        // 日期格式化 (按格式進行String和Date的物件相互轉換)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//按此進行格式化 MM 代表月,mm代表分
        // sdf.物件方法format
        sdf.format(date);//回傳String
        String str = sdf.format(date);

        System.out.println("格式化后:"+date.toString()+";"+str);

        // String => date
        try {
            Date tempD = sdf.parse(str);
            System.out.println("tempD:"+tempD+";"+sdf.format(tempD));
        }catch (Exception e){
            e.printStackTrace();
        }
        // Calender 更為完善復雜,方便進行日期的增減
        Calendar calendar = Calendar.getInstance();// 獲取當前時期
        System.out.println(calendar);
        // 創建指定日期
        calendar.set(2009,6-1,9);
        calendar.add(Calendar.DATE,1);
                System.out.println(calendar.toString()+";"+calendar.getTime());
        // 通過 calender 的 getTime 與Date建立聯系,Date又可以進行SimpleDateFormat格式化以及字串相互轉換
    }
    public static void main(String[]args){
        DateDemo dateDemo = new DateDemo();
        dateDemo.test();
    }
}

3.字串操作

掌握string的基本方法以及與數值型別相互轉換的靈活使用(比如進行判斷數的具有不含某些數字然后進行遍歷計數),掌握Regex的基本使用,方便進行查找匹配,比如說BobAlice那題就可使用該方法進行簡單化,

    1. 轉義字符 \n,\等,但在Java中需要\才能表示,\(就相當于( 進行匹配( \d匹配數字
      • 與 + 匹配0個或多個 1個與多個
    1. . 匹配一個
    1. ?匹配一個
    1. {n,m} 匹配n到m次數
  • 6.[abc] 包含字符集中的某個
    1. ^非
  • 基本字符: . ? [a-z] [^a-z] \( 轉義字符
  • 進行擴展: {n,m} * +
  • 參考:https://www.runoob.com/java/java-regular-expressions.html
    // 人物相關性分析
    void test8(){

        Scanner scanner = new Scanner(System.in);

                String str2 =scanner.nextLine();
        int k = Integer.valueOf(str2);
                String str = scanner.nextLine();

        // 法1直接使用find方法記錄位置

        // regex
        String regexAlice = "Alice";
        String regexBob = "Bob";

        Pattern pattern = Pattern.compile(regexAlice);
        Pattern pattern1 = Pattern.compile(regexBob);

        Matcher matcher = pattern.matcher(str);
        Matcher matcher1 = pattern1.matcher(str);


        List<Integer> listAlice = new ArrayList<>();
        List<Integer> listBob = new ArrayList<>();


        while(matcher.find()){
            listAlice.add(matcher.start()); //開始index
        }

        while(matcher1.find()){
            listBob.add(matcher1.start()); //開始index
//            System.out.print(matcher1.group()+"->");
        }

        int count=0;
        for(int i =0;i<listAlice.size();i++){

            // 尋找鄰近是否有Bob
            int index= listAlice.get(i);
            for(int j = 0;j<listBob.size();j++){
                if(Math.abs(listBob.get(j)-index)<=k){
                    count++;
                }
            }
        }
        System.out.println(count);

    }

其他數學問題GCD和LCM

 // 轉輾相除

    // 最大公約數
    int gcd(int a,int b){
        if(a%b==0)
            return b;
        else
            return gcd(b,a%b);
    }

    // 最小公倍數
    int lcm(int a,int b){
        return a*b/gcd(a,b);
    }


//素數,,逆置也可采用類似的模板
boolean getPrimer(int n){
        for(int i =2;i*i<=n;i++){
            if(n%i==0)
                return false;
        }

4.集合的簡單使用

5.簡單的演算法
全排列


    // 遞回辦法
    void permutation(int[]nums,int start){

        // 前面已經排好序,直接輸出
        if(start==nums.length-1){
            System.out.println(Arrays.toString(nums));
        }

        for(int i =start;i<nums.length;i++){
           swap(nums,start,i);// 將第一個與后面的依次交換
           permutation(nums,start+1);// 排列下一個
           swap(nums,start,i);// 交換回來
        }

    }

    void swap(int[] nums,int i,int j ){
        int temp = nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }

    // 字典排序

    public static  void main(String[]args){
        FullPermutation fp = new FullPermutation();
        int[] nums={1,2,3,4};
        fp.permutation(nums,0);

    }

BFS

package lq.base.structrure.graph;

import java.io.*;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Stack;

/**
 * @AUTHOR LYF
 * @DATE 2021/4/9
 * @VERSION 1.0
 * @DESC
 * 1.問題
 * 注意X,Y和 row、col的對應關系
 * 2.
 */

// 點資訊
class Point{
    int x,y;
    Point pro;// 前驅

    public Point(int x, int y, Point pro) {
        this.x = x;
        this.y = y;
        this.pro = pro;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Point getPro() {
        return pro;
    }

    public void setPro(Point pro) {
        this.pro = pro;
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +

                '}';
    }
}


public class BFS2 {
    //int n;
    static int[][] maze = new int[100][100];//new int[][]
    int tX[]={1,0,-1,0};
    int tY[]={0,-1,0,1};// 使用向量進行簡化方向判斷使用
    String[] steep={"R","U","L","D"};

    static {
        //FileInputStream fis = new FileInputStream("")
        try {
            InputStream ips = new FileInputStream("E:\\IdeaProjects\\java-base\\src\\lq\\base\\structrure\\graph\\maze.txt");
            InputStreamReader isr= new InputStreamReader(ips);
            BufferedReader br = new BufferedReader(isr);
            String temp = null;

            int row=0,col=0;
            while((temp=br.readLine())!=null){
                col= temp.length();
                for(int i = 0;i<col;i++){
                 maze[row][i]=Integer.valueOf(temp.substring(i,i+1));
                }
                row++;
            }

            System.out.println("棋盤:");
            for (int i = 0;i<row;i++){
                for(int j = 0;j<col;j++){
                    System.out.print(maze[i][j]+" ");
                }
                System.out.println();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    void bfs(){

        Queue<Point> queue = new ArrayDeque<>();// 也可以使用LinkedList

        queue.add(new Point(0,0,null));

        while (!queue.isEmpty()){

            Point cur = queue.poll();
            maze[cur.getY()][cur.getX()]=1;//訪問

            if(cur.getX()==5&&cur.getY()==3){// 訪問終點
                Stack<Point> stack = new Stack<>();

                while (cur.getPro()!=null){
                    stack.push(cur);
                    cur = cur.getPro();
                }

                System.out.println("可以訪問到,且最近路徑長度為:"+stack.size()+";軌跡為:");
                // 需要進行反向,也可以考慮遞回回退列印
                String direction = "";
                stack.push(new Point(0,0,null));//加入起點

                while (!stack.isEmpty()){

                    Point cur2 = stack.peek();
                    stack.pop();
                    System.out.print(cur2+"->");

                    if(stack.isEmpty()){
                        break;
                    }else{
                        Point next = stack.peek();//不要洗掉,因下次是起點

                        for(int i = 0;i<4;i++){
                            if(cur2.getX()+tX[i]==next.getX()&&cur2.getY()+tY[i]== next.getY()){
                                direction=direction+steep[i];
                                break;
                            }
                        }
                    }
                }

                System.out.println();
                System.out.println("轉向情況為:"+direction);
            }


            for(int i =0;i<4;i++){
               int x = cur.getX()+tX[i];
               int y = cur.getY()+tY[i];
               if(x>5||x<0||y<0||y>3)//排除邊界
                   continue;

               if(maze[y][x]==0)// x 列 y 行 注意對應關系
               queue.add(new Point(x,y,cur));

            }

        }

    }
    public static void main(String[]args){
        BFS2 bfs2 = new BFS2();
        bfs2.bfs();
    }


}

n皇后

static int n=3;
    // 棋盤
    static boolean [][] plain = new boolean[n][n];

    static {
        for(int i =0 ;i<n;i++){
            for(int j = 0 ;j<n;j++){
                plain[i][j]=false;
            }
        }
    }

    // 若只判斷行,則是排列數排列
    boolean judge(int row,int col){//
        // 判斷列
        for(int i =0;i<row;i++){
            if(plain[i][col]==true){
                return false;
            }
        }

        // 判斷斜方向
        return true;
    }

    void queen(int i){//,int j 下在第i+1行

        if(i>=n){
            for(int k=0;k<n;k++){
                for(int l=0;l<n;l++){
                    //System.out.print(plain[k][l]+" ");
                    if(plain[k][l]) //輸出選擇的數,
                        System.out.print(l);
                }
//                System.out.println();
            }
            System.out.println();
        }else{
            for(int k=0;k<n;k++){
                plain[i][k]= true;
                if(judge(i,k)){
                    queen(i+1);
                }
                plain[i][k]=false;//回退!!
            }
        }
    }
    public static void main(String[]args){
        EightQueen eightQueen = new EightQueen();
        eightQueen.queen(0);
    }

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274391.html

標籤:java

上一篇:【詳細+超基礎】Java-學習筆記 00

下一篇:實作ApplicationContextAware介面后呼叫時候報空指標NullPointerException例外

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more