charAt()对于大于1的整数?

时间:2012-08-23 11:42:50

标签: java

我正在尝试创建一个程序,显示任何给定点的xy坐标,反映在线性函数ax+b上。但是,我收到一个运行时错误,说它超出了界限。我知道你不能在原始数据类型上调用方法,但我不知道如何获得它。

import java.util.*;
public class ReflectivePoint {
    public static void main (String[]args){
        Scanner lol = new Scanner(System.in);
        System.out.println("Please enter the linear function.");

        //That will be in the format ax+b
        String function = lol.nextLine();
        Scanner lol2 = new Scanner(System.in);
        System.out.println("Please enter the point.");

        //That will be in the format a,b
        String point = lol2.nextLine();
        int a = point.charAt(1);
        int b = point.charAt(3);
        int m = function.charAt(1);
        int c = function.charAt(4);
        int x1 = (2 / (m + 1 / m)) * (c + b - a / m) - a;
        int y1 = (-1/m) * x1 + a / m + b;
        System.out.println(x1+", "+y1);
    }
}

4 个答案:

答案 0 :(得分:0)

也许你得到一个长度为3的字符串,例如“1,2”。

charAt(3)将尝试返回不存在的String的第4个字符,因此它会抛出StringIndexOutOfBoundsException。

答案 1 :(得分:0)

索引超出范围错误意味着“您已经向我询问了此字符串的第4个字符,但字符串少于4个字符。”

请注意(与大多数计算机语言索引一样),第一个字符为0. charAt(“hello”,1)=='e'

在调用charAt()之前,您应该检查字符串的长度。或者,捕获异常并处理它。

charAt()可能不是您程序的最佳选择,因为它目前只能处理一位数。尝试使用String.split()在逗号上拆分String。

此外,目前它正在使用角色的ASCII值。那就是(如果你修改了索引)“a,b”会导致你用m = 97和c = 98进行数学运算。我猜这不是你想要的。了解Integer.parseInt()

答案 2 :(得分:0)

您可以使用:

int a = point.charAt(0);

提供 point不为空。

理想情况下,您应该对输入字符串执行使用前长度检查。

答案 3 :(得分:0)

除了出界问题之外,其他人指出的是你需要从charAt(0)开始,因为数字是char数组(字符串)的偏移量,而不是n元件。

您还需要减去'0'才能转换为整数。

string point = "4";
int a = point.charAt(0);
//a=52 //not what you wanted

string point = "4";
int a = point.charAt(0) - '0';
//a=4 //this is what you wanted