2014-12-03 83 views
-1

我的代碼似乎有問題,它是查找重複的數字序列。我已將(?)double轉換爲字符串,因爲我得到錯誤不可達語句。 (我猜這有助於尋找我現在得到錯誤的原因?)。字符串索引超出範圍(重複序列的數字)

每當我運行它,它會很好,直到我完成輸入N和D.

它會說「異常線程‘main’java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:3」

這裏是我下面的代碼:

import java.util.*; 
public class RepeatingSequence{ 
public static void main(String[] args){ 
    Scanner in = new Scanner(System.in); 
    System.out.print("Enter N,D: "); 
    int numerator = in.nextInt(); 
    int denominator = in.nextInt(); 

    double quotient = numerator/denominator; 
    String number = "" + quotient; 
    char n = number.charAt(0); 
    int j = 1; 
    int z = 0; 
    String output = ""; 
    char[] index = number.toCharArray(); 

    for (int i = 2; number.charAt(j) != number.charAt(i); i++){ 
     index[z] = number.charAt(z); 
     index[j] = number.charAt(j); 
     index[i] = number.charAt(i); 
     output = output + index[i]; 

     if (index[i] != index[z]){ 
     System.out.print(index[z] + ".(" + index[j] + output + ")"); 
     } 
    } 
} 
} 
+0

可以嘗試 串號= Integer.toString(q uotient); – vembutech 2014-12-03 13:33:51

+0

所以你想找到小數點後是否有重複的數字? – brso05 2014-12-03 13:37:56

+0

@vembutech - 也許你的意思是雙?如果我無論如何都得到錯誤。 – 2014-12-03 13:40:12

回答

0

爲了您的例外,我想你應該寫代碼更安全 - 上線的東西:

int len = number.length(); 

for (int i = 2; (i < len) && (j < len) && 
      number.charAt(j) != number.charAt(i); i++){ 
... 
} 

我不是試圖解決你試圖解決的問題,而只是你面臨的問題。對不起。

+0

嗯。我會試一試。謝謝。 – 2014-12-03 14:08:36

1

只需添加我< number.length()的條件

(int i = 2; i < number.length() && number.charAt(j) != number.charAt(i); i++) 
+0

嗯。我在這裏沒有錯誤。但我無法得到它顯示輸出:/ – 2014-12-03 14:40:20

0

我改變你的代碼一點點嘗試一下,看看你的想法:輸入

public static void main(String[] args){ 
    Scanner in = new Scanner(System.in); 
    System.out.print("Enter N,D: "); 
    double numerator = in.nextDouble(); 
    double denominator = in.nextDouble(); 

    double quotient = numerator/denominator; 
    String number = "" + quotient; 
    char n = number.charAt(0); 
    int j = 1; 
    int z = 0; 
    String output = ""; 
    char[] index = number.toCharArray(); 
    int max = -1; 
    int currentNumber = -1; 
    int temp = -1; 
    int tempMax = -1; 
    System.out.println("" + quotient); 
    boolean check = true; 
    for(int i = (number.indexOf(".") + 1); i < index.length; i++) 
    { 
     if(max == -1) 
     { 
      currentNumber = i; 
      temp = i; 
      max = 1; 
      tempMax = 1; 
     } 
     else 
     { 
      if(index[i] == index[i-1]) 
      { 
       tempMax++; 
      } 
      else 
      { 
       if(tempMax > max) 
       { 
        check = false; 
        max = tempMax; 
        currentNumber = temp; 
       } 
       tempMax = 1; 
       temp = i; 
      } 
     } 
    } 
    if(check) 
    { 
     max = tempMax; 
    } 
    System.out.println(index[currentNumber] + " repeats " + max + " times."); 
} 

例/輸出:

Enter N,D: 1 
3 
0.3333333333333333 
3 repeats 16 times. 
+0

嗯。我可能會從中得到一個想法。但我正在尋找在小數點中重複的數字,並將其括在括號中。 (3) 1/7 =。(142857) – 2014-12-03 14:31:00