问题
我有一个C#窗口,上面有一些文本字段和按钮.它开始类似于:

当用户单击"+添加机器功能"按钮时,我需要创建一个新的控件行并将按钮移动到以下位置:

如果用户单击"+ Add Scale Unit",程序需要在右侧添加一些控件:

尝试解决方案
我已经尝试过使用Windows Forms的TableLayoutPanel但它似乎处理调整自身大小以适应奇怪的方式来控制其他控件,例如,它会使一行控件比其他控件宽得多,并且会使某些行如此短,从而切断部分我的控件.
我还尝试通过简单地计算它们的相对位置来简单地将控件放入表单中.但是我觉得这是糟糕的编程习惯,因为它使得表单的布局在以后相对难以改变.在用户通过按下它旁边的"X"来删除行或标度单位的情况下,该方法还要求程序找到该单元下面的每个元素并单独向上移动,这非常低效.
我的问题是:如何通过Windows Forms布局或WPF或其他方式创建动态增长/缩小的应用程序?
Java的Arrays.copyOfRange(array,startIndex,endIndex)函数的big-O运行时是什么?
例如,就空间和时间复杂度而言,使用copyOfRange在数组函数上编写简单的二进制搜索而不是传递起始索引和结束索引是否等效或效率较低?
我有一个处理M×N矩阵的简单程序.完成处理后,我想将矩阵打印到标准输出.我知道我可以编写一些方法,例如static [void/String] matrixPrint(int [] [] myMatrix)来打印矩阵或返回它的String表示.
但是我认为更优雅的解决方案是覆盖Arrays类中的toString()方法.这样我就可以调用System.out.println(myMatrix),这在我看来比上面的任何一个都更清晰优雅.
是否有一种简单的方法可以在不创建扩展数组的另一个类的情况下执行此操作 或者还有其他方法可以优雅地从Java的内置类中打印出对象吗?
我正在尝试实现一个简单的二进制堆类,用户可以在其中选择是否需要最小或最大堆.
我制作了超级抽象:
abstract class Heap
{
size() { ... }
peek() { ... }
}
Run Code Online (Sandbox Code Playgroud)
main方法选择实例化maxHeap或minHeap子类.
public static void main(String[] args)
{
Heap myHeap = new minHeap();
if ( /* some condition */ )
myHeap = new maxHeap();
}
myHeap.insert(/* some value */);
Run Code Online (Sandbox Code Playgroud)
insert函数在min和max堆类中的实现方式不同:
class minHeap extends Heap
{
public void insert() { ... }
}
class maxHeap extends Heap
{
public void insert() { ... }
}
Run Code Online (Sandbox Code Playgroud)
当然,从main调用insert()会引发错误,因为Heap类中没有这样的方法.在非常相似的最小和最大堆实现之间以编程方式进行选择的最佳方法是什么?