2013-02-20 21 views
0

我很难绕过基于对象的编程。我试图从类中调用一个方法。但是,我所调用的是一个已声明的变量,而我正在试图在稍后调用该变量。 (我确定我的术语是关闭的 - 随时可以更正)Java:从类/空逻辑错误调用方法

我得到逻辑错误。而不是价值,即时获得“空”。

的类别:

public class NumberOperations { 
    int number; 
    String oddsUnder; 
    String powersTwoUnder; 
    int isGreater; 
    String toString; 



public NumberOperations(int numberIn) { 
    number = numberIn; 

} 

public int getValue() { 
    return number; 
} 

public String oddsUnder() { 
    String output = ""; 
    int i = 0; 
    while (i < number) { 
     if (i % 2 != 0) { 
     output += i + "\t"; 
     } 
     i++; 
    } 
    return output; 
} 

public String powersTwoUnder() { 
    String output2 = ""; 
    int powers = 1; 
    while (powers < number) { 
    output2 += powers + "\t"; 
    powers = powers * 2; 
    } 
    return output2; 
} 

public int isGreater(int compareNumber) { 
    if (number > compareNumber) { 
     return 1; 
    } 
    else if (number < compareNumber) { 
     return -1; 
    } 
    else {  
     return 0; 
    } 
} 

public String toString() { 
    return number + ""; 
} 

}   

方案:

import java.util.Scanner; import java.util.ArrayList; 

/** * Demonstrates the NumberOperations class. */ public class NumberOpsDriver { 

    /** 
    * Reads a set of positive numbers from the user until the user enters 0.  * Prints odds under and powers of 2 under for each number.  * 
    * @param args - Standard commandline arguments 
    */ public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 

     // declare and instantiate ArrayList with generic type <NumberOperations> 
     ArrayList<NumberOperations> numOpsList = new ArrayList<NumberOperations>(); 

     // prompt user for set of numbers 
     System.out.println("Enter a list of positive integers separated " 
         + "with a space followed by 0:"); 

     // get first user input using in.nextInt() 
     int firstInput = in.nextInt(); 
     // add a while loop as described below: 
     while (firstInput != 0) { 

     numOpsList.add(new NumberOperations(firstInput)); 

     firstInput = in.nextInt(); 
     }  

    // while the input is not "0" 
     // add NumberOperations object to array based on user input 
     // get the next user input using in.nextInt() 

     int index = 0; 
     while (index < numOpsList.size()) { 
     NumberOperations num = numOpsList.get(index); 
     System.out.println("For: " + num); 
     System.out.println("Odds under: " + num.oddsUnder); 
     System.out.println("Powers of 2 under: " + num.powersTwoUnder); 

     // add print statement for odds under num 
     // add print statement for powers of 2 under num 

     index++; 
     } } } 
+0

你在哪里有问题?具体.. :) – PermGenError 2013-02-20 18:44:12

+0

1)http://sscce.org。 2)如果你没有初始化实例字段,它们被初始化为默认值,并且对于空值的字符串,你在哪里“得到null” – SJuan76 2013-02-20 18:44:36

回答

1
  1. 你永远不会分配给您的成员变量oddsUnderpowersTwoUnder。所以当你阅读它们时它们是空的,当你试图打印它们时你有一个NullPointerException它打印出“null”。

  2. 你可能真的想叫同一个名字的方法,而不是采取变量

     System.out.println("Odds under: " + num.oddsUnder()); 
        System.out.println("Powers of 2 under: " + num.powersTwoUnder()); 
    
+0

来扩展它。如果你想要一个空字符串,你可以将它初始化为“” – 2013-02-20 19:01:58

+0

非常感谢! – user2092509 2013-02-24 21:30:39

0

让你的特性private避免这种情况,改变你的属性在System.out...调用而不是方法的对象字段。例如

System.out.println("Odds under: " + num.oddsUnder()); //<-changed