2015-07-06 5 views
4

Я работаю над тестовой проблемой Луна, и я хотел бы построить программу с использованием 1-D массива. Я инициализировал массив с 16 цифрами, но я хотел бы иметь возможность инициализировать массив в зависимости от того, сколько цифр вводит пользователь.Инициализация массива с двумя возможными входными значениями

//create scanner object 
    Scanner input = new Scanner(System.in); 

    //declare variable 
    long [] cc_num = new long[16]; 

    //get input 
    System.out.print("Enter 15 or 16-digit credit card number: "); 
    //long cc_num = input.nextLong(); 
    for (int i = 0; i < cc_num.length; i++) { 
     cc_num[i] = input.nextLong(); 
    } 

Как можно инициализировать массив в зависимости от длины входа (15 или 16 запрашивается)

+0

Ваше использование 'nextLong()' сбивает с толку. Если вы хотите, чтобы пользователь вводил 15- или 16-значный номер, первый 'nextLong()' будет перекрывать все число (если они не помещают пробелы между каждой цифрой). Второй 'nextLong()' будет ждать другого номера кредитной карты. – ajb

+1

Возьмите пользовательский ввод для длины массива, создайте новый массив с этой длиной, а затем переверните его как обычно. Что за путаница? Для этого у вас есть все инструменты. – Kon

+1

Кроме того, не 'long' немного overkill, если вы хотите, чтобы каждый элемент массива сохранял одну цифру? Не то, чтобы это неправильно, но это заставляет меня поверить, что вы не совсем решили, какие ценности должны использовать ваши переменные. – ajb

ответ

6

Я согласен с тем, что предложил Эллиотт. Но мне любопытно, почему вы используете длинный тип данных. Если вы будете держать кредитную карту в переменной, долгое время было бы решением. 16 цифр отлично вписываются в длинные. Вот что я хотел бы использовать больше

System.out.print("Enter 15 or 16-digit credit card number: "); 
String cardStr = input.nextLine(); 
int [] cc_num = new int[cardStr.length()]; 

лучший способ

System.out.print("Enter 15 or 16-digit credit card number: "); 
String cardStr = input.nextLine(); 
long cc_num = Long.parseLong(cardStr); 

лучший способ

System.out.print("Enter 15 or 16-digit credit card number: "); 
String cardStr = input.nextLine(); 
//store as string itself, so that leading 0's are preserved 
//it really makes more sense because no arithemtic operations are performed on cc numbers 
+0

Я не думаю, что 'long' или' int' следует использовать для «чисел», которые на самом деле являются просто строками цифр. Номер кредитной карты действительно не рассматривается как число - это не целое число, которое когда-либо использовалось при расчетах, насколько я знаю. Используются отдельные цифры, но не все. Самая большая проблема заключается в том, что когда у вас есть строка цифр, строка может содержать ведущие 0, которые теряются, если рассматривать ее как один номер. Возможно, это невозможно для номеров CC, но это вполне возможно для почтовых индексов, и я видел эту проблему в других ситуациях. – ajb

+0

@ajb +1 это то, что люди используют в реальном времени. Я отредактировал ответ соответственно. Но до сих пор вопрос касался только того, чтобы продемонстрировать, как строится динамический массив, принимая пользовательский ввод как размер. Благодаря! – JavaHopper

6

Сначала получите вход, а затем получить длину, а затем построить массив. Что-то вроде

//get input 
System.out.print("Enter 15 or 16-digit credit card number: "); 
String cardStr = input.nextLine(); 
long [] cc_num = new long[cardStr.length()]; 
+0

Для меня int [] cc_num = new int [cardStr.length()]; имеет больше смысла. Потому что cc_num сам по себе представляет собой массив из 16 цифр. Если бы это было что-то вроде удержания cc num непосредственно в переменной (non array), тогда долгое время соответствовало бы. Как вы думаете, Эллиот? – JavaHopper

+0

@JavaHopper Да, используя 'int []' (или даже 'byte []'), или, возможно, 'cardStr.toCharArray()' все это будет возможно использование памяти * оптимизация *. –

+0

@JavaHopper Я считаю, что вы правы – Parth

Смежные вопросы