###追記
こちら課題であり、「ArrayListやMapなどのコレクションは使用しないように」という指定があります。
Position,Stock,Bondはそれぞれ
Position(Issue issue, double amount)
Stock(String code, String name, Market market)
であり、
Issue(String code, String name)
は、Position,Stockのスーパークラスとなっています。
前提・実現したいこと
javaで、Portfolioクラスで、配列(portfolio)に中身(Position)を追加するメソッドを用いて、
PortfolioTestクラスにて、適当なPositionをSystem.out.prinntlnで表示したい
発生している問題・エラーメッセージ
エラー: for-eachは式のタイプに使用できません for(Position p : portfolio){ ^ 期待値: 配列またはjava.lang.Iterable 検出値: Portfolio エラー1個
該当のソースコード
java
1public class Portfolio{ 2 private Position[] portfolio = new Position[0]; 3 public void addPosition(Position p){ 4 Position samePosition = findPosition(p.getIssue()); 5 if(samePosition == null){ 6 Position[] newPortfolio = new Position[portfolio.length + 1]; 7 System.arraycopy(portfolio, 0, newPortfolio, 0, portfolio.length); 8 newPortfolio[portfolio.length] = p; 9 this.portfolio = newPortfolio; 10 }else{ 11 int i = 0; 12 do{ 13 i ++; 14 }while( portfolio[i].getIssue().getCode().equals(p.getIssue().getCode()) && portfolio[i].getIssue().getName().equals(p.getIssue().getName()) ); 15 double sum = samePosition.getAmount() + p.getAmount(); 16 portfolio[i].setAmount(sum); 17 } 18 } 19 20 public Position findPosition(Issue issue){ 21 for(Position p : portfolio){ 22 if( p.getIssue().getCode().equals(issue.getCode()) && p.getIssue().getName().equals(issue.getName()) ){ 23 return p; 24 } 25 } 26 return null; 27 } 28}
class PortfolioTest{ public static void main(String[] args){ //(2) Stock stock1 = new Stock("92010", "A", Stock.Market.TSE); Stock stock2 = new Stock("68610", "B", Stock.Market.OSE); Stock stock3 = new Stock("72030", "C", Stock.Market.NSE); Bond bond1 = new Bond("00611273", "D", 20310907, 0.110); Bond bond2 = new Bond("33070153", "F", 20261120, 0.001); Bond bond3 = new Bond("090650948", "G", 20231120, 0.001); Position positionStock1 = new Position(); positionStock1.setIssue(stock1); positionStock1.setAmount(0.1); Position positionStock2 = new Position(); positionStock2.setIssue(stock2); positionStock2.setAmount(0.2); Position positionStock3 = new Position(); positionStock3.setIssue(stock3); positionStock3.setAmount(0.3); Position positionBond1 = new Position(); positionBond1.setIssue(bond1); positionBond1.setAmount(0.075); Position positionBond2 = new Position(); positionBond2.setIssue(bond2); positionBond2.setAmount(0.120); Position positionBond3 = new Position(); positionBond3.setIssue(bond3); positionBond3.setAmount(0.205); //(3) Portfolio portfolio = new Portfolio(); portfolio.addPosition(positionStock1); portfolio.addPosition(positionStock2); portfolio.addPosition(positionStock3); portfolio.addPosition(positionBond1); portfolio.addPosition(positionBond2); portfolio.addPosition(positionBond3); for(Position p : portfolio){ System.out.println(p); } } }
試したこと
各Positionは正しく作れていることを確認できました。
エラーから、配列にしなきゃと思い、//(3)にて、
Portfolio[] portfolio = new Portfolio[1];
としてみたのですが、addPositionが使えませんでした。
補足情報(FW/ツールのバージョンなど)
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
Position、Stock、Bondはそれぞれ
Position(Issue issue, double amount)
Stock(String code, String name, Market market)
Bond(String code, String name, int maturity, double coupon)
となっており、
Issue(String code, String name)
は、 Stock,Bondのスーパークラスです。
回答1件
あなたの回答
tips
プレビュー