一点小题目

本文通过多个Java编程题目,探讨了类的继承、线程状态转换、构造函数特性、静态变量初始化、对象引用及内部类访问机制等问题,加深了对Java语言特性的理解。
1. 
class Base {}

class Agg extends Base{
public String getFields(){
String name =  "Agg";
return name;
}
}

public class Avf{

public static void main(String argv[]){
       Base a = new Agg();
//Here
}
}
What code placed after the comment //Here will result in calling the getFields method resulting in the output of the string "Agg"?

1) System.out.println(a.getFields());
2) System.out.println(a.name);
3) System.out.println((Base) a.getFields());
4) System.out.println( ((Agg) a).getFields());

a1的引用类型为base,而不是agg,所以其中不会有getfields方法,改成Agg a =new Agg()编译才会正确
answer 2:variable name not found..
answer 3:the reason  is the same as answer1
answer 4:correct
 

2thread has four states:
ready, running, non-runnable(sleeping, waiting,Blocked),dead
The relationship is shown as following
ready   <-> running
running -> dead, non-runnable
non-runnable -> ready

3.What happens when you try to compile and run the following program?

class Mystery {
 String s;
 public static void main(String[] args) {
   Mystery m = new Mystery();
   m.go();
 }

 void Mystery() {
   s = "constructor";
 }
 
 void go() {
   System.out.println(s);
 }
}

Select the one right answer.

this code runs and writes "null" in the standard output

 

构造函数没有返回值,即在构造函数前面不要写任何东西,void也不能写(除了可以写public).
如果写了void或者其他返回类型,比如此例中的
void Mystery();//这时,这个函数已经不是构造函数了,而且一个普通的函数,尽管与类和构造函数同名,但是他已经是一个普通的函数了,返回类型是void.

也就是说在此例中,其实是没有显示的写出构造函数。所以s当然为空。
4. 
class A {
  static int si=5;
  static { System.out.println(si);}
  A(){ si++;}
  public static void main(String args[]) {
         for (int i=0;i<3;i++)
              new A();
       }
  }
 
参考答案:print out "5" once
当类加载的时候首先是初始化static类变量和执行static类方法,只有这一次机会。此时也许还没有一个类实例。以后所有对象都共享static变量。对static类变量的修改会影响到
所有的类实例。
class Z {
       public static void main(String args[]) {
              System.out.println("AAA"+new Z());
       }
       public String toString() {
              System.out.println("###");
              return "Z";
       }
  }
 
参考答案:"###" followed by "AAAZ"
要打印"AAA"+new Z(),就要先把他翻译成字符串,要想翻译成字符串就要先执行z.toString(),所以先遇到了打印“###”,于是打印了出来,然后z.toString()执行完毕,然后开始执行打印"AAA"+"z",顺序是这样的。
6. 
1. public class Test {
2. private int i = j;
3. private int j = 10;
4.
5. public static void main(String args[]) {
6. System.out.println((new Test()).i);
7. }
8. }

[Select one correct answer]
a. Compiler error complaining about access restriction of private variables of Test.
b. Compiler error complaining about forward referencing.
c. No error - The output is 0;
d. No error - The output is 10;
答案是: b
JAVA中类的编译顺序是只要建立了对象实例,即NEW,就会先初始化变量,在调用CONSTRUCTOR,而变量的初始化是必须按顺序的,所以,第一题选B
What is the output of the following program

1. public class Test {
2. private int i = giveMeJ();
3. private int j = 10;
4.
5. private int giveMeJ() {
6. return j;
7. }
8.
9. public static void main(String args[]) {
10. System.out.println((new Test()).i);
11. }
12. }

Select one correct answer
a. Compiler error complaining about access restriction of private variables of AQuestion.
b. Compiler error complaining about forward referencing.
c. No Compilation error - The output is 0;
d. No Compilation error - The output is 10;
答案是: c。生成test类,首先为i,j分配空间并初始化为0,然后执行i=giveMeJ(),这时j还是0,所以i的结果为0;然后执行j=10。所以最后输出为0。
float f=4.2F;
Float g=new Float(4.2F);
Double d=new Double(4.2);
Which are true?
A. f==g  
B. g==g  
C. d==f  
D. d.equals(f) 
E d.equals(g) 
F. g.equals(4.2);
 
