2012-08-23 38 views
-1

我想創建一個程序,顯示任何給定點的xy座標,反映在線性函數ax+b上。但是,我得到一個運行時錯誤,說它超出了界限。我知道你不能在原始數據類型上調用方法,但我不知道如何獲得它。charAt()對於大於1的整數?

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

'String.charAt(0)'表示第一個字符。 – adatapost

+4

有沒有這樣的事情,編譯器錯誤說索引超出了界限。 – WhyNotHugo

+1

您不需要爲嘗試閱讀的每一行創建一個新的掃描程序;使用同一個。 – WhyNotHugo

回答

0

也許你正在長3,如 「1,2」 的字符串。

charAt(3)將嘗試並返回不存在的String的第4個字符,因此會引發StringIndexOutOfBoundsException。

0

索引越界錯誤的意思是「你問我這個字符串的第4個字符,但字符串少於4個字符。」

需要注意的是(最喜歡的計算機語言索引),第一個字符是0的charAt(「你好」,1)==「E」

您應該檢查字符串的長度調用的charAt()之前。或者,捕捉異常並處理它。

charAt()可能不是您的程序的最佳選擇,因爲它目前只能處理一位數字。試試String.split()在逗號分隔字符串。

另外,此刻它正在使用字符的ASCII值。那是(如果你固定了索引)「a,b」會導致你用m = 97和c = 98做你的數學。我想這不是你想要的。瞭解有關的Integer.parseInt()

0

您可以使用:

int a = point.charAt(0); 

提供這是point不是空的。

理想情況下,您應該對輸入字符串執行預使用長度檢查。

0

除了超出範圍的問題,其他人指出你需要從charAt(0)開始,因爲這個數字是char數組(字符串)的偏移量,沒有得到第n th元素。

您還需要減去'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