前提・実現したいこと
引数で入力された数字を、入力された数字と同じ値を表す画像で表示するプログラムを作成しています。
例)123が入力された場合、1を表示する画像・2を表示する画像・3を表示する画像を表示します。
入力された引数の配列の要素の数だけ画像を表示する。
表示する画像は、str.charAt(j)で配列の先頭から値を選択する。
画像を表示する<img src="images/%d.png" alt="%d">を実行する
という流れを考えているのですが、エラーが解消できずに困っています。
発生している問題・エラーメッセージ
OOPLGradleでgradle appRunのコマンドを実行すると、以下のようなエラーが表示されます。
> Task :compileJava FAILED C:\Users\19t339\Desktop\OOPLGradle\src\main\java\ImageCounter.java:54: G[: printɓKȃ\bh܂(String,char,char) out.print("<img src=\"images/%d.png\" alt=\"%d\">", number.charAt(j), number.charAt(j)); // charAt(j)Ŕz̐擪jԖڂ̗vfo ^ \bh PrintWriter.print(boolean)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(char)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(int)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(long)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(float)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(double)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(char[])͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(String)͎gpł܂ (��XgƉXg̒قȂ܂) \bh PrintWriter.print(Object)͎gpł܂ (��XgƉXg̒قȂ܂) G[1 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/7.0/userguide/command_line_interface.html#sec:command_line_warnings BUILD FAILED in 1s 3 actionable tasks: 1 executed, 2 up-to-date
該当のソースコード
Java
1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileNotFoundException; 4import java.io.FileReader; 5import java.io.FileWriter; 6import java.io.IOException; 7import java.io.PrintWriter; 8 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14 15@WebServlet("/ImageCounter") 16public class ImageCounter extends HttpServlet { 17 @Override 18 protected void doGet(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException { 20 response.setContentType("text/html; charset=UTF-8"); 21 PrintWriter out = response.getWriter(); 22 out.println("<html><head></head><body>"); 23 int i; 24 25 File f = new File(getServletContext().getRealPath("/WEB-INF/counter.txt")); 26 BufferedReader fin = null; 27 try { 28 fin = new BufferedReader(new FileReader(f)); 29 i = Integer.parseInt(fin.readLine()); 30 } catch (FileNotFoundException // ファイルがなければ 31 | NullPointerException // ファイルが空なら 32 | NumberFormatException e) { // 数でないならば 33 i = 0; // 0 に 34 } finally { 35 if (fin != null) { 36 fin.close(); // closeを忘れない 37 } 38 } 39 40 PrintWriter fout = new PrintWriter(new FileWriter(f)); 41 fout.println(++i); 42 fout.close(); // closeを忘れない 43 44 // ここから下を考える 45 46 String number = String.valueOf(i); // iをint型からstr型に変換する 47 48 int j; 49 int n = number.length(); // 文字列の長さを表す 50 51 out.printf("あなたは "); 52 53 for (j = 0; j < n; j++) { // 文字列の長さ文だけ繰り返す 54 out.print("<img src=\"images/%d.png\" alt=\"%d\">", number.charAt(j), number.charAt(j)); // charAt(j)で配列の先頭からj番目の要素を取り出す 55 } 56 57 out.print("番目の来訪者です。"); 58 out.println("</body></html>"); 59 out.close(); // closeを忘れない 60 } 61}
試したこと
ソースを見返したり、エラーの該当箇所を確認しました。
エラー内容を翻訳しました。
補足情報(FW/ツールのバージョンなど)
エディタ:VScode
コンパイラ:コマンドプロンプト