作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给我的任务是使用 java 直观地举例说明算法:我必须模拟堆结构。
预期的布局。
我面临的问题是如何确保代码区域中绘制的字符串不会离开可见区域,而与屏幕分辨率无关。我已经确保 JFrame 具有屏幕尺寸 - 任务栏尺寸。面板已最大化且 isResizing 属性为 false。
那么如何确保字符串不会离开可见区域呢?
我要绘制的代码:如果代码更长(Y 维度),那么重要的容器是 X 维度,这并不重要。
我尝试逐行打印它。
public class heap<T>
{
private ArrayList<T> h;
private int size;
private final Comparator<T> c;
public heap(Comparator<T> comparator)
{
h = new ArrayList<T>();
h.add(null);
size = 0;
this.c = comparator;
}
public T getMin()
{
return h.get(1);
}
public T popMin()
{
T tmp = getMin();
h.set(1, h.get(size));
size--;
sift(1);
return tmp;
}
public void insert(T key)
{
h.add(key);
percolate(++size);
}
public int getSize()
{
return this.size;
}
private int getLeftSon(int i)
{
return (i<<1<=size)? i<<1 : 0;
}
private int getRightSon(int i)
{
return ((i<<1)+1<=size)? (i<<1)+1 : 0;
}
private int getFather(int i)
{
return ((i>>1)!=0)? i>>1 : 0;
}
private void swap(int i, int j)
{
T tmp = h.get(i);
h.set(i, h.get(j));
h.set(j, tmp);
}
private void sift(int i)
{
int son;
do {
son = 0;
if (getLeftSon(i) != 0)
{
son = getLeftSon(i);
if (getRightSon(i) != 0 && c.compare(h.get(getRightSon(i)), h.get(getLeftSon(i))) > 0)
son = getRightSon(i);
if (c.compare(h.get(son), h.get(i)) <= 0)
son = 0;
}
if (son!=0) {
swap(i, son);
i = son;
}
} while (son!=0);
}
private void percolate(int i)
{
T key = h.get(i);
while ((i > 1) && (c.compare(key, h.get(getFather(i))) > 0))
{
h.set(i, h.get(getFather(i)));
i = getFather(i);
}
h.set(i, key);
}
}
最佳答案
您的代码区域相当窄,大约为 25 个字符,以等宽 12 点字体呈现。
这是查看字符串是否适合给定像素宽度的一种方法:
public boolean doesStringFit(int width, String s, Font font) {
FontRenderContext frc = new FontRenderContext(null, true, true);
Rectangle2D r2D = font.getStringBounds(s, frc);
int rWidth = (int) Math.round(r2D.getWidth());
int rX = (int) Math.round(r2D.getX());
return width >= (rWidth - rX);
}
关于java - 确保绘制(paint)的绳子不会离开可见区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004744/
我是一名优秀的程序员,十分优秀!