プログラミング初心者です
プログラミングの勉強をしており問題をやっている最中ですが、まわりに聞ける人もおらず,正解もわからず苦戦しております。そこでプログラミングができる方に教えていただきたいです。
問題文にFile型変数を使ったコンストラクタを定義するとありますが、どのような風にこのプログラムに組み込めばいいかわかりません。(これをやらなくても指定したファイルに出力させることはできています。)またこのコードにはsetter文が書かれているのですが、うまく使いこなせていないと思います。他にもいろいろおかしな点はあると思いうのですが
おかしな点を指摘していただき、正しいものを教えていただきたいです。
写真のものは、自分なりのコードを書いてみたものです(恥ずかしながら綺麗でないコードになっていると思います)
≪問題文≫
新規クラスを定義し、以下の内容を実装し動作するクラスを作る
① String変数をクラスのメンバー変数として定義し、文字列”hello world”を代入して初期化する
② File型のメンバー変数を定義し、出力先ファイルとして使用する
③ このFile型変数を使ったコンストラクタとgetter/setterを定義し、String型を引数に取り出力先に書き出すメソッドを定義する。
④ そのうえで、メインメソッド内でこのクラスを初期化して”hello world”を指定したファイルにfor文を用いて3回出力させること(3行)
プログラムのコード
package simonmon;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Maxsimon {
private String word = "hello world";
public static void main(String[] args) {
Maxsimon as = new Maxsimon();
File fileB = new File("C://Users/bi19029/documents/test2/"); //書き出し先指定
fileB.mkdir();
String a = "test3";
String b = ".txt";
try {
fileB = File.createTempFile(a,b,fileB);
BufferedWriter bw = new BufferedWriter(new FileWriter(fileB));
for(int i=0; i<3; i++) {
System.out.println(as.getWord()); //getter出力
bw.write(as.getWord()); //getter書き出し
bw.newLine(); //行替え
}
bw.close();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
public void setWord(String A) {
this.word=A;
}
public String getWord() {
return word;
}
}
No.1ベストアンサー
- 回答日時:
うーん、Javaってやっぱ今や人気ないのか?何で誰もレスつけねぇんだろう・・・・・・。
断っておきますが、僕は全然Java分かりません。
ついでに言うと、プログラムは基本的に「動けば良い」と思ってるんで、動けばそれは正解。動かなければ間違ってる。ただそれだけだと思っています。
んで、僕のバックグラウンドを話しておくと、Pythonは使えます。そしてPythonでもオブジェクト指向は使えますが、ただ、そもそも、個人的にはオブジェクト指向があまり好きじゃないです。
で、「現代オブジェクト指向の立役者/雄」、JavaだとPythonで書くようなオブジェクト指向をどのように表現するのか、ちょっと興味がある程度。
と言うわけで、ちと苦労しました。そもそも、話ではJavaのgetter/setterの事は聞いた事ありますが、具体的に何する為のモノなのかサッパリ知らない。Pythonだとそういう概念が無いんですよ(機能的にはあるのかもしれませんが)。
んで、Javaのコードとしては貴方の書いたモノより稚拙でしょう。ただ、「余計な事はしてない」ので、貴方なら多分「簡単に書かれたモノ」の方が解釈は易く、より良く出来るのではないか、と。
基本的に①〜④の流れに従っただけ、です。恐らく題意としては、コンストラクタを定義する際に、直接、メンバ変数を取りに行かず、getter/setterを経由して初期化するように設定しろ、って言ってるだけだと思うんですけどね(Java知らんので、それをやるのが大変でしたが・笑)。そして、③の「ファイルに書き込むメソッド」なんですが、「String型を引数に取り出力先に書き出すメソッド」と指定されてる以上、まだこの時点では書き込まれる文字列がメンバ変数(でいいのか?"Hello World"の事)を直接埋め込まずに汎用に書け、と。多分そういう事を指定してるんだと思います(メンドくさ・笑)。
それで、
> メインメソッド内でこのクラスを初期化して
って④で言ってるんですが、これは例えば(こちらが作った)Fooクラス内にmainを作って、thisでクラス内のメソッドを参照して実行するようにしろ、って言ってるんですかね?ちょっとその辺、こっちじゃ判断出来ないんで(Java知らんから・笑)、別に分けてあります。
うーん、Javaって難しい。まぁ、参考までに。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Foo {
private File fileB; // ② File型のメンバー変数を定義し、出力先ファイルとして使用する
Foo(String filepath) { // ③ ②のFile型変数を使ったコンストラクタを定義
setData(filepath); // setter を使ってるんで、File型変数を(結果)使ってる事になってる筈
}
public File getData() { // ③ ②のFile型変数を使ったgetterを定義
return fileB;
}
public void setData(String filepath) { // ③ ②のFile型変数を使ったsetterを定義
fileB = new File(filepath);
}
public void write(String word) { // ③ String型を引数に取り出力先に書き出すメソッドを定義する。
try {
FileWriter filewriter = new FileWriter(getData(), true);
filewriter.write(word);
filewriter.close();
} catch(IOException e) {
System.out.println(e);
}
}
}
class Main {
public static void main(String[] args) {
String word = "hello world\n"; // ① String変数をクラスのメンバー変数として定義し、文字列”hello world”を代入して初期化する
Foo f = new Foo("hello.txt");
int i;
for (i = 0; i < 3; i++) {
f.write(word);
}
}
}
本当に丁寧に回答してくださりありがとうございました
ここ数日わからないことだらけで、半ば諦め気味できたが、あたらめて参考にさせて頂き、再度むきあっていけそうです
感謝しています
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java 配列<選挙> 4 2023/07/31 15:07
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String.containsの反対機能はあ...
-
Google Apps Script で getRang...
-
C# 点の描き方をおしえてくだ...
-
return new使用時
-
なぜprotected overrideなのか
-
StringBufferからStringへキャ...
-
Java初心者です、エラーの意味...
-
クラスを作るとメソッドの数が...
-
java ジェネリックスに関して
-
Java初級 引数に適用できません
-
説明文書でのメソッド・変数の...
-
Strutsでチェックボックスの値...
-
C# の ByVal と ByRef について
-
テキストファイルに書かれた文...
-
リストボックスの並べ替え (VB...
-
レコード件数の表示
-
C# でメソッドに送られてきたOb...
-
メソッドの引数に指定されてい...
-
VB FindFirstの動きを.Netで・・・
-
【C#】WebBrowser上で表示され...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String.containsの反対機能はあ...
-
Java初級 引数に適用できません
-
StringBufferからStringへキャ...
-
レコード件数の表示
-
なぜprotected overrideなのか
-
Java初心者です、エラーの意味...
-
C# でメソッドに送られてきたOb...
-
Google Apps Script で getRang...
-
abstract と static を一緒に付...
-
C# 点の描き方をおしえてくだ...
-
別クラスのmainメソッドの実行
-
javaに"search"という関数 or ...
-
Strutsでチェックボックスの値...
-
YYYYMMDD書式の日付に対する適...
-
Javaの関数名が長い?
-
return new使用時
-
readLine()ではじめから読み直...
-
シェルスクリプトからのJavaメ...
-
java ジェネリックスに関して
-
Jakarta POI での、excelのシ...
おすすめ情報