Java 数字系统代码的索引越界问题
我目前遇到一个问题,我的java索引超出了范围。具体错误在我的binaryToDecimal方法中,并且Java 数字系统代码的索引越界问题,java,arrays,binary,Java,Arrays,Binary,我目前遇到一个问题,我的java索引超出了范围。具体错误在我的binaryToDecimal方法中,并且索引32超出了长度32的界限。我试图重新组织代码,就像声明intbinaryval[]=newint[32]作为全局变量来修复错误,但它不起作用。如何解决此问题 import java.util.Scanner; public class NumberConverter { public static Scanner input = new Scanner(System.in);
索引32超出了长度32的界限。我试图重新组织代码,就像声明intbinaryval[]=newint[32]
作为全局变量来修复错误,但它不起作用。如何解决此问题
import java.util.Scanner;
public class NumberConverter {
public static Scanner input = new Scanner(System.in);
static boolean success;
static String originalNum;
static int value = 0;
static int choice = 0;
static int intNum = 0;
static int remainder;
static char [] valueBinaryArray;
public static void main(String[] args) {
// TODO Auto-generated method stub
greeting();
getOriginalNumber();
getOutputType();
//checkValidInput();
if (value == 2 && choice == 3) {
decimalToHex();
}
else if (value == 3 && choice == 2) {
hexToDecimal();
}
else if (value == 2 && choice == 1) {
decimalToBinary();
}
else if (value == 1 && choice == 2) {
binaryToDecimal();
}
}
public static void greeting() {
System.out.println("Hello and welcome to the number systems converter");
System.out.println("Below you will be givin options as to what numbers you'd like to convert");
System.out.println("");
}
public static String getOriginalNumber() {
System.out.println("Enter a number:");
originalNum = input.next();
System.out.println("What type of number is this?");
System.out.println("");
System.out.println("1. Binary");
System.out.println("2. Decimal");
System.out.println("3. Hexadecimal");
value = input.nextInt();
return originalNum;
}
public static void getOutputType() {
System.out.println("Which number system would you like to convert to?");
System.out.println("");
System.out.println("1. Binary");
System.out.println("2. Decimal");
System.out.println("3. Hexadecimal");
choice = input.nextInt();
}
public static void checkValidInput() {
}
public static void decimalToHex() {
int intNum = Integer.valueOf(originalNum);
String str2 = "";
char hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while (choice > 0) {
remainder = intNum % 16;
str2 = hex[remainder] + str2;
intNum = intNum/16;
}
}
public static void hexToDecimal() {
int intNum = Integer.valueOf(originalNum);
int counter = 0;
String hexVal = "";
int digit;
while (choice > 0) {
digit = intNum % 16;
switch (digit) {
case 1:
hexVal+="F"; break;
case 2:
hexVal+="E"; break;
case 3:
hexVal+="D"; break;
case 4:
hexVal+="C"; break;
case 5:
hexVal+="B"; break;
case 6:
hexVal+="A"; break;
default:
hexVal+=Integer.toString(digit);
}
intNum = intNum/16;
}
for (counter = hexVal.length()-1; counter>=0; counter--)
System.out.print(hexVal.charAt(counter));
}
public static void decimalToBinary() {
int intNum = Integer.valueOf(originalNum);
int counter = 0;
int binaryVal[] = new int[32];
while (choice > 0) {
binaryVal[counter++] = intNum % 2;
intNum = intNum/2;
}
for (int i = counter-1; i >= 0; i--) {
System.out.println(binaryVal[i]);
}
}
public static void binaryToDecimal() {
int intNum = Integer.valueOf(originalNum);
int counter = 0;
int binaryVal[] = new int[32];
while (choice > 0) {
binaryVal[counter++] = intNum % 2;
intNum = intNum/2;
}
for (int i = counter-1; i >= 0; i--) {
System.out.print(binaryVal[i]);
}
}
}
如果您有一个包含32项的数组,那么第一个是索引0,最后一个是索引31。尝试访问位置32处的项超出了数组的范围,这就是为什么会出现数组索引越界异常的原因
要查看输出,我建议将阵列设为33大,而不是32大。这不是一个适当的修复,但你应该能够看到它正在做什么
如果它仍然超出界限,我将仔细查看while循环结束条件。因此,导致错误的是for语句中的条件。目前,您只是在检查choice>=0
这个检查的问题是它允许for语句超出您指定的数组长度(32)。为了修复此错误,只需添加另一个检查,以确保for循环不能超出指定的数组长度。这可以通过将以下语句添加到for循环中来实现:计数器
。这将防止for循环超出数组的长度,并且不会出现任何错误。binaryToDecimal方法的最终代码如下所示:
public static void binaryToDecimal() {
int intNum = Integer.valueOf(originalNum);
int counter = 0;
int binaryVal[] = new int[32];
while (choice > 0 && counter < binaryVal.length) {
binaryVal[counter++] = intNum % 2;
intNum = intNum/2;
}
for (int i = counter-1; i >= 0; i--) {
System.out.print(binaryVal[i]);
}
}
publicstaticvoid binaryToDecimal(){
int intNum=整数.valueOf(originalNum);
int计数器=0;
int binaryVal[]=新的int[32];
while(选项>0&&counter=0;i--){
系统输出打印(二进制值[i]);
}
}
while循环建议的确切含义是什么?我尝试了33个大数组,但没有成功如果增加数组的大小没有“修复”数组超出边界的问题,那么你就有了一个比“仅仅”一个错误更基本的问题。试着将逻辑分解成更小的步骤,并确定哪一行代码抛出异常及其原因。代码中有一个无限循环。学习调试的基础知识,以便您可以逐步执行代码并理解出现错误的原因。Java数组是基于0的,因此如果数组大小为32,则只有0-31是有效索引。while(choice>0){}循环将永远运行或根本不运行,因为不修改循环内的选项。