Java 基转换器中的空指针异常

Java 基转换器中的空指针异常,java,nullpointerexception,converter,base,Java,Nullpointerexception,Converter,Base,我正在做一个从a基地到b基地的转换器。这是说我有一个nullpointerexception。我真的不知道怎么修理它。我知道这可能与arraylist的越界有关,但我不确定。我是java新手,所以请不要把答案弄得太复杂。我知道有一个库功能可以转换基,但我的教授让我们自己写 nullpointerexception是星星所在的位置(***) public class NumberBase{ 私有静态双d; 私有静态int i; 私有静态数组列表c; 私有静态双和; 私有静态ArrayList结果=

我正在做一个从a基地到b基地的转换器。这是说我有一个nullpointerexception。我真的不知道怎么修理它。我知道这可能与arraylist的越界有关,但我不确定。我是java新手,所以请不要把答案弄得太复杂。我知道有一个库功能可以转换基,但我的教授让我们自己写

nullpointerexception是星星所在的位置(***)

public class NumberBase{
私有静态双d;
私有静态int i;
私有静态数组列表c;
私有静态双和;
私有静态ArrayList结果=新ArrayList();
公共号码基(){
i=0;
c=新的ArrayList();
}
公共静态字符串转换(字符串输入、int base_输入、int base_输出){
而(i0){
sum=结果。get(i)*(Math.pow(base_in,i));
我--;
}
回报金额;
}
公共整型fromBaseTen(整型基本输出){
}

}

您的转换方法是静态的。这意味着它是一个类范围的方法。ArrayList“c”是NumberBase类的属性。因为convert是静态的,所以它不能访问类中声明的特定于对象的属性(static表示它是类的方法,而不是作用于对象的方法)

基本上-如果您想要访问您定义的属性,您必须使它们成为为其定义的类的成员。静态方法不需要实际的对象来运行

如果从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++;
    }
因为您的方法是静态的,所以您从未实际实例化NumberBase类的成员。这意味着您的构造函数从未被调用:

public NumberBase(){
    i = 0;
    c = new ArrayList <Character>();
}
public NumberBase(){
i=0;
c=新的ArrayList();
}
由于您正在构造函数中实例化(创建)ArrayList对象(该对象从未被调用),因此当convert方法尝试访问ArrayList“c”时,那里什么都没有,您得到了一个异常

编辑:

如果您的方法必须是静态的,那么要在其中使用ArrayList,您需要将其作为参数传入,或者在方法中实例化ArrayList

ArrayList<Character> c = new ArrayList<>();
ArrayList c=new ArrayList();

^如果将它放在方法体中(在使用它之前的某个地方!),则不会出现空指针异常。

很抱歉,在这段代码中实际调用了什么方法。main是空的?我还没有完成它,main将只是用于测试,而从baseten开始我也还没有完成。基本上,我只是做了这样一个jUnitTest
@Test public void Test(){Assert.assertEquals(“8”,NumberBase.convert(“123”,2,10));}
我只需要convert方法返回一个转换后的数字字符串。不过,我的教授指示该方法是静态的。这是他的指示。在名为NumberBase的默认包中创建一个类,方法为public static String convert(String input,int base_in,int base_out),该方法将输入从base_in转换为base_out。例如,NumberBase.convert(“abc”,16,10)应返回“2748”
public NumberBase(){
    i = 0;
    c = new ArrayList <Character>();
}
ArrayList<Character> c = new ArrayList<>();