2016-12-17 2 views
0

Я в процессе создания программы, которая может взять # с кредитной карты и проверить, действительно ли она.Почему моя программа выводит результаты дважды подряд?

вот мой код до сих пор:

import java.util.Scanner; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner reader=new Scanner(System.in); 
     System.out.println("Please enter your credit card #"); 
     String Ccard=reader.nextLine(); 
     int length=Ccard.length(); 
     doubleDig(Ccard,length); 
     int []digits=doubleDig(Ccard,length); 
     /*for(int x=0;x<digits.length;x++){ 
     System.out.println(digits[x]); 
     }test array*/ 

    } 
    public static int[] doubleDig(String cardNum,int length){ 
     int []nums=new int[length]; 
     for(int x=0;x<cardNum.length();x++){ 
      nums[x]=cardNum.charAt(x); 
      System.out.println(cardNum.charAt(x)); 
     }//makes array 
     //System.out.println(nums.length); 
     for(int x=nums.length;x<0;x-=2){ 
      nums[x]=nums[x]*2; 
     } 
     return nums; 

    }//end doubleDig 
} 

Я пошел посмотреть, если массив был правильно настроен таким образом я использовал: в цикле System.out.println(nums[x]); но получил значения, которые я не понимаю. Затем я пошел и использовал: System.out.println(cardNum.charAt(x)); в цикле, чтобы увидеть, что было. Затем я заметил, что массив как-то отображается во второй раз. Размер массива должен быть равен длине строки, которую вводил пользователь (я использую 5491946915444920 в качестве моего тестового значения), который в этом случае равен 16. Отображается 16 номеров, но затем он как-то перебирает себя, а значения отображаются в 2-й раз (отображение 32 общих #). Любые подсказки?

+1

потому что вы звоните 'doubleDig' дважды? – Mshnik

+1

Что значит? это дублирование, исходящее из 'int [] digits = doubleDig (Ccard, length);', а также 'doubleDig (Ccard, length);'? – Epicfiregamer

+0

Я думаю, что вы сначала пытаетесь выполнить метод doubleDig(), а затем попытаетесь получить массив цифр. Поэтому, когда вы вызываете этот метод два раза, когда выполняется System.out.println, считается, что метод вызван для разных целей. – David

ответ

1

вы можете использовать это:

public static int[] doubleDig(String cardNum, int length) { 
    int[] nums = new int[length]; 
    int num; 
    for (int x = 0; x < cardNum.length(); x++) { 
     nums[x]=Integer.parseInt(cardNum.substring(x, x+1)); 
    } 
    System.out.println(nums.length); 
    return nums; 
} 
+1

Вы можете выделить код и использовать кнопку '{}' –

+0

. Благодарю вас, Дэвид за объяснение того, что я закончил, когда использовал '.charAt()'. Я должен был бы сделать оставшуюся часть программы без особых трудностей (надеюсь). – Epicfiregamer

+0

добро пожаловать. –

1

Потому что в этой строке кода nums[x] = cardNum.charAt(x); вы на самом деле печать значений полукокса, т.е. [53, 52, 57, и т.д.] для 5491946915444920

+0

О, хорошо. в этом есть смысл. как бы я начал получать фактические цифры, если '.charAt()' не работает? – Epicfiregamer

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