0

我最近一直在学习 Java,它与大多数其他语言完全不同。我和其他一些人站在那里摸不着头脑,不明白为什么有些东西不起作用,这是我看到的所有问题。这。时间。这令人沮丧和恼火,希望我可以为其他人提供一些启示。

有没有问过自己这个?:

“我一直试图让它工作几个小时,但我似乎看不到它。我试图将字符串“reducerFractions”传递给 FractionReducer 类,但不知何故,当它进入那个类时变为空?

我对Java真的很陌生,这只是我的第二个程序,我不太明白为什么这不起作用......

父类:

public class FractionCalc extends FractionUI
{
//member variables for this class initialized here, all are kept within this class
protected String reducerFractions;
{
/*Paramiters in here math stuff ect*/
finalNum = (int)fin_num;
finalDem = (int)fin_dem;
reducerFractions = finalNum + "/" + finalDem; 
//puts these together in a protected string

System.out.println(reducerFractions); //<- testing here shows its working as needed
reducer.setFraction(finalNum, finalDem);
//overloading the function shows it's working for the two ints as ints themselves
reducer.setFraction(reducerFractions);
int rNum = reducer.getResultsNum();
int rDenom = reducer.getResultsDenom();
String debug = rNum + " " + rDenom;
System.out.println(debug); 
//right here gives back the correct numbers using an int approach
}

儿童班:

public class FractionReducer extends FractionCalc
{
  public void setFraction(String a)
{
    System.out.println(reducerFractions);
    //Right here it's saying it's null, I don't understand why...
    String[] stringReducedFraction = reducerFractions.split("/");
    double numerator = Float.valueOf(stringReducedFraction[0]);
    double denominator = Float.valueOf(stringReducedFraction[1]);
    //split up the string here for other uses
 }
//Other stuff
}

终端输出

2/1 //The string prints out fine in the parent class
null//but null in the child?
Exception in thread "main" java.lang.NullPointerException
    at FractionReducer.setFraction(FractionReducer.java:25)
    at FractionCalc.FractionCalc(FractionCalc.java:73)
    at FractionUI.Run(FractionUI.java:47)
    at MainP2.main(MainP2.java:19)

这里有一个明显的(对大多数人来说)问题,但只有在您大量使用对象后才会明显。

4

3 回答 3

1

从我可以看到你将 reducerFractions 作为字符串参数 a 传递给 FractionReducer。因此,如果您将您对 reducerFractions 的引用替换为对 a 的引用,它应该对您有用。像这样:

     public void setFraction(String a)
{
    System.out.println(a);
    //Right here it's saying it's null, I don't understand why...
    String[] stringReducedFraction = a.split("/");
    double numerator = Float.valueOf(stringReducedFraction[0]);
    double denominator = Float.valueOf(stringReducedFraction[1]);
    //split up the string here for other uses
 }

使字符串受保护和静态并不是真正的方法。如果你在 FractionReducer 中需要它,你应该把它传入。

于 2013-06-06T10:21:56.313 回答
0

嗯,在那里。问题显然与共享权限有关。

正确的!

大多数人会认为您只需要将字符串交换到公共,我们不想这样做,我们需要保护我们的数据,严密保护它以防止错误、错误错误和错误信息。

这里需要意识到的是,你需要从子类中看到它。当然子类可以看到它,因为它是受保护的,但它也是动态的。所以它本质上正在改变。

没错,所以我们要做的就是把它改成静态的,这样信息就可以流动了,而且既然是受保护的,就不会被干扰。

我希望这对你们中的一些人有所帮助,或者至少对某些人有所帮助。

protected static String reducerFractions;
于 2013-06-06T10:10:32.173 回答
0

您尝试reducerFractions从初始化程序调用的方法访问您的字段。我认为调用该方法时该字段未完全初始化。

您能否发布符合SSCCE标准的代码?

于 2013-06-06T10:24:04.403 回答