old « unDonut不調 | メイン | samurize (サムライズ) » new

java 2101, 2102, 2103

2006年12月07日

関係ない人からの閲覧の方が多いような気がしてならないのですが、友人需要があるとの事なので掲載続行。

ちなみに、4問目はメソッドの仕様がいまいちよく分からなかったのでテスト通りませんでした。
やり方が分からないのではなく、何をやらせればよいのかが分からない。
もう少し仕様を詳しく書いてくれると嬉しいのだけど。

package j2.lesson08;

import java.io.*;
import java.util.HashMap;

public class HalReader extends java.io.Reader {

BufferedReader reader;

HashMap list = new HashMap();

// コンストラクタ
// 暗号化された Reader を指定して、
// そのストリームに接続された暗号を復号化する Reader を作成する。
public HalReader(java.io.Reader cipher) throws IOException {
reader = new BufferedReader(cipher);
}

// コンストラクタに渡された Reader から一文字読み込み、読み込んだ内容を復号化して返す。
// コンストラクタに渡された Reader が終端に達していた場合、-1を返す。
public int read() throws IOException {
// read()は -1 または 0~65535 の値が返ってくる
int c = reader.read();

// 結果が -1 なら、ファイルを最後まで読み終わった
if (c == -1) {
// -1を返す
return c;
}
// 最後でなければ
else {
return hukugou(c);

}
}

// コンストラクタに渡された Reader から cbuf.length 文字読み込み、
// 読み込んだ内容を復号化して cbuf[0] から cbuf[cbuf.length - 1] に保存し、
// 実際に読み込んだ文字数を返す。コンストラクタに渡された Reader が終端に達していた場合、-1を返す。
public int read(char[] cbuf) throws IOException {
for (int i = 0; i < cbuf.length; i++) {
if (reader.read() == -1)
return -1;
else
cbuf[i] = (char) hukugou(reader.read());
}
return cbuf.length;
}

// コンストラクタに渡された Reader から len 文字読み込み、
// 読み込んだ内容を復号化して cbuf[off] から cbuf[off + len -1] に保存し、実際に読み込んだ文字数を返す。
// コンストラクタに渡された Reader が終端に達していた場合、-1を返す。
public int read(char[] cbuf, int off, int len) throws IOException {
for (int i = off; i < off + len; i++) {
if (reader.read() == -1)
return -1;
else
cbuf[i] = (char) hukugou(reader.read());
}
return len;
}

// コンストラクタに渡された Reader を閉じる
public void close() throws IOException {
reader.close();
}

public static int hukugou(int c) {
// 小文字の場合
if (c >= 97 && c <= 122) {
if (c == 122)
c = 97;
else
c += 1;

}
// 大文字の場合
if (c >= 65 && c <= 90) {
if (c == 90)
c = 65;
else
c += 1;
}
// 数字の場合
if (c >= 48 && c <= 57) {
if (c == 57)
c = 48;
else
c += 1;
}
return c;
}

// サンプルプログラム
public static void main(String[] args) throws IOException {

HalReader reader = new HalReader(new FileReader("E:/angou3.txt"));
char[] ch = new char[7];
try {
int i = 0;
while (true) {
int c = reader.read();
if (c == -1) {
break;
}
System.out.print((char) c);
i++;
}
} finally {
reader.close();
}

}

}
package j2.lesson08;

import java.io.*;

public class TextCopier {
// プログラム全体
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));

// print "コピー元のファイル名を入力:"
System.out.print("コピー元のファイル名を入力:");
// src = コンソール入力 (String)
String src = reader.readLine();
// print "コピー先のファイル名を入力:"
System.out.print("コピー先のファイル名を入力:");
// dst = コンソール入力 (String)
String dst = reader.readLine();

// エラー判定用変数
boolean error = false;

