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

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

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

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

Q&A

0回答

642閲覧

Javaにおける画像出力

rikitaro

総合スコア6

Java

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

0グッド

0クリップ

投稿2020/02/14 07:38

編集2020/02/14 10:41

Javaを使ってナベアツプログラムの進化系を作りたいと考えています。
ナベアツ条件からナベアツの画像を出力するプログラムを作りたいのです。
しかし条件から画像を入出力する方法がわかりません。

現状でできている部分が電卓(電卓といってもウィンドウ上で単に計算するのみ)の部分のみとなり
、それぞれの演算にいif文を追加しその条件から画像を出力するというプログラムが以下のものです。
画像を読み->書き出す部分がどのようにifの中で呼び出すかがわかりません。

java

1import java.util.*; 2import java.math.*; 3import java.io.*; 4 5 6 7//画像を読む->画像を書き出す 8 9//読む部分 10BufferedImage bufferedImage = ImageIO.read(new File(ファイル名)); 11 12//書き出す部分 13//フォーマット名->jpegとか 14ImageIO.write(bufferedImage, フォーマット名, new File(ファイル名)); 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30/** 31 * 「現在の結果+環境(各変数の値)」というオブジェクト。 32 * 各演算子は、基本的にはこのオブジェクトの「現在の結果」部分を書き換えて戻す。 33 */ 34class BIwithMem { 35 36 // ここらに必要なフィールドとメソッドの定義を入れる。コンストラクタも忘れずに。 37 38 /** 39 * 変数の値を取得。 40 * @param x 変数名。 41 * @return その変数に入っている値。なければ {@code null}42 */ 43 private BigInteger val; 44 private HashMap<String, BigInteger>mem; 45 BIwithMem(){ 46 val = BigInteger.ZERO; 47 mem = new HashMap<String, BigInteger>(); 48 } 49 BigInteger getValue(){ 50 return val; 51 } 52 void setValue(BigInteger bi){ 53 val = bi; 54 } 55 void store(String x, BigInteger a){ 56 mem.put(x, a); 57 } 58 59 BigInteger load(String x) { 60 BigInteger bi = mem.get(x); 61 if(bi == null) { 62 throw new RuntimeException("Unknown variable: " + x); 63 } 64 return bi; 65 } 66 /** 67 * このオブジェクトの文字列表現を返す。とりあえず「現在の結果」のみ。 68 * @return 文字列表現 69 */ 70 public String toString() { 71 return val.toString(); 72 } 73 /** 74 * 環境内の変数とその値の一覧の文字列。 75 * @return 環境内の変数とその値の一覧の文字列。 76 */ 77 public String dumpVars() { 78 StringBuffer sb = new StringBuffer(); 79 for(Map.Entry<String, BigInteger> e : mem.entrySet()) { 80 String var = e.getKey(); 81 BigInteger bi = e.getValue(); 82 sb.append(" " + var + " = " + bi + "¥n"); 83 } 84 return sb.toString(); 85 } 86} 87 88/** 89 * 単項演算子の雛形。"演算子" という行を受け付ける。 90 */ 91abstract class MonoOpBIWM implements Command<BIwithMem> { 92 /** 93 * 演算子の文字列。 94 * @retrun 演算子の文字列。 95 */ 96 abstract String opeStr(); 97 98/** 99 * 演算子の中身。 100 * @param a 引数。 101 * @retrun 演算を適用した結果。 102 */ 103 abstract BigInteger op(BigInteger a); 104 /** 105 * "演算子" という行を受け付ける。 106 * @param tokens 入力行をトークンに分解したもの。 107 * @return 入力行が上の形なら {@code true}108 */ 109 public boolean accept(String [] tokens) { 110 return tokens.length == 1 && tokens[0].equals(opeStr()); 111 } 112 /** 113 * 演算子を適用する。演算の実体は {@code op}114 * @param res 「現在の整数値+環境」のオブジェクト。 115 * @return 「演算結果+環境」のオブジェクト。 116 */ 117 public BIwithMem exec(BIwithMem res) { 118 res.setValue(op(res.getValue())); 119 return res; 120 } 121} 122 123/** 124 * "整数" or "変数" を読み込むためのベース。 125 */ 126abstract class BIorVarWM implements Command<BIwithMem> { 127 /** 128 * 引数を整数にパースするか、変数だと思って環境から変数の値を取り出す。 129 * @param res 「現在の結果+環境」のオブジェクト。 130 * @param arg 引数の文字列。 131 * @return 引数に対応した値。 132 */ 133 BigInteger parseOrLoad(BIwithMem res, String arg) { 134 try { 135 return new BigInteger(arg); // 整数への変換を試す 136 } catch(NumberFormatException e){ 137 } 138 BigInteger bi = res.load(arg); // ダメなら変数なのだろう 139 return bi; 140 } 141} 142 143/** 144 * 加減乗除などの、"演算子 引数" という行を受け付ける二項演算子の雛形2。 145 */ 146abstract class BinOpBIWM extends BIorVarWM { 147 /** 148 * 演算子の文字列。 149 * @retrun 演算子の文字列。 150 */ 151 abstract String opeStr(); 152 /** 153 * 演算子の中身。 154 * @param a 第一引数。 155 * @param b 第二引数。 156 * @retrun 演算を適用した結果。 157 */ 158 abstract BigInteger op(BigInteger a, BigInteger b); 159 /** 160 * オペランド。 161 */ 162 String x; 163 /** 164 * "演算子 引数" という行を受け付ける(引数が整数か変数かは後で考える)。 165 * @param tokens 入力行をトークンに分解したもの。 166 * @return 入力行が上の形なら {@code true}167 */ 168 public boolean accept(String [] tokens) { 169 if(tokens.length != 2) return false; // 引数があるか? 170 if(!tokens[0].equals(opeStr())) return false; // 最初が演算子か? 171 x = tokens[1]; // 整数 or 変数を記憶しておく 172 return true; // ここまで来たら OK 173 } 174 /** 175 * 演算子を適用する。演算の実体は {@code op}176 * @param res 「現在の整数値+環境」のオブジェクト。 177 * @return 「演算結果+環境」のオブジェクト。 178 */ 179 public BIwithMem exec(BIwithMem res) { 180 BigInteger bi = parseOrLoad(res, x); 181 res.setValue(op(res.getValue(), bi)); 182 return res; 183 } 184} 185public class nabeatu extends Applet{ 186 Image img; 187 public void init(){ 188 img = getImage(); 189 } 190 191 192/****** 諸々の普通の演算子の定義 ******/ 193class NegBIWM extends MonoOpBIWM { 194 String opeStr() { return "neg"; } 195 BigInteger op(BigInteger a) { 196 BigInteger b = a.negate(); 197 if(b % 3 == 0||(b % 10 == 3||b / 10 == 3)){ 198 199 } 200 return b; 201 } 202} 203 204class AddBIWM extends BinOpBIWM { 205 String opeStr() { return "+"; } 206 BigInteger op(BigInteger a, BigInteger b) { 207 BigInteger w = a.add(b); 208 if(w % 3 == 0||(w % 10 == 3||w / 10 == 3)){ 209 210 } 211 return w; 212 } 213} 214 215class SubBIWM extends BinOpBIWM { 216 String opeStr() { return "-"; } 217 BigInteger op(BigInteger a, BigInteger b) { 218 BigInteger w = a.subtract(b); 219 if(w % 3 == 0||(w % 10 == 3||w / 10 == 3)){ 220 221 } 222 return w; 223 } 224} 225 226class MulBIWM extends BinOpBIWM { 227 String opeStr() { return "*"; } 228 BigInteger op(BigInteger a, BigInteger b) { 229 BigInteger w = a.multiply(b); 230 if(w % 3 == 0||(w % 10 == 3||w / 10 == 3)){ 231 232 } 233 } 234} 235 236class DivBIWM extends BinOpBIWM { 237 String opeStr() { return "/"; } 238 BigInteger op(BigInteger a, BigInteger b) { 239 BigInteger w = a.divide(b); 240 if(w % 3 == 0||(w % 10 == 3||w / 10 == 3)){ 241 242 } 243 return w; 244 } 245} 246 247class KAIJOBIWM extends MonoOpBIWM { 248 public boolean accept(String [] tokens) { 249 return tokens.length == 1 && tokens[0].equals(opeStr()); 250 } 251 String opeStr() {return "fact";} 252 public BigInteger op(BigInteger a){ 253 BigInteger result = BigInteger.ONE; 254 int m = a.intValue(); 255 for(int i = 1; i<= m; i++){ 256 result = result.multiply(BigInteger.valueOf(i)); 257 } 258 if(result % 3 == 0||(result % 10 == 3||result / 10 == 3)){ 259 return result; 260 } 261 } 262} 263/****** 諸々の普通の演算子の定義 end ******/ 264 265/** 266 * 現在の値を変数に代入する演算。 267 */ 268class StoreBIWM implements Command<BIwithMem> { 269 /** 270 * 変数名。 271 */ 272 String x; 273 /** 274 * "store 変数" という行を受け付ける。 275 * @param tokens 入力行をトークンに分解したもの。 276 * @return 入力行が上の形なら {@code true}277 */ 278 public boolean accept(String [] tokens) { 279 if(tokens.length != 2) return false; // 引数があるか? 280 if(!tokens[0].equals("store")) return false; // 最初が演算子か? 281 x = tokens[1]; // 変数名を記録 282 return true; // ここまで来たら OK 283 } 284 /** 285 * 変数に現在の結果を代入する(環境に記憶する)。 286 * @param res 「現在の結果+環境」のオブジェクト。 287 * @return 「現在の結果+新しい環境」のオブジェクト。 288 */ 289 public BIwithMem exec(BIwithMem res) { 290 res.store(x, res.getValue()); 291 return res; 292 } 293} 294 295/** 296 * 変数の値を現在の結果にロードする演算。 297 */ 298class LoadBIWM implements Command<BIwithMem> { 299 /** 300 * 変数名。 301 */ 302 String x; 303 /** 304 * "load 変数" という行を受け付ける。 305 * @param tokens 入力行をトークンに分解したもの。 306 * @return 入力行が上の形なら {@code true}307 */ 308 public boolean accept(String [] tokens) { 309 if(tokens.length != 2) return false; // 引数があるか? 310 if(!tokens[0].equals("load")) return false; // 最初が演算子か? 311 x = tokens[1]; // 変数名を記録 312 return true; // ここまで来たら OK 313 } 314 /**憶し 315 * 変数の値を現在の結果に入れて返す。 316 * @param res 「現在の結果+環境」のオブジェクト。 317 * @return 「その変数の値+環境」のオブジェクト。 318 */ 319 public BIwithMem exec(BIwithMem res) { 320 BigInteger bi = res.load(x); 321 res.setValue(bi); 322 return res; 323 } 324} 325 326/** 327 * 環境内の変数の値を出力するメタ演算。 328 * "show" という行を受け付ける。 329 */ 330class ShowVarsBIWM implements Command<BIwithMem> { 331 /** 332 憶し * "show" という行を受け付ける。 333 * @param tokens 入力行をトークンに分解したもの。 334 * @return 入力行が上の形なら {@code true}335 */ 336 public boolean accept(String [] tokens) { 337 return tokens.length == 1 && tokens[0].equals("show"); 338 } 339 /** 340 * 環境を表示。 341 * @param res 「現在の結果+環境」のオブジェクト。 342 * @return {@code res} をそのまま返す。 343 */ 344 public BIwithMem exec(BIwithMem res) { 345 System.out.println(res.dumpVars()); 346 return res; 347 } 348} 349 350/** 351 * 横着をするための演算。 352 * "整数" or "変数" という行を受け付け、その値を現在の結果にセットする。 353 */ 354class LoadImmBIWM extends BIorVarWM { 355 /** 356 * オペランド。 357 */ 358 String x; 359 /** 360 * "整数" or "変数" という行を受け付ける(引数が整数か変数かは後で考える)。 361 * @param tokens 入力行をトークンに分解したもの。 362 * @return 入力行が上の形なら {@code true}363 */ 364 public boolean accept(String [] tokens) { 365 if(tokens.length != 1) return false; // トークン一つ? 366 x = tokens[0]; // 整数 or 変数を覚えておく 367 return true; // ここまで来たら OK 368 } 369 /** 370 * 値を読み込む。 371 * @param res 「現在の整数値+環境」のオブジェクト。 372 * @return 「演算結果+環境」のオブジェクト。 373 */ 374 public BIwithMem exec(BIwithMem res) { 375 BigInteger bi = parseOrLoad(res, x); 376 res.setValue(bi); 377 return res; 378 } 379} 380 381 382/** 383憶し * 「変数」を扱えるようにした電卓 384 */ 385class BICalculatorWithVar { 386 public static void main(String [] args) throws Exception { 387 // 標準入力を読む準備 388 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 389 // 電卓のコマンドを用意 390 List<Command<BIwithMem>> cmds = new ArrayList<Command<BIwithMem>>(); 391 cmds.add(new AddBIWM()); 392 cmds.add(new SubBIWM()); 393 cmds.add(new MulBIWM()); 394 cmds.add(new DivBIWM()); 395 cmds.add(new NegBIWM()); 396 cmds.add(new KAIJOBIWM()); 397 398 // ここらに自分で書いた "fact" 演算の登録を忘れずに。 399 400 cmds.add(new LoadBIWM()); 401 cmds.add(new StoreBIWM()); 402 cmds.add(new ShowVarsBIWM()); 403 cmds.add(new LoadImmBIWM()); // これは最後に追加 404 // 電卓を生成 405 Calculator<BIwithMem> calc = new Calculator<BIwithMem>(cmds); 406 // 電卓を動かす 407 BIwithMem biwm = new BIwithMem(); 408 calc.run(biwm, br); 409 } 410} 411 412コード

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

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

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

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

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

