我正在尝试创建一个程序,显示任何给定点的x
和y
坐标,反映在线性函数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);
}
}
答案 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