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

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

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

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

Q&A

解決済

1回答

729閲覧

関数内でのArrayIndexOutOfBoundsExceptionの解消

kuusuoou

総合スコア8

Java

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

0グッド

0クリップ

投稿2019/08/07 03:04

前提・実現したいこと

javaで関数からファイル入出力を行い、コレクションに格納するプログラムを作っています
その際にファイル入力の関数を定義するところで定義外の範囲が呼び出されていると怒られました

発生している問題・エラーメッセージ

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at KadaiO.read(KadaiO.java:61) at KadaiO.main(KadaiO.java:31)

該当のソースコード

java

1 char[] card=cards.toCharArray(); 2 3 if(card[0]=='R'){ 4 encryption=true; 5 read(args); 6 System.out.println("Next"); 7 } 8 9 else if(card[0]=='W'&&encryption==true){ 10 write(args); 11 System.out.println("Next"); 12 } 13 else if(card[0]=='C'&&encryption==true){ 14 comp(args); 15 break; 16 } 17 else if(card[0]=='W'||card[0]=='C'){ 18 System.out.println("No data..."); 19 } 20 21 22 else{ 23 System.out.println("R,WorC"); 24 System.out.println("R:read and enccrytion"); 25 System.out.println("W:write"); 26 System.out.println("C:write after composition"); } 27 } 28 29//関数はこちらです 30 static void read(String[] args){ 31 try (FileReader fr = new FileReader(args[0]); 32 BufferedReader brr = new BufferedReader(fr); 33 Scanner scr = new Scanner(brr); 34 FileWriter fw = new FileWriter(args[1]); 35 BufferedWriter bw = new BufferedWriter(fw)) { 36 String n1; 37 leng=0; 38 while(scr.hasNext()){ 39 n = scr.next(); 40 c=n.toCharArray(); 41 while(n.length()>leng){ 42 c[leng]+=3; 43 leng++; 44 } 45 n1=new String(c); 46 word.add(n1); 47 leng=0; 48 } 49 } catch (FileNotFoundException e) { 50 e.printStackTrace(); 51 } catch (IOException e) { 52 e.printStackTrace(); 53 } 54 55 } 56 57

試したこと

Scannerの列でエラーメッセージが出ていたので関数名を変えたり配列の要素となる部分がどこか探しました

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

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

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

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

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

jimbe

2019/08/07 03:19

> Scannerの列でエラーメッセージが出ていたので Scanner scr = new Scanner(brr) では ArrayIndexOutOfBoundsException は発生しないと思います. 発生場所を特定する作業を行っては如何でしょうか.
kuusuoou

2019/08/08 04:40

args[1]が入力されてないのが原因でした 他にもエラーが出ているので正しいエラーの発生場所を探してみたいと思います アドバイスありがとうございます
guest

回答1

0

ベストアンサー

args[1]が入力されていないからだと推測します。

argsはコマンドライン引数を格納する配列なのでargs[1]を取得できるようにするためには下記のように実行する必要があります。

コマンドプロンプトの場合

java KadaiO 引数1 引数2
(この場合、args[0]"引数1"args[1]"引数2"という文字列を抱えます)

Eclipseの場合

Eclipseでコマンドライン引数を与えて実行する方法

投稿2019/08/07 03:09

編集2019/08/07 03:11
BluOxy

総合スコア2663

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

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

kuusuoou

2019/08/08 04:42

args[1]を入力したら解消できました ありがとうございます args[1]の入力方法もわかりやすくて助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問