m.ts10806

2020/02/14 07:39

どこにどう出したいのでしょうか。 自身で調べたこと試したことがあれば記載してください。なければまず調べてください。
m.ts10806

2020/02/14 07:40

そもそものFizzBuzzはできてるということですよね?
rikitaro

2020/02/14 07:45

調べたこと 画像を読み込み 書き込みの方法 画像自体はディスプレイに出力させる(Webアプリなどではなく) Buffered Imageを用いる。 電卓のプログラムの拡張として行なっている。 計算の出力結果にナベアツの条件をあて、 画像を出力する。
BeatStar

2020/02/14 07:49 編集

条件はなんでしょうか。コンソールへの出力となるとかなり大変ですよ。(アスキーアート状態だし) ウィンドウ( From ) を表示することと、FizzBuzzができていないとなると話になりません。 ...失礼、"ディスプレイ"とはなんですか? ディスプレイとは本来は「画面」とかの「表示エリア」みたいな意味ですよ。(ここではね) https://www.weblio.jp/content/%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4 コンソールへ、なのかウィンドウへ、なのかがいまいちわかりません。 また、追記は本質問に追記してください。"追記"ボタンのようなものがあるはずです。
m.ts10806

2020/02/14 07:46

伝わってないようなのでお伝えしますが、質問ではなく作業依頼になってます。
m.ts10806