Answer: B
==两边类型不同不相等。所以AC不等。equals只能用于引用类型,不能用于基本类型,所以D不对,而且两边类型不兼容的话,即使对象的内容一样,也不相等,所以EF不对。9
9
 
1)public class Test{
2) public static void add3(Integer i){
3)       int val=i.intValue();
4)       val+=3;
5)       i=new Integer(val);
6) }
7) public static void main(String args[]){
8)      Integer i=new Integer(0);
9)      add3(i);
10)      System.out.println(i.intValue());
11) }
12)}
 what is the result?
 A. compile fail      
 B.print out "0"     
 C.print out "3"  
 D.compile succeded but exception at line 3
 
Answer: b
在第五行里,程序又操作了New,重新分配了内存空间。所以此i非彼i啦。
10
 
1)class EnclosingOne{
2)public class InsideOne{}
3) }
4)public class InnerTest{
5) public static void main(String args[]){
6) EnclosingOne eo=new EnclosingOne();
7) //insert code here
8) }
9)}
A.InsideOne ei=eo.new InsideOne();
B.eo.InsideOne ei=eo.new InsideOne();
C.InsideOne ei=EnclosingOne.new InsideOne();
D.InsideOne ei=eo.new InsideOne();
E.EnclosingOne.InsideOne ei=eo.new InsideOne();
 
Answer: e
这里边的一些形式是固定的。
1)静态方法访问非静态内类:
                     方法为:
       Outer myouter=new Outer();//这里的myouter是创建的外部类的对象。
       Outer.Inner myinner=myouter.new Inner();//myinner是内类的对象。
       然后再myinner.showName();//showName()是外类中的非静态方法。
2)非静态方法访问非静态内类
                     直接创建该内部类的对象:new Inner().showName();
3)静态方法访问静态内类:
                     也是直接创建该内部类的对象,即Inner myinner = new Inner(),或者Outer.Inner myinner = new Outer.Inner()也行得通哦。
