2015-02-24 59 views
0

比方說,有長度爲5的字符串對象:代數方法長度()

ABCDE 

和方法的定義:

public int returnIndex(int n) 
{ 
} 

我怎樣才能返回字符串時的正確索引傳遞給參數的值是negative並且計數backwards(它應該環繞)?如果所提到的字符串的長度是5並且傳遞值是-7,所以它應該返回索引爲3的D。我嘗試了Math.abs,但它沒有正確計數。請問請讓我走在正確的軌道上?

+1

我不明白的要求。如果你「倒數」7個長度爲5的字符串,它就會溢出。或者你的意思是它應該環繞? – Mureinik 2015-02-24 07:57:28

+1

頗有自命不凡的頭銜,不是嗎?所以Math.abs不能正確計數:怎麼樣? – Drux 2015-02-24 07:57:29

+0

這聽起來更像是一個數學問題而不是JAva。我想我明白,雖然 – 2015-02-24 07:57:47

回答

0

您需要同時使用兩個Math.abs才能使數字成爲正數,然後您需要使用數字上的模函數來消除字符串的長度。

看到我的代碼如下。

public static int returnIndex(int n) 
{ 
    String a = "ABCDE"; 
    n = Math.abs(n) % a.length(); 
    return a.length() - n; 
} 

這樣做是需要的數量,消除了負的符號,將所述串和n和返回字符串的長度減去n的值的長度後發現的餘數。

這似乎是你想要的。

正如我在我原來的評論中所說的。

不是java的問題,更是一個數學問題。

+0

當您將'2'作爲參數傳遞時,這不起作用。 – codeMan 2015-02-24 08:13:21

+0

爲什麼不呢?爲我返回B. – 2015-02-24 08:14:42

0

模數(%)運營商需要照顧的大多數「環繞」的問題,但你仍舊需要爲負數一些調整:

public int returnIndex(int n) { 
    String s = "ABCDE"; 
    int length = s.length(); 
    int result = n % length; 
    if (result < 0) { 
     result += length; 
    } 
    return result; 
} 
0

如果您使用的是Java 8,你可以使用方法Math.floorMod(int x, int y)
這種方法可以打包工作,甚至可以用於負數。

所以,你的代碼是:

public int returnIndex(int n) { 
     String s = "ABCDE"; 
     return Math.floorMod(n, s.length()); 
}