2020/02/14 07:59

電卓のプログラムとやらもどのように作ってるのか提示されてないので応えようがないのが現状ですし、どのように作ってるかわかれば、その仕組に+画像表示 を検索条件に含めればヒントが出てこないはずはないです。
NEO_PLANETT-777

2020/02/14 08:31

自分のコード開示 参考にしたコードがあるなら、情報程度(リンク)は載せる。 で初めて、何をどうしたいのか質問しないと 皆何を使ってどうしたいのか判るはずがない。
m.ts10806

2020/02/14 10:54

ん?全部1ファイルにおさまってるわけじゃないですよね?
rikitaro

2020/02/14 10:58

提示したコードは一つのファイルです。 クラスの継承先は別ファイルにあります。
m.ts10806

2020/02/14 11:00

実際のコードが別ファイルならブロック分けてください。
jimbe

2020/02/14 16:47

ご提示のコードだけではコンパイルも通りません. 電卓として動かすにはどうすればよいのでしょうか.
jimbe

2020/02/15 04:49

>// 標準入力を読む準備 >BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ということからして, これはコンソール(コマンドプロンプト)で動作するプログラムと思います. コンソールに jpeg 画像は表示できないと思いますが, その辺り, 何か方法をお考えでしたらご質問に追記をお願いします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問