dポイントプレゼントキャンペーン実施中!

この前学校からJavaの課題が出まして、全くわかりません。
<テストクラス>(ファイル名:Test.java)

<フィールド>
なし

<メソッド>
1.メインメソッド
「ここからはテストクラスの流れを書きます」
・アドレスサーチクラスを生成
・アドレスサーチクラスのInitialize()メソッドを呼ぶ
・アドレスサーチクラスのSearchName()メソッドを呼ぶ
・検索結果を表示する

<アドレスサーチクラス>(ファイル名:AddressSearch.java)

<フィールド>
1.アドレス配列(3000個分)

<メソッド>
2.住所録ファイル入力設定
(メソッド名)
public void Initialize()
「ここからはテストクラスの流れを書きます」
・住所録ファイルから1行目入力
・1行を各項目に分解
・アドレスクラスのインスタンスを生成
・アドレスクラスのインスタンスに分解した各項目を設定
・アドレス配列にインスタンスを格納

3.氏名検索
(メソッド名)
public Address SearchName(String name)
「ここからはテストクラスの流れを書きます」
・アドレス配列から氏名を探す
・一致した氏名のインスタンスを戻す
 一致しない場合、nullを返す

長くなりました。このような条件でプログラムを作るのは私にはあまりわかりませんでした。googleなどで検索してもあまり良い情報がありません。もしこの問題が解ける方がいらっしゃるなら、ぜひアドバイスやプログラムなどを教えてくれたらありがたいです。

A 回答 (4件)

Java 勉強中です。


Test.java、AddressSearcher.java、Address.java、address.dat と
4つ、ファイルがあります。
全角の空白でインデントしてます。

address.dat:
taro, tokyo
hanako, hokkaido
jiro, aichi
sumire, osaka


Address.java:
public class Address implements Comparable<Address> {
 private String address = new String();
 private String name = new String();
 public Address(String name, String address) {
  this.name = name;
  this.address = address;
 }
 public boolean equals(Address other) {
  return (this.name).equals(other.getName());
 }
 public String getAddress() {
  return address;
 }
 public String getName() {
  return name;
 }
 @Override
 public String toString() {
  return "Address [name=" + name + ", address=" + address + "]";
 }
 public int compareTo(Address other) {
  if (this.equals(other)) return 0;
  return (this.name).compareTo(other.getName());
 }
}


AddressSerch.java:
import java.io.*;
import java.util.*;
public class AddressSearch {
 private static final int N = 3000;
 private static final String DATA_FILE = "address.dat";
 private Address[] data = new Address[N];
 public AddressSearch() {
  this.data = new Address[N];
  for (int i = 0; i < N; i++) data[i] = new Address("","");
 }
 @SuppressWarnings("resource")
 public void initialize() throws FileNotFoundException {
  Scanner line = new Scanner(new File(DATA_FILE));
  int i = 0;
  while (line.hasNextLine()) {
   Scanner field = new Scanner(line.nextLine()).useDelimiter("\\s*,\\s*");
   String name = field.next();
   String address = field.next();
   data[i++] = new Address(name, address);
   //System.out.println(data[i - 1]);
  }
  Arrays.sort(data);
 }
 public Address searchAddress(String name) {
  int found = Arrays.binarySearch(data, new Address(name, ""));
  if (found < 0 || found >= N) return null;
  return data[found];
 }
}


Test.java:
import java.io.*;
import java.util.*;
public class Test {
 private static void search(AddressSearch searcher, String name) {
  System.out.println("Search: " + name);
  Object found = searcher.searchAddress(name);
  if (found == null) { System.out.println("not found."); return; }
  //System.out.println((Address) found);
  System.out.println(((Address) found).getAddress());
 }
 public static void main(String[] args) {
  AddressSearch searcher = new AddressSearch();
  try { searcher.initialize(); }
  catch (FileNotFoundException e) {
   System.err.println("address database not found.");
   System.exit(1);
  }
  if (args.length > 0) {
   for (int i = 0; i < args.length; i++) { search(searcher, args[i]); }
  }
  else {
   Scanner in = new Scanner(System.in);
   System.out.print("? ");
   String name = in.next();
   search(searcher, name);
  }
 }
}
    • good
    • 0

まずはできるところまで書きなさい。


そして質問はポイントを絞ること。


課題の丸投げは誰も相手してくれないわ。
がんばって。
    • good
    • 0

>>この前学校からJavaの課題が出まして、全くわかりません。



学校の授業にちゃんと出席されていますか?教科書は読んでいますか?バイトやサークル活動ばかりされてはいませんか?

もし、きちんと授業に出席し、さらに予習や復習をやるとか、授業の後、疑問点を先生に質問したり、ネットで調べたりやっていたのに、こういうレベルの質問をせざるを得ないなら、このJavaの課題は、質問者さんにとって、とても役にたつものだと思います。
つまり、質問者さんがIT業界に向いていない、適性の無いことを教えてくれているものかもしれません。


ただ、課題のJavaを見ると、質問者さんに同情する面もあります。一般的に「C言語のポインターは難しい」とされていて、ポインタ解説をメインとしたCの書籍が何冊も出版されたり、パソコン雑誌の特集記事に何度も取り上げられるくらいの難易度があります。

そして、なぜか「Javaにはポインターは無い」という神話があったりします。しかし、Javaは「ポインタと言う用語が無いだけであり、ポインタしか無い言語である。ポインターを参照と言い換えているだけである。」といってもよい言語です。C言語を理解しC++を使いこなせるレベルの(高度な)プログラマと同等の知識レベルを質問者さんは、いきなりJavaの課題で要求されているといえるかもしれません。

例えれば、中学生時代の一次方程式でつまずいた学生が、数学で微分・積分の課題を前にしたようなものかもしれません。個人的なお薦めは、C言語を勉強したのち、Cのポインターを理解し、さらにC#かC++のクラスを学ばれるといいかもしれません。(ちなみに、私の周囲では、C,C++,C#にVBの仕事はありますが、Javaの仕事はありません。私のいる職場に来るなら、Javaは捨ててもいいです(笑))

P.S.
昨日購入した「More Joel on Software/Joel Spolsky著」という本の中に

「ほとんどのプログラマはエキサイティングな新しいテクノロジを使って仕事をするチャンスが得られることを望んでいる。今日ではそれはPythonとかRuby on Railsといったところだ。3年前はC#で、その前はJavaだった(同書P.29-30)」(注:これは2006/09/07のblogの引用)

という記述がありました。
    • good
    • 0

そりゃ、勉強せずに分かる人はいない。


勉強して、分からないことを具体的に質問しなよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!