无人机任务
无人机任务场景Scenario: A drone is mounted with an internal GPS system and a 1D spinning LIDAR (something like this http://www.slamtec.com/en/lidar/a1). Every time the drone changes direction, the LIDAR does 1 full scan (sweep) of its surroundings. Our goal is to use the LIDAR data to improve the drone’s navigation. For this assignment altitude and drone orientation can be ignored. You can also assume that the scan is so fast that you can treat the drone as stationary for each sweep. One flight’s worth of data is provided consisting of $N$ sweeps over $x$ seconds. 场景:一架无人机配备了内部GPS系统和一个一维旋转LIDAR(类似于这个:http://www.slamtec.com/en/lidar/a1 )。每当无人机改变方向时,LIDAR都会对其周围环境进行一次完整的扫描(扫描一圈)。我们的目标是利用LIDAR数据来改进无人机的导航。在本次任务中,可以忽略无人机的高度和方向。此外,可以假设扫描速度足够快,以至于在每次扫描期间可以将无人机视为静止的。提供了一次飞行的数据,其中包含N次扫描,持续x秒。 任务Tasks: For this assessment complete any 2 of the following Tasks. It is recommended that you pick 2 Tasks that assist each other. Any language may be used however Java, C#, C++ or Python are preferred. You...
GUI编程
Java GUI编程是通过使用Java的图形用户界面(GUI)工具包来实现桌面应用程序的界面设计。
Java基础笔记10(异常)
Java基础笔记10(异常)异常分类 检查性异常 运行时异常 错误 异常体系结构 Java把异常当做对象处理,并定义一个基类java.lang.Throwable作为所有异常的超类 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error、异常Exception Error Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。 Java虚拟机运行错误(Virtul Machine Error),当JVM不再有继续执行操作所需要的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。 虚拟机试图执行应用时,出现类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。 Exception 在Exception分支中有一个重要的子类RuntimeException(运行时异常) ArrayIndexOutOfBoundsException(数组下标越界) NullPointerException(空指针异常) ArithmeticException(算数异常) MissingResourceException(丢失资源) ClassNotFoundException(找不到类) 这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理 这些异常一般是由程序逻辑错误引起 Error和Exception的区别:Error是致命的错误,是程序无法控制和处理的,Java虚拟机一般会选择终止线程;Exception通常情况下是可以被程序处理的。 异常处理机制 抛出异常 123456public void test(int a, int b) { if (b == 0) { throw new ArithmeticException();//主动抛出异常,一般在方法中使用 } System.out.println(a/b);} 123public void test(int a, int b) throws...
Java基础笔记9(类与对象)
Java基础笔记9(类与对象)面向对象 面向对象编程(Object-Oriented Programing,OOP) 面向对象编程的本质:以类的方式组织代码,以对象的形式组织(封装)数据 三大特性 封装 继承 多态 对象是具体的事物,类是对对象的抽象 从代码运行的角度,先有类再有对象,类是对象的模板 类 属性: 又叫字段(Field)或成员变量 默认初始化 数字:0、0.0 char:u0000 boolean:false 引用:null 修饰符 属性类型 属性名 = 属性值 方法 修饰符 返回类型 方法名(){ 方法体 } 123456789101112131415161718public class 类名 { //属性 //方法}//学生类(Student类)public class Student { private String name;//属性 public String getName() { return name; }//方法 public void setName() { //方法 this.name = name; }} 对象 对象的创建和使用 使用new关键字创建对象 Student stu = new Student(); 对象的属性stu.name; 前提属性name不是私有的 对象的方法stu.getName(); 12345678910//类实例化后会返回一个自己的对象//zhangsan、lisi就是Student类的具体实例Student zhangsan = new Student();Student lisi = new...
Java基础笔记8(数组)
Java基础笔记8(数组)定义 数组是相同类型的数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 每一个数据称作一个数组元素,每个数组元素可以通过下标来访问 声明 必须声明数组变量,才能在程序中使用数组。 123dataType[] nums1; //推荐写法或dataType nums2[]; Java语言中使用new来创建数组 1234dataType[] nums = new dataType[arraySize];或dataType[] nums = new dataType[]{element1,element2,element3};(dataType[] nums = {element1,element2,element3};) 数组赋值 123nums[0] = 0;nums[1] = 23;nums[5] = 6; 数组特点 长度确定,数组一旦被创建,其大小就不可改变 元素可以使任意相同数据类型,包括基本类型和引用类型 数组变量属于引用类型,数组也可以看成是对象,数组中每个元素相当于该对象的成员变量。 数组本身就是对象,Java对象保存在堆中,因此数组无论是保存原始类型还是其他数据类型,数组对象本身是在堆中的 Java内存 堆 存放new的对象和数组 可以被所有的线程共享,不会存放别的对象引用 栈 存放基本数据类型(包含这个基本类型的具体数值) 引用对象的变量(存放这个引用在堆里的具体地址) 方法区 可以被所有线程共享 包含所有的class和static变量 三种初始化状态12345678910//静态初始化int[] a = {1,2,3};//动态初始化int[] a = new int[3];a[0] = 1;a[1] = 2;a[2] = 3;//默认初始化//数组是引用类型,它的元素相当于类的示例变量//因此数组一经分配空间,其中每个元素也被按照实例变量同样的方式被隐式初始化 数组边界合法下标区间 [0,length-1] ,如果越界就会报错:ArrayIndexOutOfBoundsException(数组下标越界异常) 数组使用for each循环123456789int[] arrays =...
Java基础笔记7(方法)
Java基础笔记7(方法)方法定义 方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法是一段用来完成特定功能的代码片段 方法包含一个方法头和一个方法体 修饰符:可选,告诉编译器如何调用该方法。定义了该方法的访问类型 返回值类型:方法返回值的数据类型 方法名:方法的名称,方法名和参数表共同构成方法签名 参数类型:方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含参数 形式参数:在方法被调用时用于接收外界输入数据 实参:调用方法时实际传给方法的数据 方法体:方法体包含具体的语句,定义该方法的功能 123456修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值;} 方法调用 调用方法:对象名.方法名(实参列表) 方法返回一个值时,方法调用常被当做一个值,如 1double num = Math.pow(2, 3);//8.0 方法返回值是void时,方法调用直接作为一条语句,如 1System.out.println(); 值传递和引用传递 值传递:在调用函数时将实际参数复制一份副本传递到函数中,在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递:在调用函数时将实际参数的地址传递到函数中,实参和形参在内存上指向了同一块区域,在函数中对参数所进行的修改,将影响到实际参数。 Java是值传递123456789101112131415161718192021//例一public class test { public static void main(String[] args) { int s = 10; change(s); System.out.println("实参s:" + s); } public static void change(int x) { x++; System.out.println("形参x:" +...
Java基础笔记6(Scanner、程序结构)
Java基础笔记6(Scanner、程序结构)Scanner对象 java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入 基本语法 1Scanner scan = new Scanner(System.in); 通过Scanner类的next()与nextLine()方法获取输入的字符串 12String s1 = scanner.next(); //输入:hello worldSystem.out.println(s1); //输出:hello 12String s2 = scanner.nextLine(); //输入:hello worldSystem.out.println(s1); //输出:hello world next 读取到有效字符后才可以结束输入 对输入的有效字符之前遇到的空白,next()方法会将其自动过滤掉 只有输入有效字符后才将后面输入的空白作为分隔符或结束符 next()不能得到带有空格的字符串 nextLine() 以Enter为结束符,nextLine()方法返回输入回车之前的所有字符 可以获得带空格的字符串 在读取前一般使用hasNext()与hasNextLine()判断是否还有输入的数据 12345while(scanner.hasNextInt()){ System.out.print(scanner.nextInt()+" ");}//输入:1 2 3 4 5 a b 6 c//输出:1 2 3 4 5 属于IO流的类不关闭会一直占用资源,用完就关掉 1scan.close(); 顺序结构语句与语句之间从上到下顺序执行 选择结构if单选择结构123if(条件){ 语句} if-else双选择结构12345if(条件){ 语句1}else{ 语句2} if多选择结构123456789if(条件1){ 语句1}else if(条件2){ 语句2}else if(条件3){ 语句3}else{ ...
动态规划问题
动态规划力扣62题 不同路径问题一个机器人位于一个 m x n 网格的左上角。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 问总共有多少条不同的路径? 力扣链接:https://leetcode-cn.com/problems/unique-paths 示例1234567输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 -> 向右 题解12345678910111213141516171819class Solution { public int uniquePaths(int m, int n) { //使用二维数组保存到当前位置的最大路径数 int[][] dp = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i == 0 || j == 0) { //因为每次只能向下或向右移动,因此i==0或j==0时表示一直向右移动或一直向左移动,因此最大路径数都是1 dp[i][j] = 1; } else { //只可能从(i-1,j)或(i,j-1)位置通过向下移动或向右移动到达当前(i,j)位置,所以到(i,j)的最大路径数等于前两个位置的最大路径数之和 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } } } ...
Java基础笔记5(包、JavaDoc)
Java基础笔记5(包、JavaDoc)包 一般使用公司域名倒置作为包名,如 com.baidu.www com.baidu.baike com.baidu.blog 包中的类要在类前面加上package 包名,如 1package com.baudu.www //注:要放在代码最上面 导入其他包中的类时使用import,如 1import java.util.* //*表示导入该包下所有的类 JavaDoc javadoc命令用来生成自己的API文档 参数 @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @return 返回值 @throws 抛出异常情况 如下: 1234567891011121314151617181920package com.hollowshadow;/** * @author Haunt * @version 1.0 * @since 1.8 */public class Student { String name; /** * @author Haunt * @param s * @return void * @throws Exception */ public void setName(String s) throws Exception { this.name = s; }} 12打开命令行,执行javadoc命令javadoc -encoding UTF-8 -charset UTF-8 Student.java 打开类所在目录,发现自动生成html等文件,打开index.html,即javadoc生成的API文档 IDEA中使用JavaDoc 菜单 Tools -> Generate JavaDoc 进行配置 Generate JavaDoc scope:使用JavaDoc生成文档的范围 Output directory:生成的文档所在的目录 Locale:语言版本,默认英文或者是当前操作系统语言,zh_CN中文 Other command line...
Java基础笔记4(变量常量、命名规范、运算符)
Java基础笔记4(变量常量、命名规范、运算符)变量作用域 类变量(静态变量) 在方法外 从属类 无需初始化,有默认值 实例变量(对象变量) 在方法外 从属对象 无需初始化,有默认值 局部变量 在方法内 只在方法内有效 必须声明和初始化 12345678public class Test{ static int a = 0; //类变量 int b = 0; //实例变量 public void method(){ int c = 0; //局部变量 }} 类变量和实例变量的区别类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果。 实例变量属对象私有,某一个对象将其值改变,不影响其他对象。 常量初始化后不能改变值 常量一般用大写字符 1final double PI = 3.14; 命名规范 变量、方法、类名:见名知意 类成员变量:小驼峰(lastName) 局部变量:小驼峰 常量:大写(MAX_VALUE) 类名:大驼峰 方法名:小驼峰 运算符 算术运算符:+,-,*,/,%,++,— 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof(测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。) 逻辑运算符:&&,||,! 位运算符:&,|,^,~,>>,<<,>>> 条件运算符:? : 扩展赋值运算符:+=,-=,*=,/= 12345678910long a = 2333333333333L;int b = 2333;short c = 233;byte d = 23;System.out.println(a+b+c+d); //longSystem.out.println(b+c+d); //intSystem.out.println(c+d); //int //自动升为混合运算类型中最高类型//整数类型操作中,操作数中有long,结果也为long,操作数中没有long时,结果为int 123byte b = 3;b = b +...