这个程序的主要思想是随机生成一个字符(140个字符)的某些字符a-z +'。' +',' +';' +':'等等......
问题是,当我生成并将每个字符添加到列表时,一切看起来都很好(我添加了一行来检查添加了哪个字符)。但是每当我打印结果时,大部分时间我都会得到null + 140其他字符。这是代码:
import java.util.Scanner;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Random;
public class P1{
String tweet;
List<Character> caracteres;
Random rand;
char nextChar;
int number;
public P1(){
caracteres = new ArrayList<Character>();
rand= new Random();
for(int i=97; i<=122; i++){
nextChar = new Character((char)i);
caracteres.add(nextChar);
}
caracteres.add(new Character((char)58));
//System.out.println("Added" + new Character((char)58));
caracteres.add(new Character((char)59));
//System.out.println("Added" + new Character((char)59));
caracteres.add(new Character((char)32));
//System.out.println("Added" + new Character((char)32));
caracteres.add(new Character((char)13));
//System.out.println("Added" + new Character((char)13));
caracteres.add(new Character((char)63));
//System.out.println("Added" + new Character((char)63));
caracteres.add(new Character((char)33));
//System.out.println("Added" + new Character((char)33));
caracteres.add(new Character((char)46));
//System.out.println("Added" + new Character((char)46));
caracteres.add(new Character((char)44));
//System.out.println("Added" + new Character((char)44));
}
public String generaTweet(){
for(int i=0; i<140; i++){
number = Math.abs((rand.nextInt())%34);
if(number == 13){
tweet+= '\n';
}
else{
tweet+= caracteres.get(number);
}
System.out.println(i + ". " + caracteres.get(number)); //added char
}
return tweet;
}
public static void main(String [] args){
P1 ejer = new P1();
System.out.println(ejer.generaTweet());
}
}
答案 0 :(得分:3)
这是因为你永远不会初始化字段tweet
。你的构造函数应该是这样的:
public P1(){
tweet = "";
//....
}
答案 1 :(得分:2)
String tweet;
是一个字段,因为它没有显式初始化,所以它将保持其默认值,对于像Strings这样的对象是null
。现在当你打电话
tweet += someString
你最终得到了
tweet = tweet + someString;
并且从开始时tweet
开始null
null + someString
要解决此问题,您可以使用空白字符串
初始化tweet
String tweet = "";
你应该避免在循环中连接字符串。更好的解决方案是使用StringBuilder
代替append
新的文本块。
还要避免magic numbers。而不是神秘的
for(int i=97; i<=122; i++){
nextChar = new Character((char)i);
caracteres.add(nextChar);
}
你可以写
for (char ch = 'a'; ch<='z'; ch++) {
caracteres.add(ch);
}
更清楚(您也不需要显式创建Character
类的实例,因为Java会自动为您char
添加Character
。
答案 2 :(得分:0)
该行
String tweet;
应该是
String tweet = "";
tweet
以null
开头,因此第一次添加字符时,并置运算符+
使用String
"null"
tweet