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

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

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

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

Q&A

解決済

1回答

495閲覧

コンストラクタで設定した型の大きさがインスタンス化した時とでサイズが異なってるがなぜか

Seeker

総合スコア33

Java

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

0グッド

0クリップ

投稿2022/07/08 05:47

使用環境
window 10Home
eclipse: 2022-03 
orangesignal-csv-2.2.1

2つのパッケージが用意されていて
一つはコンストラクタで設定したDateベースのクラスを有したものです。
もう一個はそれらを操作するためのMainのものとなっています。

Dateベースで設定したデータをMainで読み取ろうとしてますが、
エラーが出て動かない事態となっています。
エラー内容は 
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 7 out of bounds for length 7

と表示されている事からサイズが異なっていると思われますが、原因がわかりません。
どうすればいいでしょうか

date.DailyDate.java

1 2package date; 3import java.text.SimpleDateFormat; 4import java.time.LocalDate; 5import java.time.format.DateTimeFormatter; 6import java.util.ArrayList; 7import java.util.List; 8 9public class DailyDate extends CSVSet{ 10 11 private static String File="DailyData.csv"; 12 private static LocalDate OneDay; 13 private static int PrefatureNumber; 14 private static String Prefature; 15 private static int TodayInfect; 16 private static int SumInfect; 17 private static int TodayDeath; 18 private static int SumDeateh; 19 private static double WeekHundredThousandInfect; 20 21 public DailyDate(LocalDate oneDay, int prefatureNumber, String prefature, int todayInfect, int sumInfect, 22 int todayDeath, int sumDeateh, double weekHundredThousandInfect) { 23 24 OneDay = oneDay; 25 PrefatureNumber = prefatureNumber; 26 Prefature=prefature; 27 TodayInfect = todayInfect; 28 SumInfect = sumInfect; 29 TodayDeath = todayDeath; 30 SumDeateh = sumDeateh; 31 WeekHundredThousandInfect = weekHundredThousandInfect; 32 } 33 34 private static ArrayList<ArrayList<String>> DailyDateSet (String File){ 35 36 ArrayList<ArrayList<String>> DailyDateSet = new ArrayList<ArrayList <String>>(); 37 DailyDateSet=CSVSet.Date(File); 38 return DailyDateSet; 39 } 40 41 public static List<DailyDate> GetDailyDate(){ 42 43 ArrayList<ArrayList<String>> PrefatureSet =DailyDateSet(File); 44 List<DailyDate> GetDailyDate=new ArrayList<>(); 45 46 for(int RowCount=1;RowCount<PrefatureSet.size();RowCount++) { 47 48 GetDailyDate.add(new DailyDate(CallOneDay(RowCount),CallPrefatureNumber(RowCount),CallPrefature(RowCount),CallTodayInfect(RowCount),CallSumInfect(RowCount),CallTodayDeath(RowCount),CallSumDeateh(RowCount),CallWeekHundredThousandInfect(RowCount))); 49 50 } 51 52 return GetDailyDate; 53 54 } 55 56 private static LocalDate CallOneDay(int Index) { 57 58 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 59 DateTimeFormatter fmt=DateTimeFormatter.ofPattern("yyyy/MM/dd"); 60 String Item=DailyDateSet.get(Index).get(0); 61 LocalDate OneDay=LocalDate.parse(Item,fmt); 62 return OneDay; 63 } 64 65 private static int CallPrefatureNumber(int Index) { 66 67 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 68 int PrefatureNumber=Integer.parseInt(DailyDateSet.get(Index).get(1)); 69 return PrefatureNumber; 70 } 71 72 private static String CallPrefature(int Index) { 73 74 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 75 String Prefature=DailyDateSet.get(Index).get(2); 76 return Prefature; 77 } 78 79 private static int CallTodayInfect(int Index) { 80 81 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 82 int TodayInfect=Integer.parseInt(DailyDateSet.get(Index).get(3)); 83 return TodayInfect; 84 } 85 86 private static int CallSumInfect(int Index) { 87 88 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 89 int SumInfect=Integer.parseInt(DailyDateSet.get(Index).get(4)); 90 return SumInfect; 91 } 92 93 private static int CallTodayDeath(int Index) { 94 95 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 96 int TodayDeath=Integer.parseInt(DailyDateSet.get(Index).get(5)); 97 return TodayDeath; 98 } 99 100 private static int CallSumDeateh(int Index) { 101 102 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 103 int SumDeateh=Integer.parseInt(DailyDateSet.get(Index).get(6)); 104 return SumDeateh; 105 } 106 107 private static double CallWeekHundredThousandInfect(int Index) { 108 109 ArrayList<ArrayList<String>> DailyDateSet =DailyDateSet(File); 110 double WeekHundredThousandInfect=Double.parseDouble(DailyDateSet.get(Index).get(7)); 111 return WeekHundredThousandInfect; 112 } 113 114 public static LocalDate getOneDay() { 115 return OneDay; 116 } 117 118(以下略) 119

excit.Main.java

1package excit; 2 3import java.util.List; 4 5import date.DailyDate; 6 7public class Main { 8 9 public static void main(String[] args) { 10 List<DailyDate> Daily=date.DailyDate.GetDailyDate(); 11 List<DailyDate>DailySetList=(List<DailyDate>) Daily.stream() 12 .filter(answer -> "北海道".equals(((DailyDate) Daily).getPrefature())); 13 14 System.out.println(DailySetList.get(0)); 15 } 16 17}

関係あるか不明だが、DailyDateのセットの元となっているCSVSetも公開します

date.CSVSet.java

1package date; 2import java.io.BufferedReader; 3import java.io.File; 4import java.io.FileInputStream; 5import java.io.FileNotFoundException; 6import java.io.IOException; 7import java.io.InputStreamReader; 8import java.nio.charset.Charset; 9import java.util.ArrayList; 10import java.util.Arrays; 11import java.util.HashSet; 12import java.util.List; 13import java.util.Set; 14 15public class CSVSet { 16 17 protected static ArrayList<ArrayList<String>> Date (String file_name){ /////指定したファイルを文字リストのリスト型として読み込む 18 19 ArrayList<String[]> Origindate =new ArrayList<String[]>(); 20 ArrayList<ArrayList<String>> Date = new ArrayList<ArrayList <String>>(); 21 BufferedReader br=null; 22 23 try { 24 File file=new File(file_name); 25 br=new BufferedReader(new InputStreamReader(new FileInputStream(file),Charset.forName("MS932"))); 26 27 28 String line; 29 30 try { 31 while((line=br.readLine()) != null) { 32 33 Origindate.add(line.split(",")); 34 35 } 36 } catch (IOException e) { 37 // TODO 自動生成された catch ブロック 38 e.printStackTrace(); 39 } 40 41 42 for(int RowCount=0;RowCount<Origindate.size();RowCount++) { 43 44 String[] cher=Origindate.get(RowCount); 45 List<String> PreList=Arrays.asList(cher); 46 ArrayList<String> NewList=new ArrayList<String>(PreList); 47 Date.add(NewList); 48 } 49 50 51 } catch (FileNotFoundException e) { 52 System.out.println("ファイルが見つかりません"); 53 e.printStackTrace(); 54 } 55 56 57 58 return Date; 59 60 } 61 62 protected static int RefaranceColumnNumber (String TargetWard,ArrayList<ArrayList<String>> Date) {/////指定したワードをもとに参照先の数字を読み込む 63 64 int RefaranceColumnNumber=0; 65 66 while(Date.get(0).get(RefaranceColumnNumber).equals(TargetWard) || RefaranceColumnNumber==((CharSequence) Date.get(0)).length()) { 67 68 RefaranceColumnNumber++; 69 } 70 71 if(RefaranceColumnNumber==((CharSequence) Date.get(0)).length()){ 72 73 System.out.println("該当のコラム名はありません"); 74 System.exit(0); 75 76 } 77 78 return RefaranceColumnNumber; 79 80 } 81 82 protected static ArrayList<String>SelectColumn(int RefaranceColumnNumber,ArrayList<ArrayList<String>> Origin){//////参照先の数字からコムボックスに渡す値をセットする 83 84 ArrayList<String> PreSelectColumn=new ArrayList<String>(); 85 86 for(int i=0;i<Origin.size();i++) { 87 88 PreSelectColumn.add(Origin.get(i).get(RefaranceColumnNumber)); 89 90 } 91 92 Set<String> SetPreSelectColumn=new HashSet<String>(PreSelectColumn); 93 ArrayList<String> SelectColumnSet=new ArrayList<String>(SetPreSelectColumn); 94 return SelectColumnSet; 95 } 96 97 98 99 100 protected static ArrayList<String> FastColumn(ArrayList<ArrayList<String>> Origin){////一列目に記載されているコラム名からカムボックスに入れる要素をすべて取り出す 101 102 103 ArrayList<String> FastColumn=new ArrayList<String>(); 104 105 for(int i=0;i<Origin.get(0).size();i++) { 106 107 FastColumn.add(Origin.get(0).get(i)); 108 109 } 110 111 return FastColumn; 112 113 } 114 115} 116

エラーの詳細も示します。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 7 out of bounds for length 7 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302) at java.base/java.util.Objects.checkIndex(Objects.java:359) at java.base/java.util.ArrayList.get(ArrayList.java:427) at date.DailyDate.CallWeekHundredThousandInfect(DailyDate.java:109) at date.DailyDate.GetDailyDate(DailyDate.java:47) at excit.Main.main(Main.java:10)

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

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

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

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

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

int32_t

2022/07/08 06:14

データの北海道の行はどうなってますか。
int32_t

2022/07/08 06:41

いや北海道関係ないですね。入力のCSVデータをぜんぶ開示してください。
ozwk

2022/07/08 07:44 編集

元データはちゃんと8列ありますか? あるとしたら、プログラムで加工されていく流れのどの段階で7列になっていますか?
Seeker

2022/07/08 17:46

すいません。確認しました所、8列目の所のデータに欠損箇所が見つかりました。 その後、欠損箇所に臨時で適当な値を入れました所、無事読み取ることができました。 お騒がせして、申し訳ありませんでした。
guest

回答1

0

自己解決

8列目の所のデータに欠損箇所が見つかりました。
その後、欠損箇所に臨時で適当な値を入れました所、無事読み取ることができました。
お騒がせして、申し訳ありませんでした。

投稿2022/07/08 17:48

Seeker

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問