这是我在 StackOverflow 上的第一个问题,所以请不要太苛刻:)
我对此代码有疑问。每当我尝试运行它时,它都会给我“线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: Index x out of bounds for length x 在 Homework10509.main(Homework10509.java:36)",我不知道如何修复它。有一点帮助吗?
x 表示任意数字 btw
import java.util.*;
public class Homework10509 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("ace", 1);
map.put("two", 2);
map.put("three", 3);
map.put("four", 4);
map.put("five", 5);
map.put("six", 6);
map.put("seven", 7);
map.put("eight", 8);
map.put("nine", 9);
map.put("ten", 10);
map.put("jack", 11);
map.put("queen", 12);
map.put("king", 13);
// 0 1 2 3 4
String[] cardValue = new String[] { "ace", "two", "three", "four", "five", };
Scanner sc = new Scanner(System.in);
int[] cards = new int[52];
int n = 52;
for (int i = 0; i < 52; i++) {
String s = sc.nextLine();
cards[i] = map.get(s);
for (int j = 0; j < 13; j++) {
if (cardValue[j].equals(s)) {
cards[i] = j + 1;
}
}
}
for (int i = 0; i < 52; i++) {
System.out.println(cards[i]);
}
int pointA = 0;
int pointB = 0;
for (int i = 0; i < 52; i++) {
if (cards[i] == 1) {
if (i <= 47) {
if (!hasHighCard(cards, i, 4)) {
if (i % 2 == 0) {
System.out.println("Player A scores 4 point(s).");
pointA += 4;
} else {
System.out.println("Player B scores 4 point(s).");
pointB += 4;
}
}
}
} else if (cards[i] == 11) {
if (i <= 50) {
if (!hasHighCard(cards, i, 1)) {
if (i % 2 == 0) {
System.out.println("Player A scores 1 point(s).");
pointA += 1;
} else {
System.out.println("Player B scores 1 point(s).");
pointB += 1;
}
}
}
} else if (cards[i] == 12) {
if (!hasHighCard(cards, i, 2)) {
if (i % 2 == 0) {
System.out.println("Player A scores 2 point(s).");
pointA += 2;
} else {
System.out.println("Player B scores 2 point(s).");
pointB += 2;
}
}
} else if (cards[i] == 13) {
if (i <= 48) {
if (!hasHighCard(cards, i, 3)) {
if (i % 2 == 0) {
System.out.println("Player A scores 3 point(s).");
pointA += 3;
} else {
System.out.println("Player B scores 3 point(s).");
pointB += 3;
}
}
}
}
}
System.out.println("Player A:" + pointA + "point(s).");
System.out.println("Player B " + pointB + "point(s).");
}
public static boolean hasHighCard(int[] cards, int beginIndex, int num) {
for (int j = 1; j <= num; j++) {
if (cards[beginIndex + j] == 1 || cards[beginIndex + j] > 10) {
return true;
}
}
return false;
}
}
答案 0 :(得分:-2)
也可能你应该用索引 j = 0 开始下面的循环;循环中的最后一个 j 大于卡片长度。此外,beginIndex + j 必须是卡片长度的最大值 -1。不确定什么是“num”参数。
for (int j = 0; j <= num; j++) {
if (cards[beginIndex + j] == 1 || cards[beginIndex + j] > 10) {
return true;
}
}