编程题目:
20.假定屏幕的像素宽度为screenWidth,写一个函数计算一个字符串需要分成几行显示。
要求:
(1)每行应尽可能多地显示字符,但不能有字符部分或完全显示在屏幕外。超过部分的字符换下一行显示。
(2)每个字符的像素宽度不一样,每个字符的像素宽度不一样。用int getCharWidth(char c)获得每个字符的像素宽度。
示例代码:
package program.string.exercise20;
import java.awt.Font;
import java.awt.FontMetrics;
import javax.swing.JComponent;
import javax.swing.JLabel;
/**
* 20. 假定屏幕的像素宽度为screenWidth,写一个函数计算一个字符串需要分成几行显示。
* 要求:
* (1)每行应尽可能多地显示字符,但不能有字符部分或完全显示在屏幕外。超过部分的字符换下一行显示。
* (2)每个字符的像素宽度不一样。用int getCharWidth(char c)获得每个字符的像素宽度。
*
*/
public class EnterNum {
public static void main(String[] args) {
String str = "asdfg";
int screenWidth = 10;
System.out.println(enterNum(str,screenWidth));
}
private static int enterNum(String str, int screenWidth) {
int length = 0;
int enter = 0;
for(int i=0;i<str.length();i++) {
int charWidth = getCharWidth(str.charAt(i));
length += charWidth;
if (length > screenWidth) {
enter++;
length = charWidth;
}
}
if (length > 0) {
enter++;
}
return enter;
}
private static int getCharWidth(char c) {
Font f = new Font("Arial",Font.PLAIN,12);
JComponent j = new JLabel();
FontMetrics fm = j.getFontMetrics(f);
int width = fm.charWidth(c);
fm.getHeight();
return width;
}
}
结果显示:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/3486bedfb1b4b825dbe7d3aa898e302f.png)