現在、私は「今日食べた食材を入力するとそれを色の割合として出力してくれる」Webアプリを作っています。
↓大まかな完成図です。こんな感じで食材を入力したら、その食材の色(細かい色は考えず、赤・青・茶など同じような色にカテゴライズします)の割合を、グラフと一緒に出力してくれます。
現在、入力フォームなどの雛形はだいたい作れているのですが、肝心の色を割合として出力する部分がうまくいきません。
そこで、まず、この色を出力するところだけのプラグラミングを書いて、現在作っているものに組み込んでみようと思いました。
↓コードはこちら。2つクラスがあります。
package exercize;
import java.util.List;
public class Ratio {
private double redCount;
private double blueCount;
private double whiteCount;
private double totalCount;
private List<String> colorList;
// コンストラクタ
public Ratio(List<String> colorList) {
this.colorList = colorList;
}
// 「赤」のカウントを数える
public double redcountOccurrences(String redChar) {
for (String c : colorList) {
if (c == redChar) {
redCount++;
}
}
return redCount;
}
// 「青」のカウントを数える
public double bluecountOccurrences(String blueChar) {
for(String c : colorList) {
if(c == blueChar) {
blueCount ++;
}
}
return blueCount;
}
// 「白」のカウントを数える
public double whitecountOccurrences(String whiteChar) {
for(String c : colorList) {
if(c == whiteChar) {
whiteCount ++;
}
}
return whiteCount;
}
// 分母になる取得した配列のすべての数
public double gettotalCount(String redChar, String blueChar, String whiteChar) {
for(String c : colorList) {
if(c == redChar || c == blueChar || c == whiteChar) {
totalCount++;
}
}
return totalCount;
}
// 赤の割合を計算
double getredPercent() {
double redPercent = redCount / totalCount * 100 ;
return redPercent;
}
// 青の割合を計算
double getbluePercent() {
double bluePercent = blueCount / totalCount * 100 ;
return bluePercent;
}
// 白の割合を計算
double getwhitePercent() {
double whitePercent = whiteCount / totalCount * 100 ;
return whitePercent;
}
void display() {
System.out.println("割合は");
}
}
package exercize;
import java.util.ArrayList;
import java.util.List;
public class JavaCalc {
public static void main(String[] args) {
List<String> colorList = new ArrayList<>();
// リストに追加
colorList.add("赤");
colorList.add("赤");
colorList.add("青");
colorList.add("白");
colorList.add("白");
colorList.add("白");
Ratio ratio = new Ratio(colorList);
// カウントしたい文字
String redChar = "赤";
String blueChar = "青";
String whiteChar = "白";
// カウントを数えるメソッドを呼び出し
ratio.redcountOccurrences(redChar);
ratio.bluecountOccurrences(blueChar);
ratio.whitecountOccurrences(whiteChar);
ratio.gettotalCount(redChar, blueChar, whiteChar);
// 計算結果を表示
ratio.display();
System.out.println("赤" + ratio.getredPercent()+"%");
System.out.println("青" + ratio.getbluePercent()+"%");
System.out.println("白" + ratio.getwhitePercent()+"%");
}
}
結果はこのようになります。
割合は
赤33.33333333333333%
青16.666666666666664%
白50.0%
↓ここの部分は、色の数を増やすごとに都度 if文の条件式を追加していかなければならないので、もう少しスマートにかきたいのですが、どうすればいいのかわかりません。
// 分母になる取得した配列のすべての数
public double gettotalCount(String redChar, String blueChar, String whiteChar) {
for(String c : colorList) {
if(c == redChar || c == blueChar || c == whiteChar) {
totalCount++;
}
}
return totalCount;
}
とりあえずは入力された文字(色)をカウントして、その色の割合がどれくらいなのかということを出力することができました。
今度は、これを使ってWebアプリの方に組み込むのですが、そちらではセッションに格納された色の情報を引き出して計算をしなければいけません。今回作ったものを応用して、色の割合を出せるようにしたいです。
また、グラフとして出力する際に、JFreeCharというものを使おうと思ったのですが、うまく表示されなかったので、ここも考えていかないといけません。
コメント