我试图使用线程打印出0到30之间的奇数,但我似乎无法获得Stringbuffer,我试图将我的数字存储到打印中。
public class THREAD extends Thread {
public void run()
{
for (int x=0; x<30; x++)
{
int y=-1;
int n= y+2;
}
StringBuffer numberslist = new StringBuffer(n);
System.out.println(numberslist);
}
public static void main(String args[])
{
(new THREAD()).start();
}
}
答案 0 :(得分:1)
如果这将编译(它不会因为int n
仅在循环中可见),您将使用{{创建长度为1 * 的空StringBuffer()
3}}打电话。然后你打印它。由于它是空的(你已经使用了append(...)
),它将打印一个空行。
如果您确实想要将整数的字符串表示形式添加到字符串缓冲区,则必须使用以下方法之一:
StringBuffer numbers = new StringBuffer(""+n);
// String.valueOf(n) calls Integer.toString(n)
StringBuffer numbers = new StringBuffer(Integer.toString(n));
(但这不是最好的主意,因为它以匹配的长度开头),或者使用追加变体:
StringBuffer numbers = new StringBuffer(); // default capacity
numbers.append(""+n);
numbers.append(Integer.toString(n));
(注意我也重命名了变量,因为缓冲区不是列表)。
打印奇数就好了(但是你也可以完全跳过缓冲区并打印):
StringBuffer numbers = new StringBuffer();
for (int i = 1; i < 30; i+=2) {
if (i>1) numbers.append(','); // or space?
numbers.append(Integer.toString(i));
}
System.out.println("odd numbers: " + numbers);
在所有示例中,您可以将StringBuffer
替换为更现代的StringBuilder
- 它不会改变输出但速度更快。但是,当您可以将结果流式传输时,最好不将结果存储在内存中:
System.out.print("odd numbers: "); // cursor stays on line
for (int i = 1; i < 30; i+=2) {
if (i>1) System.out.print(",");
System.out.print(Integer.toString(i));
}
System.out.println(); // next line
* 评论解释了为什么n = 1:你计算了n = -1 + 2;
的结果的30倍