2016-04-18 2 views
1

Добрый день вам всем, я просто хочу спросить, что с этим делать. Я хочу создать программу, где я могу отображать все даты, введенные без разделителя «/», поэтому я использовал разделение метод для этого. чтобы быть более ясно, что это то, что я хочу сделать:java array variable initialization

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   

Проблема заключается в том, что у меня есть ошибка в System.out.println(comp[ctr1]); он говорит, что я должен инициализировать переменную comp, на самом деле я не то, что я буду использовать Initialization , Я попытался с помощью String[] comp=new String[date] и String[] comp=new String[5] но это еще ошибка .. Заранее спасибо ..

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 [] = новый оценочного строки [5]'? – Tom

+1

Голосование закрывается как typo/не может воспроизвести, так как 'String [] comp = new String [5]' работает, а OP проверял его (?). – Tunaki

+0

говорит, что ArrayIndexOutOfBoundsException во время выполнения –

ответ

0

Первое, String[] comp=new String[5] действительно сработает, оно устранит ошибку компилятора, произошла последующая ошибка, потому что вы обращаетесь к Индексам массива, которые выходят за пределы длины массива. Технически это не должно происходить, потому что объявление String[] comp=new String[5] сделает ваш массив того же размера, что и массив date, который вы используете в качестве второго условия цикла. Но ваша ошибка происходит в первом цикле.

Вы повторно инициализируете массив comp, который, если вход правильный, будет иметь размер 3 сейчас, а не размер 5. И так как ваш второй цикл будет использовать массив date как условие, которое все еще имеет размер 5, вы попытаетесь получить доступ к элементу 3 и 4 в массиве comp, которые находятся вне длины только что переназначенного массива. Это код, вызывающий проблему comp=date[ctr].split("/");.

Используя ваш метод, я предлагаю превратить массив comp в массив 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

Почему изобретать колесо? Домашнее задание? Почему бы не использовать 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)); 

ВЫВОД:

10 11 1994 
+0

Технически это будет 'MM/dd/yyyy'. – Tunaki

+0

@ Обновленный ответ Tunaki .... Я также сомневаюсь ... Он подходит для испанского/евроформата ... 'dd/MM/yyyy' и примеры данных не уточняет XDDD –

+1

Ну код имеет' mm = Integer.parseInt (comp [0]); 'и' dd = Integer.parseInt (comp [1]); '. – Tunaki

1

вы должны сначала разделить с помощью "дд/мм/гггг"
String [2] dateFormate = дата [я] .split [ ":" ];
сделать вашу обработку на dateFormate [1]; Я думаю, что все будет хорошо