java - 无法获取要打印的 Stringbuffer

标签 java multithreading

我正在尝试使用线程打印出 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/

相关文章:

javax.mail.MessagingException : Could not convert socket to TLS exception in JAVA

java - java servlet 中的spymemcached - 我应该使用单例吗?

python - pygame中的异步图像加载

multithreading - 计算 900,000 个字符串之间的 Dice 系数的有效方法是什么?

java - 你如何检查哪个线程正在执行 Java 中的代码?

C# 并行库、XmlReader、XmlWriter

java - 获取 JTextComponent 的 HTMLDocument 中的当前偏移量

javascript - 如何将在 javascript 中创建的数组传递给另一个 jsp,然后在该 jsp 的 java 函数中使用该数组?

java - 如果我实现了比较器,为什么会出现类转换异常?

java Thread.join 未按预期工作