2013-02-20 20 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