2015-10-15 58 views
0
String nameFromFile; 
    String colorFromFile; 
    int capacityFromFile; 
    int currentCountFromFile; 


    while(inputFile.hasNextLine()){ 
     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     MarbleSackOwner owner1 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 


     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     MarbleSackOwner owner2 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 

     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     MarbleSackOwner owner3 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 

     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     MarbleSackOwner owner4 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 

    } 
    String output = "Owners after creaton based on file read \n"; 
    output += "Owner1: " + owner1 + "\n"; 
    output += "Owner2: " + owner2 + "\n"; 
    output += "Owner3: " + owner3 + "\n"; 
    output += "Owner4: " + owner4 + "\n"; 

    output += "owner1's name is " + owner1.getName() + "\n"; 
    output += "like I said, owner1 has " + owner1.howManyMarbles() + 
       " marbles in his sack.\n"; 
    output += "So lets take one away from him.\n"; 
    owner1.removeMarbles(1); 
    output += "so now we see that he has " + owner1.howManyMarbles() + 
       " in his sack.\n"; 
    output += "so lets give the darn thing back to him now.\n"; 
    owner1.addMarbles(1); 
    output += "so now we see that he has " + owner1.howManyMarbles() + 
       " in his sack.\n"; 

    //mess with owner4 
    output += "so, maybe " + owner4.getName() + 
       " has lost a marble or two, so lets give him back one.\n"; 
    owner4.addMarbles(1); 
    output += "So now we see that he has " + owner4.howManyMarbles() + 
       " marbles in his sack.\n\n"; 

    //test class method 
    output += "the owner with the most marbles is " + 
       bigOwner(owner1, owner2, owner3, owner4); 

    //results 
    JOptionPane.showMessageDialog(null, output, TITLE_BAR, JOptionPane.INFORMATION_MESSAGE); 

}//main 

我得到錯誤在每次調用一個所有者對象while循環說法之外的外部「所有者#不能被解析爲一個變量」。如果我在循環之前聲明對象,那麼在循環內創建的對象上會出現重複的對象錯誤。我不太清楚如何使這項工作。的Java不承認是在一個循環中創建的對象,循環

+2

歡迎堆棧溢出。請正確地說*錯誤是什麼 - 理想情況下,儘量將代碼縮減爲*僅僅是一個展示問題的最小示例。有關更多信息,請參閱http://stackoverflow.com/help/mcve。 –

+1

完成。我的道歉 –

+0

你需要閱讀*變量範圍*。您的所有者變量超出了while循環的範圍。 – JonK

回答

0

您已在while循環內同時聲明並初始化變量owner1,owner2,owner3。你可以做的是,首先聲明和初始化前(外)循環變量和內while循環這樣創建所有者對象:

MarbleSackOwner owner1 = null; 
... 
while(..){ 
... 
owner1 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 
... 
} 

同樣做這個動作了另外兩個主人變量。通讀變量的範圍以便更好地理解。

http://www.java-made-easy.com/variable-scope.html

如果您要創建多個所有者對象,那麼你可以創建你的while循環上面的列表對象,並從你的列表,而打印值添加業主反對該列表和retriev添加的對象。

0

如果你想訪問這些變量,你需要在外面聲明它們。在你的情況下,這些變量只知道它們被聲明的原因。嘗試閱讀變量作用域。

嘗試是這樣的:

MarbleSackOwner owner1 = new MarbleSackOwner(string.Empty, string.Empty, 0, 0), 
owner2 = new MarbleSackOwner(string.Empty, string.Empty, 0, 0), 
owner3 = new MarbleSackOwner(string.Empty, string.Empty, 0, 0), 
owner4 = new MarbleSackOwner(string.Empty, string.Empty, 0, 0);  

while(inputFile.hasNextLine()){ 
     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     owner1 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 


     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     owner2 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 

     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     owner3 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 

     nameFromFile = inputFile.next(); 
     colorFromFile = inputFile.next(); 
     capacityFromFile = inputFile.nextInt(); 
     currentCountFromFile = inputFile.nextInt(); 

     owner4 = new MarbleSackOwner(nameFromFile, colorFromFile, 
            capacityFromFile, currentCountFromFile); 

    }