我正在尝试使用线程打印出 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();
}
}
最佳答案
如果这可以编译(它不能编译,因为 int n
仅在循环内可见),您将创建一个长度为 1 的空 StringBuffer()
* 与 new StringBuffer(int capacity)
称呼。然后你打印它。由于它是空的(您没有在其上使用任何 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);
在所有示例中,您都可以用更现代的 StringBuilder
替换 StringBuffer
- 它不会改变输出,但速度更快。然而,当您可以将结果流式输出时,最好不要将结果存储在内存中:
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 倍
关于java - 无法获取要打印的 Stringbuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989834/