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

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

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

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

Q&A

解決済

1回答

561閲覧

toUpperCase と toLowerCase を実装したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/07/22 22:49

前提・実現したいこと

MStringObj の #toUpperCase と #toLowerCase を実装したいのですが、うまくいきません。

発生している問題・エラーメッセージ

MStringObj.java:115: エラー: クラス MStringObjのメソッド charAtは指定された型に 適用できません。 char a = this.charAt(); ^ 期待値: int 検出値: 引数がありません 理由: 実引数リストと仮引数リストの長さが異なります MStringObj.java:116: エラー: charは間接参照できません char[] b = a.toUpperCase(); ^ MStringObj.java:117: エラー: MStringはabstractです。インスタンスを生成することは できません return new MString(b); ^ MStringObj.java:126: エラー: 不適合な型: charをchar[]に変換できません: char[] a = this.charAt(i); ^ MStringObj.java:127: エラー: シンボルを見つけられません char[] b = a.toLowerCase(); ^ シンボル: メソッド toLowerCase() 場所: タイプchar[]の変数 a MStringObj.java:129: エラー: シンボルを見つけられません return new MStringObj(b); ^ シンボル: 変数 b 場所: クラス MStringObj エラー6個

該当のソースコード(MStringObj)

Java

1public class MStringObj implements MString { 2 3 private char[] chars; 4 5 public MStringObj(char[] chars) { 6 if (chars == null) { 7 throw new IllegalArgumentException(); 8 } 9 10 this.chars = chars; 11 } 12 13 public MStringObj() { 14 this.chars = new char[0]; 15 } 16 17 public char[] getChars() { 18 return this.chars; 19 } 20 21 public char charAt(int i) { 22 char[] a = new char[i]; 23 return a[i]; 24 } 25 26 public int length() { 27 return this.chars.length; 28 } 29 30 public boolean contains(char c) { 31 for (int i = 0; i < chars.length; i++) { 32 if (chars[i] == c) { 33 return true; 34 } 35 } 36 return false; 37 } 38 39 public int count(char c) { 40 int x = 0; 41 for (int i = 0; i < chars.length; i++) { 42 if (chars[i] == c) { 43 x++; 44 } 45 return x; 46 } 47 } 48 49 public char[] toCharArray() { 50 return this.chars; 51 } 52 53 public MString append(MString s) { 54 char[] a = s.toCharArray(); 55 char[] b = new char[this.chars.length + a.length]; 56 return new MStringObj(b); 57 } 58 59 public MString replace(MString find, MString replace) { 60 char[] a = find.toCharArray(); 61 char[] b = replace.toCharArray(); 62 char[] c = new char[this.chars.length - a.length + b.length]; 63 return new MStringObj(c); 64 } 65 66 public Integer firstOccurrence(char c) { 67 int x = x; 68 if (this.contains(c) == false) { 69 return null; 70 } else { 71 for (int i = 0; i < chars.length; i++) { 72 if (chars[i] == c) { 73 x = i; 74 } 75 return x; 76 } 77 } 78 } 79 80 public Integer firstOccurrence(MString s) { 81 int x = x; 82 char[] a = s.toCharArray(); 83 if (a.length == 0) { 84 return null; 85 } 86 if (chars.length == a.length) { 87 return null; 88 } else { 89 for (int i = 0; i < chars.length; i++) { 90 x = i; 91 return x; 92 } 93 } 94 } 95 96 public MString substring(int start, int len) { 97 char[] a = new char[start]; 98 char[] b = new char[len]; 99 char[] c = new char[b.length - a.length]; 100 return new MStringObj(c); 101 } 102 103 public char[] toUpperCase() { 104 return this.chars; 105 } 106 107 public char[] toLowerCase() { 108 return this.chars; 109 } 110 111 public MString uppercase() { 112 if (this.chars.length == 0) { 113 return null; 114 } else { 115 char a = this.charAt(); 116 char[] b = a.toUpperCase(); 117 return new MString(b); 118 } 119 } 120 121 public MString lowercase() { 122 if (this.chars.length == 0) { 123 return null; 124 } else { 125 for (int i = 0; i < chars.length; i++) { 126 char[] a = this.charAt(i); 127 char[] b = a.toLowerCase(); 128 } 129 return new MStringObj(b); 130 } 131 } 132 133}

補足情報(FW/ツールのバージョンなど)

よろしくお願い致します。

ちなみに、この質問とは直接関係がないのですが、ここにコードをコピペする時に、なぜか階層がずれてしまうのですが、なぜでしょうか。毎回修正しないといけないのが大変です。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/22 22:53

崩れる?スペースとタブは違うよ
退会済みユーザー

退会済みユーザー

2018/07/23 00:50

気を付けます。
guest

回答1

0

ベストアンサー

ほぼエラーメッセージに書いてあるとおりだと思いますよ。
エラーが出てしまうとびっくりするかもしれませんがエラーの理由とエラーが起きている場所が示されているので、一つ一つ見ていって解決してみてください。

// エラーが発生しているプログラムの中の場所 // MStringObj.java:115 <-- MStringObj.javaの115行目ということ MStringObj.java:115: エラー: クラス MStringObjのメソッド charAtは指定された型に適用できません。 char a = this.charAt(); ^ 期待値: int 検出値: 引数がありません 理由: 実引数リストと仮引数リストの長さが異なります // charAt()に引数としてintの値が必要なのに引数を入れていないということを言っています。

ちなみに、MStringの詳細がわからないですが、Stringから派生しているのであればuppercaseやlowercase,substringなどはStringクラスの関数呼べば良いだけのような気がします。

投稿2018/07/23 00:00

euledge

総合スコア2404

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

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

swordone

2018/07/23 00:10

Stringはfinalクラスなので派生はできないです。 前からの質問を見る限り、Stringクラスを自作しているようです。
euledge

2018/07/23 00:28

@swordoneさん、コメントフォローありがとうございます。 > 派生できない。 ああ確かにそうですね。 > Stringクラスを自作しているようです。 そうなんですね、なぜ文字列操作クラスを作ってるのか疑問でした。
退会済みユーザー

退会済みユーザー

2018/07/23 00:55

ありがとうございます。ひとつひとつ確認してみると、エラーを解消できました。 まだプログラミングを始めたばかりで、実用的なことというよりかは、概念?について学んでいる段階なので、いろいろやってみています。
euledge

2018/07/23 01:14

@Egupiiさん 最初はトライ&エラーを繰り返すことで、自分の身に染み込ませることが出来ると思いますのでがんばってください。
退会済みユーザー

退会済みユーザー

2018/07/23 04:52

ありがとうございます。頑張ります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問