-1

我正在尝试创建一个程序,显示任何给定点的坐标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

4 回答 4

0

您可以使用:

int a = point.charAt(0);

前提是它point不为空。

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

于 2012-08-23T11:57:44.463 回答
0

除了超出范围的问题外,其他人指出您需要从该数字开始,charAt(0)因为该数字是 char 数组(字符串)的偏移量,而不是获取第nth 个元素。

您还需要减去“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
于 2012-08-23T12:00:27.003 回答
0

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

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

于 2012-08-23T11:53:02.447 回答
0

索引越界错误表示“您已向我询问此字符串的第 4 个字符,但该字符串少于 4 个字符。”

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

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

charAt() 可能不是您的程序的最佳选择,因为它目前只能处理个位数。尝试 String.split() 以逗号分隔字符串。

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

于 2012-08-23T11:54:40.690 回答