Java - 卡的总价值。比较数组的值与另一个数组中的位置

时间:2014-10-21 08:11:13

标签: java arrays arraylist

我正在制作一种方法来返回所有牌的总数以及用户卡中的笑话和王牌总数的整数数组'阵列。它使用for循环并在包含其顺序中的卡的数组中查找卡的值。如果卡的值大于10,则应将值10添加到总数中。

这是索引数组:

 static String[] cardOrder = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

以下是方法:

public static int[] total(ArrayList<String> cards){
        int total = 0;
        int aces = 0;
        int jokers = 0;
            for(int i = 0; i < cards.size(); i++){
            System.out.println(i);
            System.out.println(cards.size());
            System.out.println("One of your cards is " + cards.get(i));
            if(cards.get(i).equals("A")){
                aces = aces + 1;
            }else if(cards.get(i).equals("Joker")){
                jokers = jokers + 1;
            }else{
                if(Arrays.asList(cardOrder).indexOf(cards.get(i)) <= 10){
                    total = total + Arrays.asList(cardOrder).indexOf(cards.get(i)) + 1;
                }else{
                    total = total + 10;
                }
            }
            System.out.println(total);
            i++;
        }
        int[] intArray = {total, aces, jokers};
        return intArray;
    }

然而,奇怪的事情似乎正在发生。当我将for循环中的大于符号更改为大于或等于时,我会超出范围异常,但是当我不这样做时,只计算卡数组的第一个值。

很抱歉,这看起来像是修复了我的代码&#39;线程类型。我认为这对Java初学者社区在增强他们对Java方法中数组和arraylists的使用的理解方面会很有用。

2 个答案:

答案 0 :(得分:3)

你的for循环结束时你的for循环中有i ++。删除底部

答案 1 :(得分:1)

关于java Arrays需要记住的重要一点是,它们的索引从'0'开始,而不是从'1'开始。当您创建大小为'2'的数组时,要访问第一个数组元素,您需要使用索引'0'(类似于arr [0])并访问第二个数组元素,您需要使用索引'1'。

这种理解足以克服越界异常。仔细检查一下代码,看看你何时访问数组元素,你没有使用小于'0'(或)大于'size-1'的索引(即如果你创建一个大小的数组' N',指数不能小于'0'且不能大于N-1)。