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

javaを使って,a列,b列の空白数を数えるプログラムを教えてください.

自分なりに色々と考えてみましたが全くわかりません…
おカぞえ,どうぞよろしくお願いいたします.
初心者のため,具体的に教えていただけるとありがたいです.

以下に途中まで考えたコードを添付いたします.
自分としましては,空白に-9を代入し,後でそれを数えるというような方法を考えました.


import java.io.*;
import java.util.*;
public class PTMain {
public static void main(String[] args) {
try{
BufferedReader fin = new BufferedReader(new FileReader("test.csv"));
String ss ;
String a;
String b;
fin.readLine();
while((ss=fin.readLine())!=null){
StringTokenizer st =new StringTokenizer(ss,",");
a = st.nextToken();
b = st.nextToken();

if (a.equals(null)){
a="-9" ; //もし空白があるなら-9を代入したい
}
if (b.equals(null)){
b="-9" ;
}
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
}
}

/* test.csv
a,b,c,d
5,6,3,
4,,8,1
,6,7,
5,7,8,8
9,1,45,1
6,6,,
,1,8,5
5,4,5,
*/

A 回答 (2件)

EnumMap を使って汎用的にしてみました。



出力:
Series a: 2
Series b: 1
Series c: 1
Series d: 4

import java.io.*;
import java.util.*;
public class QA5312967 {
private enum QA5312967_Series {
a(0)
, b(1)
, c(2)
, d(3)
// , series_name(column)
;
private int col;
private QA5312967_Series(int col) { this.col = col; }
public int getCol() { return this.col; }
}
private static Scanner in;
private static EnumMap<QA5312967_Series, Integer> is_void =
new EnumMap<QA5312967_Series, Integer>(QA5312967_Series.class);
private static int series_size;
private static void init() {
series_size = 0;
for (QA5312967_Series s : QA5312967_Series.values()) {
is_void.put(s, 0); series_size++;
}
}
private static void searchVoid(String[] field) {
for (int i = 0; i < field.length; i++) {
if (!field[i].equals("")) { continue; }
for (QA5312967_Series s : QA5312967_Series.values()) {
if (i == s.getCol()) {
int addee = is_void.get(s);
is_void.put(s, addee + 1);
}
}
}
}
public static void main(String[] args) {
// in = new Scanner(System.in);
try { in = new Scanner(new File("test.csv")); }
catch (Exception e) { e.printStackTrace(); System.exit(1); }
in.nextLine(); // ignore header
init();
while (in.hasNextLine()) {
String[] field = in.nextLine().split("\\s*,\\s*", -series_size);
searchVoid(field);
}
in.close();
StringBuilder sb = new StringBuilder();
for (QA5312967_Series s : QA5312967_Series.values()) {
if (sb.length() > 0) { sb.append("\n"); }
sb.append("Series " + s.name() + ": " + is_void.get(s));
}
System.out.println(sb);
}
}
    • good
    • 0

> 空白に-9を代入し,後でそれを数えるというような



単に空白数を数えるというのが仕様なのだから、空白とわかった時点でカウントアップすればよいのでは。
それがダメな理由があれば、ちゃんと説明を考えてみるとか。
他人に説明できるようになっていれば、それをプログラムに落とし込む事が簡単にできるようになるかと。

(まあ他人に説明するのって、結構難しいと、自分もいっつも感じてます。理解が足りないからでしょうが。)
    • good
    • 0

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