关于java越界的问题。。。。请大神解答

问题描述

关于java越界的问题。。。。请大神解答

public class Solution {
public String getHint(String secret, String guess) {
int bulls=0;
int cows=0;
char[] sec = secret.toCharArray();
char[] gue = guess.toCharArray();
int[] s=new int[10];
int[] g=new int[10];
for(int i=0;i<sec.length;i++){
if(sec[i]==gue[i]){
bulls++;
}else{
s[sec[i]-'0']++;
g[gue[i]-'0']++;
}
}
for(int j=0;j<g.length;j++){
cows+=Math.min(s[j],g[j]);
}
return bulls+"A"+cows+"B";
}
}
我不明白为什么要在s[sec[i]-'0']++;g[gue[i]-'0']++处-‘0’;而如果改为+‘0’,就会报越界错误Line 13: java.lang.ArrayIndexOutOfBoundsException: 97。请大神解答

解决方案

首先,你的每个字符都对应数组的一个元素,那么这个元素的下标就是字符对应的字母表的位置,例如A_Z二十六个字母的位置是0-25,计算方法就是某个字母-A,即相对于第一个字母A的位置。此处你的下标是相对字符0的位置,所以减'0'就得到了对应字符的下标。如果加就必然越界了。

解决方案二:

建议你学会调试的方法:想知道为什么是减、而不是加,就需要知道被减数的数值是什么?通过调试Catlog输出它的INT的值。这样你会发现,只有减去(而不是加上)才能得到你想要的数组下标。

解决方案三:

当然是-'0'了,这里是把字符转换成对应的数字。
0-9 a-z这些在ascii中连续排列的。所以字符ascii相减就可以把字符转换为数字了。
一相加,得到的就是一个100多的数字,那么显然越界了。

参考
ascii表:http://www.51hei.com/mcu/4342.html

时间: 2025-01-01 11:16:44

关于java越界的问题。。。。请大神解答的相关文章

刚刚学java不会,请大神帮忙解答

问题描述 刚刚学java不会,请大神帮忙解答 ufheasuhewauhjdfuiewhufujqWU8OIU9OQEOIGUE9IFFOPTEO9FQIFO9WR0WSQFFEFTEAQFRESFGAEFED 解决方案 public static void main(String[] args) { String str = "It's the first day of class, and the room is buzzing with excitement and expectation

java-本人新手求教 关于Java内部类的问题 请大神看图

问题描述 本人新手求教 关于Java内部类的问题 请大神看图 解决方案 就是将 entry 这个对象 加入到 entrys这个数组中去 , 每次夹的时候 都会 count 加1 解决方案二: 这个呢也不是内部类的问题,,就是entrys数组中放入entry对象,,count++就是count先赋值再自增 解决方案三: 将实例entry赋值给entry数组.具体不知道你具体想问什么? 解决方案四: 这个不是内部类的问题,是在一个类中定义了方法,然后把entry 的值赋给entrys 数组j进行前+

服务器-JAVA网络编程问题请大神指导

问题描述 JAVA网络编程问题请大神指导 面试被问到了,请教大神:同一服务器相同Server是否可以共用一个端口?同一服务器不同Server是否可以共用一个端口? 解决方案 一个TOMCAT 可以有多个项目 占一个端口, 多个TOMCAT 需要各自使用不同端口.一个端口只能被一个服务使用. 解决方案二: linux内核中有端口reuse技术,这样可以多个应用绑定到同一个端口,然后内核来调度把连接转发给某个应用.nginx中worker有采用这个

java中为什么用final修饰了引用类型,但还是能修改对象,请大神解答下哈

问题描述 java中为什么用final修饰了引用类型,但还是能修改对象,请大神解答下哈 class Person{ String name; int age; Person(){} Person(String name,int age){ this.name=name; this.age=age; } public void ShowInfo(){ System.out.println("姓名:"+this.name+"年龄:"+this.age); } } pub

md5 哈希函数 公式-本人java 初学菜鸟,请大神指导

问题描述 本人java 初学菜鸟,请大神指导 想使用MD5和哈希函数对密码进行加密,及时对象窃取数据库信息,也不能直接得到真正的密码,记得有个什么公式(X*10)/2*3,记得不太清楚了

java中建立客户端和服务端的思想步骤是如何确立..请大神解答下..

问题描述 java中建立客户端和服务端的思想步骤是如何确立..请大神解答下.. 解决方案 解决方案二: 解决方案三:首先,你得有客户端和服务器端相关的配置信息,我不知道你现在的交互是数据库还是什么??

线程-JVM相关基础面试题--请大神解答

问题描述 JVM相关基础面试题--请大神解答 (单选)下列关于JVM说法,错误的是() A.JVM通过专门的线程实现内存的回收. B.使用java命令时,可以通过参数来设置分配JVM的内存大小. C.JRE包括JVM及Java核心类库. D.目前主流版本JVM通过纯解释的方式运行Java字节码. 为什么正确答案是D?B错在哪里了?请热心大神帮我看看 解决方案 下列关于JVM说法,**错误**的是() 问你的是错误的是,不是正确的是.JVM使用JIT编译器来提速,不是纯解释,别的都是对的.

jboss-as-7.1.0.Final启动问题?请大神解答

问题描述 jboss-as-7.1.0.Final启动问题?请大神解答 启动standalone.bat时出现以下情况,就一直停滞在那里不动,是啥情况. Calling "G:jboss-as-7.1.0.Finalbinstandalone.conf.bat" JBoss Bootstrap Environment JBOSS_HOME: G:jboss-as-7.1.0.Final JAVA: E:Javajdk1.8.0binjava JAVA_OPTS: -XX:+Tiered

visual studio-用VS2005新建的MFC智能设备应用程序空白项目,为什么编译会出错?请大神解答

问题描述 用VS2005新建的MFC智能设备应用程序空白项目,为什么编译会出错?请大神解答 1>------ 已启动生成: 项目: 0001, 配置: Debug HPC-3000 (ARMV4I) ------ 1>正在编译... 1>stdafx.cpp 1>C:Program Files (x86)Windows CE Toolswce600HPC-3000includeARMV4Imalloc.h(45) : error C2143: syntax error : miss