try {
// copy(src, dst)
copy(src, dst);
}
catch (IOException e) {
error = true;
}
// if copy(src, dst) を実行中に例外が発生しなかった
if (!error) {
// print src + "から" + dst + "にコピーしました。", 改行
System.out.println(src + "から" + dst + "にコピーしました。");
}
// else
else {
// print src + "から" + dst + "にコピーできませんでした。", 改行
System.out.println(src + "から" + dst + "にコピーできませんでした。");
}

}

// srcからdstにテキストファイルの内容をコピーする。
public static void copy(java.lang.String src, java.lang.String dst)
throws java.io.IOException {

BufferedReader reader = new BufferedReader(new FileReader(src));
BufferedWriter writer = new BufferedWriter(new FileWriter(dst));

while (true) {
String line = reader.readLine();
// 最後の行ならループ抜け
if (line == null)
break;
// dstにlineを書き込む+改行
writer.write(line);
writer.newLine();
}
// ファイルを閉じる
reader.close();
writer.close();
}
}
package j2.lesson08;

import java.io.*;
import java.util.*;

public class ScoreList {

// 学籍番号
String no;
// 名前
String name;
// 得点
int score;
// リスト
List list;

// コンストラクタ
public ScoreList(java.lang.String filename) throws java.io.IOException {

list = new ArrayList();

// ファイルを読み込む
BufferedReader file = new BufferedReader(new FileReader(filename));
while (true) {
// 1行読み込む
String line = file.readLine();

// 最後の行ならループを抜ける
if (line == null)
break;

int index;
// 読み込みを三回繰り返す
for (int i = 0; i < 3; i++) {
// カンマの位置を探す
index = line.indexOf(",");
// 最後のデータでなければ
if (index != -1) {
if (i == 0) {
//最初のデータならno
no = line.substring(0, index);
} else if (i == 1) {
//2番目のデータならname
name = line.substring(0, index);
}
// lineからno/nameを切り抜いた文字列をlineとする。
line = line.substring(index + 1, line.length());
} else {
// 最後のデータならscore
score = Integer.parseInt(line);
}
}
// 取得したデータをStudent型のインスタンスとしてlistに追加
list.add(new Student(no, name, score));
}
}

// 一覧に含まれる全ての学生を Student 型を格納している List で取得する。
// List 内の順序は、コンストラクタに指定したファイルに記述されている順番に等しい。
public java.util.List getAllStudent() {
return list;
}

// 一覧に含まれる学生のうち、gradeで指定した成績を持つ学生を取得する。
// このクラスが返す List は該当する学生を表す Student クラスのインスタンスを全て含む。
// List 内の順序は、コンストラクタに指定したファイルに記述されている順番に等しい。
public java.util.List getStudents(char grade) {
List listGrade = new ArrayList();

// listに含まれるStudentの数だけループ
for (int i = 0; i < list.size(); i++) {
//student = リストのi番目のStudent型データ
Student student = (Student) list.get(i);
//studentのgradeが指定されたgradeと一致すればlistGradeに追加
if (student.getGrade() == grade) {
listGrade.add(student);
}
}
return listGrade;
}

// サンプルプログラム
public static void main(String[] args) {
ScoreList slist;
try {
slist = new ScoreList("U:/csv1.txt");
} catch (IOException e) {
System.out.println("fileが開けません");
return;
}
List all = slist.getAllStudent();
System.out.println("全体の人数=" + all.size());
List as = slist.getStudents('A');
printList('A', as);
List bs = slist.getStudents('B');
printList('B', bs);
List cs = slist.getStudents('C');
printList('C', cs);
List ds = slist.getStudents('D');
printList('D', ds);
}

private static void printList(char grade, List list) {
System.out.println(grade + "の学生:");
for (int i = 0; i < list.size(); i++) {
System.out.println(" " + list.get(i));
}
}

}

old « unDonut不調 | メイン | samurize (サムライズ) » new

トラックバックURL

このエントリーのトラックバックURL:
https://blog.hp-improve.com/mt/mt-tb.cgi/183

コメントする