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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1027閲覧

gettter、setterの使い方がいまいちよくわかりません…

tatatana

総合スコア2

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/04/30 02:37

課題で、テキストファイルから単語を読み込み、その単語の数をカウントして表示するプログラムを作成しています。

例) りんご:3回です。

○単語登録用の配列数は6
○それ以上は登録できない
○アクセス制御とパッケージ化を使用する
○全ての処理をmainメソッドだけで行わない
○staticはmainメソッドのみ使用可

○以下は必ず使用
・メインクラス TextWordCounter
・単語登録用配列 tw[]

・単語登録クラス TextWord
・単語 word (文字列) privateで
・回数 cnt (整数) privateで

○その他必要に応じて適宜

getやsetを上手く使用できず、コンパイルは通りますが、単語の登録も出現回数もぬるぽになってしまいます。
とりあえずcount[]を一時的に作成して、先に単語の登録をどうにかしようと試行錯誤しているのですが、どうすればいいのでしょうか。
アドバイスよろしくお願いします。


テキストファイルはこんな感じです↓

りんご
みかん
りんご

ぶどう
りんご
めろん
すいか

きうい
ばなな
みかん
いちご
ざくろ


Java

1import java.io.*; 2import java.util.Scanner; 3import java.util.*; 4import mypackage.TextWord; 5 6 7 8public class Test{ 9 10 void scan(){ 11 12 //変数の定義 13// String tw[] = new String[6]; 14 int i = 0; 15 String s = null; 16 TextWord tw[]= new TextWord[6]; 17 int count[] = new int[tw.length]; 18 19// count[i] = tw[i].getCnt(); 20 21 try{ 22 23 //ファイルを開く 24 Scanner scn = new Scanner ( new File("テキストのファイル名")); 25 26 27 //ファイルの読み込み 28 while( scn.hasNextLine() ) { 29 s =scn.nextLine(); 30 for ( i = 0; i < tw.length; i++ ) { 31 32 //未登録単語の場合 33 if ( tw[i] == null) { 34 if("".equals( s )){ 35 //改行はカウントせずにスルーする 36 }else { 37 tw[i].setWord( s ); 38 count[i] = 1; 39// tw[i].setCnt(1); 40 } 41 break; 42 43 //登録済み単語の場合 44 } else if ( tw[i].equals( s ) ) { 45 count[i]++; 46// tw[i].setCnt(tw[i].getCnt()+1); 47 break; 48 } 49 } 50 51 i++; 52 53 } 54 scn.close(); 55 56 }catch(FileNotFoundException e){ 57 System.out.println("ファイルが存在しません。"); 58 59 } 60 61 // 登録リストの表示 62 try{ 63 for ( i = 0 ; tw[i] != null ; i++ ) { 64 System.out.println( tw[i].getWord() + ":" + count[i] + "回です。" ); 65 } 66 }catch(ArrayIndexOutOfBoundsException e){ 67 System.out.println("登録件数は上限です。"); 68 } 69 70 } 71 72 73 74 75 //実行 76 public static void main ( String [] args ) { 77 78 Test t = new Test(); 79 t.scan(); 80 81 } 82} 83

Java

1package mypackage; 2 3public class TextWord { 4 5 //単語 文字列型 6 private String word = null; 7 8 9 public String getWord(){ 10 return this.word; 11 } 12 13 public void setWord(String word){ 14 this.word = word; 15 } 16 17 //出現回数 整数型 18 private int cnt = 0; 19 20 public int getCnt(){ 21 return this.cnt; 22 } 23 24 public void setCnt(int cnt){ 25 this.cnt = cnt; 26 } 27 28 29} 30

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

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

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

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

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

guest

回答1

0

ベストアンサー

java

1 TextWord tw[]= new TextWord[6];

これでは、「TextWordが6個入る配列」を作っただけで、本体のTextWordが作られていません。
別途TextWordのコンストラクタを呼び出し、TextWordオブジェクトを作成する必要があります。
例えば、こんな感じ。

diff

1//未登録単語の場合 2 if ( tw[i] == null) { 3 if("".equals( s )){ 4 }else { 5+ tw[i] = new TextWord(); //TextWord作成して代入 6 tw[i].setWord( s ); 7 count[i] = 1; 8// tw[i].setCnt(1); 9 } 10 break; 11 12 }

ただ、課題なのかもしれませんが、Mapを使ったほうがわかりやすいのと、
現状のこのコードが、説明するのが面倒になるレベルで結構ひどい惨状になっています。

投稿2021/04/30 03:58

swordone

総合スコア20669

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

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

tatatana

2021/04/30 04:22

なるほど。配列しか作ってなかったのでぬるぽが出てきたのですね。 MapやList?等は使わずに作ることが課題でした…。 無事に解決できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問