Java 为什么我的程序会连续输出两次结果?

Java 为什么我的程序会连续输出两次结果?,java,arrays,Java,Arrays,我正在制作一个程序,可以从信用卡上取#并检查它是否有效 以下是我目前的代码: 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 cre

我正在制作一个程序,可以从信用卡上取#并检查它是否有效

以下是我目前的代码:

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
}
import java.util.Scanner;
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪阅读器=新扫描仪(System.in);
System.out.println(“请输入您的信用卡”);
字符串Ccard=reader.nextLine();
int length=Ccard.length();
双重挖掘(Ccard,长度);
int[]位=双位数字(Ccard,长度);

/*对于(int x=0;x因为在这一行代码中
nums[x]=cardNum.charAt(x);
您实际上是在为5491946915444920打印字符值,即[53、52、57等]

因为在这一行代码中
nums[x]=cardNum.charAt(x);
您实际上是在打印字符值,即[53、52、57等]对于5491946915444920,您可以使用以下命令:

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;
}
publicstaticint[]doubleDig(字符串cardNum,int-length){
int[]nums=新的int[长度];
int-num;
对于(int x=0;x
您可以使用这个:

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;
}
publicstaticint[]doubleDig(字符串cardNum,int-length){
int[]nums=新的int[长度];
int-num;
对于(int x=0;x
因为您要调用两次
doubleDig
?您的确切意思是什么?复制来自
int[]digits=doubleDig(Ccard,length);
以及
doubleDig(Ccard,length);
?我想您正在尝试执行doubleDig()方法,然后尝试获取数字数组。因此,当您两次调用此方法时,System.out.println将执行,并认为该方法是为不同的目的调用的。作为一般规则,永远不要在“工作函数”内部打印(当然,除非您正在调试)。返回结果,然后让打电话的人打印出来。哦,我明白你的意思,谢谢。现在我不知道是最好单独提问还是在这里提问,但我现在就在这里提问。所以当我最初有
System.out.println(nums[x]);
,我得到的值不是我期望的5,4,9,1等出现的值,而是得到了完全不同的值。这些值是如何计算的?因为你调用了两次
doubleDig
?你的确切意思是什么?复制来自
int[]digits=doubleDig(Ccard,length);
以及
doubleDig(Ccard,length);
?我认为您正在尝试先执行doubleDig()方法,然后尝试获取数字数组。因此,当您两次调用此方法时,System.out.println会执行,认为该方法是出于不同的目的调用的。一般来说,永远不要在“worker函数”内部打印(当然,除非您正在调试)。返回结果,然后让打电话的人打印出来。哦,我明白你的意思,谢谢。现在我不知道是最好单独提问还是在这里提问,但我现在就在这里提问。所以当我最初有
System.out.println(nums[x]);
,我得到的值不是我期望的5,4,9,1等出现的值,而是完全不同的值。这些值是如何计算出来的?哦,好的。这是有意义的。如果
.charAt()的话,我该如何得到实际的数字呢
不起作用?哦,好吧。这很有道理。如果
.charAt()
不起作用,我该如何获取实际数字?谢谢你,也谢谢david解释我使用
.charAt()
时最后做了什么。我应该能够轻松完成程序的其余部分(希望如此)。谢谢,也谢谢david解释了我使用
.charAt()
时最后做了什么。我应该能够轻松完成程序的其余部分(希望如此)。