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

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

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

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

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Q&A

解決済

1回答

3104閲覧

java 与えられたコマンドライン引数の値を違うクラスに渡す。

te623

総合スコア4

Java

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

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

0グッド

0クリップ

投稿2020/05/19 09:18

編集2020/05/19 09:49

学校の課題で詰まってしまい、先生への質問も時間外となってしまったのでここで質問します。

現在javaのプログラムでLesson04_4.javaとBinary.javaの2つを使ってプログラムを作っています。
どのようなプログラムかというと、与えられたコマンドライン引数2つの論理積と排他的論理和を計算して2進数で表示をするというものです。

java

1public class Lesson04_4 { 2 public static void main(String[] args) { 3 int left = Integer.parseInt(args[0]); 4 int right = Integer.parseInt(args[1]); 5 6 Binary i = new Binary(); 7 8  i.and(left, right); 9 } 10}

上記のプログラムは作成中のLesoon_04_4.javaです。
クラスとインスタンスについての授業だったのでインスタン関数に値を直接送ろうと考えました。

java

1public class Binary { 2 3 public void and(int left, right){ 4 int n = left & right; 5 String m = Integer.toBinaryString(n); 6 System.out.println(m); 7 8 } 9 10 public void exclusiveOR(){ 11 12 } 13 14}

次のプログラムは作成中のBinary.javaです。
and()の中身は論理積を計算し、2進数になおして表示をするプログラムです。
本当はLesson04_4.javaに値を返して表示するのですが、まずは計算と表示ができるか確認しています。
exclusiveOR()はand()ができてから考えるつもりです。

このプログラムの考え方があっているかを質問時間内に聞いた所、「考え方はいいけどコマンドライン引数の値をインスタンス関数に直接送る以外の方法でやってみて」と言われました。

授業のスライドではメソッド名が「and()」と指定されていました。
調べたのですが、自分の調べ方がわるいのかわかりませんでした。
インスタンス関数を使わずに値を渡す方法があるのでしょうか?
値を渡す他の方法が考えれないので、アドバイスがほしいです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2020/05/19 09:31

ソースコードのインデントがなく読みづらいため、添付したコードは```で囲んでください。
te623

2020/05/19 09:34

読みづらくてすいません、すぐに修正します。 初めての質問なのでわからないことが多いのですがコードを囲むその記号はなんでしょうか?
BluOxy

2020/05/19 09:45

少し惜しいです。 「```public class Binary {」ではpublicから先が表示されません。 また、コードがjavaであることを明示するために下記のように修正してください。 ```java コード ``` 質問は他の方も参考にする可能性があるため、細かいと思われるかもしれませんが、ご協力をお願いします。
te623

2020/05/19 09:50

丁寧な指定ありがとうございます。 修正したのですがこれで大丈夫でしょうか?
BluOxy

2020/05/19 09:56

はい、対応ありがとうございました。
guest

回答1

0

ベストアンサー

本題からそれますが、インスタンス関数ではなくメソッド(もしくは、インスタンスメソッド)ですね。

インスタンス関数を使わずに値を渡す方法があるのでしょうか?

and()が縛り条件なら、コンストラクタを使えばメソッドを通さずにインスタンスに値を渡すことができます。
思想が良いかはさておき。

java

1public class Binary { 2 private int left; 3 private int right; 4 public Binary(int left, int right){ 5 this.left = left; 6 this.right = right; 7 } 8}

他にも下記の方法があります。

  • getter/setterを使う
  • publicなフィールドを定義して、外部からleftrightに値を代入する

コンストラクタやprivateはまだ習っていない

この場合はpublicなフィールドを定義する方法が講師の求めているものかもしれません。

投稿2020/05/19 09:33

編集2020/05/19 10:09
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2020/05/19 09:34

よく考えたらコンストラクタもメソッドですね。これでは駄目かもしれないです
BluOxy

2020/05/19 09:42

「考え方はいいけどコマンドライン引数の値をインスタンス関数に直接送る以外の方法でやってみて」と言われた理由が「and()と指定されているから」であれば、上記回答で問題ないかと思います。わざわざ縛る必要性はわかりませんが、講師に聞いてみると良いでしょう。
dodox86

2020/05/19 09:45

フィールドを使いつつ、アクセッサ(getter/setter)を用意せよということかな、と思いました。あくまで講師の思惑如何によりますけど。
te623

2020/05/19 09:46

回答ありがとうございます。コンストラクタやprivateはまだ習っていないので調べて意味を理解してきます。またわからないところがでれば質問させていただきたいです。
BluOxy

2020/05/19 09:48

はい、上記回答について不明点があればこちらにコメントしてください。 > dodox86さん getter/setterが抜けていましたね。コメントありがとうございます。
Zuishin

2020/05/19 09:53

https://docs.oracle.com/javase/specs/jls/se14/html/jls-13.html#jls-13.4.12 Java でもメソッドとコンストラクタは別物なので大丈夫でしょう。 間に一人入っているので正確な表現かどうかわかりませんが、「直接渡すな」ということは「間接的に渡せ」または「加工して渡せ」ということで、and というメソッドが必要というところから BluOxy さんの考えが当たっている可能性が高いのではないかと思います。
dodox86

2020/05/19 10:02 編集

質問者さんの学習状況(コンストラクタとprivateを習っていない)から、現段階ではBluOxyさんのこちらの回答が当たりかな、と改めて思いました。 > もしくはpublicなフィールドを定義して、外部からleftとrightに値を代入する方法もあります。 ここからprivate~アクセサを使ったカプセル化、引数付きコンストラクタなどに発展していくのかな、と。
BluOxy

2020/05/19 10:02

> Zuishinさん Constructor と Method で明示的に言葉が使い分けられていますね。Javaの言語仕様でそう表現されているのであれば大丈夫そうです。ありがとうございます。
te623

2020/05/19 10:29

あっているかはわかりませんが無事に課題が終わりました! 皆さんアドバイスありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問