我正在制作一个从a到b的转换器。这是说我有一个nullpointerexception。我不知道如何解决它。我知道这可能与arraylist的界限有关,但我不确定。我是java的新手,所以请不要让答案太复杂。我知道有一个图书馆功能可以转换基础,但我的教授让我们自己编写。
nullpointerexception是恒星的位置(** * **)
public class NumberBase {
private static double d;
private static int i;
private static ArrayList <Character> c;
private static double sum;
private static ArrayList <Integer> result = new ArrayList <Integer>();
public NumberBase(){
i = 0;
c = new ArrayList <Character>();
}
public static String convert(String input, int base_in, int base_out){
while(i < input.length()){
c.add(input.charAt(i)); (*****)
i++;
}
int digit;
i = 0;
while(i < result.size()-1){
digit = Character.getNumericValue(c.get(i));
result.add(digit);
i++;
}
d = toBaseTen(base_in);
String str = "" + d;
return str;
}
public static void main(String args[]){
}
public static double toBaseTen(int base_in){
i--;
while(i > 0){
sum = result.get(i)*(Math.pow(base_in, i));
i--;
}
return sum;
}
public int fromBaseTen(int base_out){
}
}
答案 0 :(得分:0)
您的转换方法是静态的。这意味着它是一种全班方法。您的ArrayList“c”是NumberBase类的属性。由于convert是静态的,因此它无法访问类中声明的特定于Object的属性(static表示它是类的方法,而不是作用于对象的方法)。
基本上 - 如果要访问您定义的属性,则必须创建为其定义的类的成员。静态方法不需要实际的Object来运行。
如果从convert:
中删除static关键字public String convert(String input, int base_in, int base_out){
int i = 0;
while(i < input.length()){
c.add(Character.valueOf(input.charAt(i))); //(*****)
i++;
}
您可以使用以下方式调用它:
public static void main(String args[]){
NumberBase b = new NumberBase();
String s = b.convert("test", 0, 3);
}
因为您的方法是静态的,所以您实际上从未实例化NumberBase类的成员。这意味着您的构造函数从未被调用过:
public NumberBase(){
i = 0;
c = new ArrayList <Character>();
}
由于您在构造函数中实例化(创建)了您的ArrayList对象(从未调用过),当convert方法尝试访问ArrayList“c”时,没有任何内容,并且您有异常。
编辑:
如果你的方法必须是静态的,要在其中使用ArrayList,你需要将一个作为参数传递或在方法中实例化一个ArrayList。
ArrayList<Character> c = new ArrayList<>();
^如果你把它放在方法体内(在你使用之前的某个地方!),你就不会得到空指针异常。