2016-04-18 14 views
1

おはようございます。私はちょうどこれと何をするべきか質問したいと思います。 区切り文字 "/"を使わずに入力したすべての日付を表示できるプログラムを作成したいので分割を使用しましたそれを行う方法。私がやりたい、この何より明確にする:java配列変数の初期化

Input 
Enter Date:10/11/1994 
Enter Date:11/10/2008 
Enter Date:12/12/2010 
Enter Date:08/12/1999 
Enter Date:09/10/2005 

Output: 
10 11 1994 
11 10 2008 
12 12 2010 
08 12 1999 
09 10 2005   

問題は、私はそれが実際に私は初期化は、私が何を使用しますしないでください、私はcomp変数を初期化する必要があると述べているSystem.out.println(comp[ctr1]);でエラー を持っていることです。車輪の再発明なぜ事前に感謝は

String[] date=new String[5]; 
String[] comp; 
int mm, dd, yyyy; 
for(int ctr=0;ctr<date.length;ctr++){ 
    System.out.print("Enter Date: "); 
    date[ctr]=input.nextLine(); 
    comp=date[ctr].split("/"); 
    mm=Integer.parseInt(comp[0]); 
    dd=Integer.parseInt(comp[1]); 
    yyyy=Integer.parseInt(comp[2]); 
} 
for(int ctr1=0;ctr1<date.length;ctr1++){ 
    System.out.println(comp[ctr1]); 
} 
+3

と 'String []型COMP =新しいString [5]'との誤差は何でしたか? – Tom

+1

投票誤植としてクローズする/ String []型COMP =新しい文字列 'ので、再現することはできません[5]'作品とOPはそれを試してみました(?)。 – Tunaki

+0

それは実行時には、ArrayIndexOutOfBoundsExceptionを言うcomp'は、各日付を格納するために使用される 'のでaswell DAEの各splittetの一部として、発生しますフォローアップ' ArrayIndexOutOfBoundException'、話して –

答えて

0

最初に、String[] comp=new String[5]が動作しますが、コンパイラエラーが削除されます。アレイの長さ外の配列のインデックスにアクセスしているため、フォローアップエラーが発生します。技術的にはこのshouldn'tは宣言String[] comp=new String[5]があなたの配列を使用して、第2のループ条件として使用date配列と同じ大きさを持つようになりますので、発生します。しかし、あなたの間違いは最初のループの中で起こります。

アレイを再初期化します。入力が正しい場合は、サイズ5ではなく、3になります。 2番目のループはdate配列を条件として使用しますが、サイズはまだ5ですが、新たに割り当てられた配列の長さを超えている34の配列にアクセスしようとします。それは問題の原因となるコードです。comp=date[ctr].split("/");

あなたの方法を使って、配列を2d配列に入れて、日付の量と日付の部分を格納することをお勧めします。

コードは、この今のように見えるかもしれない:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    String[] date=new String[5]; 
    // make comp a 2d Array 
    String[][] comp = new String[5][]; 
    int mm, dd, yyyy; 
    for(int ctr=0;ctr<date.length;ctr++){ 
     System.out.print("Enter Date: "); 
     date[ctr]=input.nextLine(); 
     // At index ctr store the different parts of the date 
     comp[ctr]=date[ctr].split("/"); 
     // This three steps can cause an ArrayOutOfRangeException, 
     // because the indexes 0,1,2 are depending on how many elements the split returned 
     // You might want to add this here, but i´ll leave it out. 
     // But since you never use mm, dd and yyyy you may aswell leave it out 
     mm=Integer.parseInt(comp[ctr][0]); 
     dd=Integer.parseInt(comp[ctr][1]); 
     yyyy=Integer.parseInt(comp[ctr][2]); 
    } 
    for(int ctr1=0;ctr1<date.length;ctr1++){ 
     for(int j = 0;j<comp[ctr1].length;++j) { 
      System.out.println(comp[ctr1][j] + " "); 
     } 
    } 
} 
+0

私はそれが..になるように今実行している助けてくれてありがとうございました どうすればこの日付を昇順または降順にソートしたいですか? bubblesortメソッドを使用してソートすることはできますか?私はこの先週しか学んだことがないので、日付/時刻入力などの入力にどのように入力するのかを完全には理解できていません。 –

+0

@ NEETRX-78あなたは単に 'comp'配列をループしています。 0-2'となる。 – SomeJavaGuy

1

.. ..私はString[] comp=new String[date]String[] comp=new String[5]を使用してみましたが、それはまだエラーですか?宿題?あなたの目標を達成するためにJavaツールを使用しないのはなぜですか?

DateFormat input = new SimpleDateFormat("MM/dd/yyyy"); 
DateFormat output = new SimpleDateFormat("MM dd yyyy"); 

Date d = input.parse("10/11/1994"); 
System.out.println(output.format(d)); 

OUTPUT:

10 11 1994 
+0

技術的には、MM/dd/yyyyとなります。 – Tunaki

+0

@Tunaki updated answer ....私はスペイン語/ユーロフォーマットに適合しています... 'dd/MM/yyyy'とサンプルデータはXDDDを明確にしていません –

+1

コードに' mm = Integer.parseInt (comp [0]); 'と' dd = Integer.parseInt(comp [1])) 'を実行します。 – Tunaki

1

あなたは "DD/MM/YYYY" を使用して分割する最初のを持って
文字列[2] dateFormate =日付[i]を.split [ ":" ];
あなたのdateFormate [1]に対する処理を行います。 すべてのものがうまくいくと思います。