<think> 嗯,用户之前询问的是关于SLAM的本科毕设方案,但我现在注意到他们想要更简单的替代方案。用户明确提到“比SLAM更简单”,这说明之前的建议可能超出了他们的技术能力或时间预算。 用户应该是计算机相关专业的本科生,毕业设计周期可能只有几个月。SLAM涉及复杂的数学理论和实时计算,确实需要较强的编程基础和硬件资源。更合适的题目应该满足:算法复杂度低、依赖库少、调试简单、可视化直观这几个特点。 我回忆了带本科生做毕设的经验,想到几个方向:首先是经典算法实现类,像分形生成或排序算法可视化,这类题目数学基础要求不高;然后是轻量级计算机视觉,比如二维码识别,用OpenCV就能搞定;再就是机器人控制中的基础问题,比如避障算法在仿真环境就能验证。 用户可能更关心实现难度和展示效果。像分形树这种题目,代码不到100行但能生成炫酷的图像,很适合答辩演示;而路径规划类题目可以用动画展示过程,也很直观。硬件方面建议完全避开,用Python+Matplotlib这类工具链能省去大量环境配置时间。 考虑到用户已经接触过SLAM概念,或许对几何算法仍感兴趣。凸包计算就是个好选择,既有计算几何的理论深度,实现又简单,还能用动态可视化展示算法步骤。 最后需要提醒数据集的选择——仿真数据或标准数据集能避免数据采集的麻烦。TurtleBot的Gazebo模型这类资源可以直接拿来用,学生只需要关注核心算法。 </think>以下是专为本科生设计的**更简单、易实现且具展示性**的毕业题目方案,按难度递增排列: --- ### 一、基础图形处理(2周内可完成) 1. **分形树生成系统** - **核心**:递归算法实现自然分形 - **工具**:Python + Matplotlib - **公式**: $$ \begin{cases} x_{n+1} = x_n + l \cdot \cos(\theta) \\ y_{n+1} = y_n + l \cdot \sin(\theta) \end{cases} $$ ```python # 递归生成分形树枝 def draw_branch(x, y, angle, length): if length < 5: return x_end = x + length * cos(radians(angle)) y_end = y + length * sin(radians(angle)) plt.plot([x, x_end], [y, y_end]) draw_branch(x_end, y_end, angle-20, length*0.7) # 左分支 draw_branch(x_end, y_end, angle+20, length*0.7) # 右分支 ``` 2. **实时颜色追踪** - **任务**:用OpenCV检测摄像头中特定颜色的物体并框选 - **关键技术**:HSV色彩空间阈值分割 ```python hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, (30,50,50), (85,255,255)) # 检测绿色 contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` --- ### 二、机器人控制基础(3-4周) 1. **迷宫避障仿真** - **平台**:ROS + TurtleBot3(Gazebo仿真) - **算法**:超声波测距+右墙跟随法 - **效果**:机器人自主走出随机迷宫[^1] ```mermaid graph LR A[启动] --> B{前方有障碍?} B -->|是| C[右转90°] B -->|否| D[直行] C --> E{右侧有墙?} E -->|是| D E -->|否| F[右移并直行] ``` 2. **机械臂轨迹规划** - **工具**:PyBullet物理引擎 - **任务**:控制六轴机械臂绘制指定图案(如圆形) - **核心计算**:逆运动学求解 $$ \theta = \text{IK}(x,y,z) $$ --- ### 三、轻量级计算机视觉(4-5周) 1. **二维码增强现实** - **流程**: ``` 摄像头识别QR码 → 解算位置姿态 → 在二维码上方叠加3D模型 ``` - **库**:OpenCV + OpenGL ```python ret, corners = cv2.aruco.detectMarkers(image, aruco_dict) rvec, tvec, _ = cv2.aruco.estimatePoseSingleMarkers(corners, 0.05, camera_matrix, dist_coeffs) ``` 2. **文档矫正系统** - **输入**:倾斜拍摄的文档照片 - **输出**:校正后的正面视图 - **关键步骤**: 1. Canny边缘检测 2. Hough变换找直线 3. 透视变换矩阵计算 --- ### 四、实用工具开发(5-6周) 1. **简易室内定位系统** - **原理**:基于WiFi信号强度(RSSI)指纹匹配 - **数据库**:预先采集位置信号强度 - **定位**:k-NN算法找最近邻 $$ \hat{p} = \arg\min_p \sum_{i=1}^k |RSSI_{db} - RSSI_p| $$ 2. **手写公式识别** - **流程**: ``` 手机拍摄 → 数字分割 → CNN识别 → LaTeX输出 ``` - **模型**:LeNet-5 + MNIST数据集扩展 --- ### 五、选题对比指南 | 类型 | 所需基础 | 硬件需求 | 展示效果 | |------------------|--------------------|----------------|----------| | 分形生成 | 编程入门 | 无 | ⭐⭐⭐⭐ | | 颜色追踪 | OpenCV基础 | 摄像头 | ⭐⭐⭐ | | 迷宫避障仿真 | Linux基础 | 无(仿真) | ⭐⭐⭐⭐ | | 二维码AR | 线性代数 | 普通PC | ⭐⭐⭐⭐⭐ | | WiFi定位 | 数据处理 | 手机+路由器 | ⭐⭐ | | 手写公式识别 | 机器学习入门 | 无 | ⭐⭐⭐⭐ | > **推荐路径**:优先选择**分形生成**或**颜色追踪**确保完成度,有余力可尝试**二维码AR**,效果惊艳且技术栈实用。 [^1]: TurtleBot3官方提供完整的Gazebo迷宫仿真环境:https://emanual.robotis.com/docs/en/platform/turtlebot3/machine_learning/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值