質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

解決済

javaで、配列の中身を追加するクラスを作って、それを用いて別クラスから作った配列を表示したい

kenta715
knt715

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1回答

0評価

1クリップ

477閲覧

投稿2021/12/09 10:09

編集2021/12/09 12:32

###追記
こちら課題であり、「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

public class Portfolio{ private Position[] portfolio = new Position[0]; public void addPosition(Position p){ Position samePosition = findPosition(p.getIssue()); if(samePosition == null){ Position[] newPortfolio = new Position[portfolio.length + 1]; System.arraycopy(portfolio, 0, newPortfolio, 0, portfolio.length); newPortfolio[portfolio.length] = p; this.portfolio = newPortfolio; }else{ int i = 0; do{ i ++; }while( portfolio[i].getIssue().getCode().equals(p.getIssue().getCode()) && portfolio[i].getIssue().getName().equals(p.getIssue().getName()) ); double sum = samePosition.getAmount() + p.getAmount(); portfolio[i].setAmount(sum); } } public Position findPosition(Issue issue){ for(Position p : portfolio){ if( p.getIssue().getCode().equals(issue.getCode()) && p.getIssue().getName().equals(issue.getName()) ){ return p; } } return null; } }
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のスーパークラスです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/12/09 11:17 編集

まず基本的に、可変長な配列をわざわざ作るよりは、List を使ったほうが良いのではないでしょうか。 テストの Main がやけにごちゃごちゃしていますが、 Position, Stock, Bond 各クラスの定義はどうなっているのでしょうか。
kenta715

2021/12/09 11:44 編集

@jimbe さん ・Listは使ってはいけないという指定があり、使えません。(補足説明忘れていました????‍♂️) ・それぞれ Position(Issue issue, amount) Stock(String code, String name, Market market) Bond(String code, String name, int maturity, double coupon) となっています。ちなみに、 Issue(String code, String name) であり、Position、Stock、BondはIssueのサブクラスとなっております。 よろしくお願いします。
dodox86

2021/12/09 11:40 編集

Portfolioクラスのフィールドのportfolioと、PortfolioTestクラスのmainメソッド内のportfolio 変数と、ごっちゃにしていると思います。
kenta715

2021/12/09 11:46

@dodox86 さん Portfolioクラスのportfolioを使うには、どうしたら良いのでしょうか。 現状、配列を作れていないということでしょうか。
jimbe

2021/12/09 12:18 編集

> Issue(String code, String name) は、 Posittion,Stock,Bondのスーパークラスです。 Position は Issue を保持するのに、 Position 自身が Issue でもあるのですか。 クラスの構造が実際の言語的定義と合っていないということでしょうか。
kenta715

2021/12/09 12:20

@jinbe さん Positionはサブクラスではありませんでした。 たびたび申し訳ないです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。