2016-03-03 57 views
2

我正在處理這個程序,我需要驗證字符串中的每個奇數索引是否都帶有字母「X」。例如,如果我的字符串是:AXFXTX那麼我應該得到一條消息:「好」,如果不是,我應該得到一條消息:「壞」。任何人都可以告訴我我錯過了什麼。先進的謝謝你。如何檢查字符串中的每個奇數索引是否具有相同的字母?

這裏是我的代碼

import java.util.Random; 
import java.util.Scanner; 

public class Program { 

public static void main(String[] args) { 

    Random rand = new Random(); 
    Scanner scan = new Scanner(System.in); 

    int min = 1; 
    int max = 10; 
    int randomNum = rand.nextInt((max - min) + 1) + min; 

    System.out.println("Random number = " + randomNum); 
    System.out.print("Enter a word of " + randomNum + " characters:"); 
    String myString = scan.nextLine(); 

    while(myString.length() != randomNum){ 
     System.out.print("Enter a word of " + randomNum + " characters:"); 
     myString = scan.nextLine(); 
    } 

    char[] c = myString.toCharArray(); 
    for(int i = 0 ; i < c.length ; i++){ 
     if(c[i] == 'X'){ 
      System.out.println("GOOD!"); 
     } 
     else{ 
      System.out.println("BAD"); 
     } 
    }  
} 
} 
+0

'爲(INT I = 0; I Thilo

+0

@Thilo我知道,但我不確定如何跳過那些我不需要的人 – HenryDev

+0

您正在檢查for循環中的每個字符。你只需要檢查每秒(i + = 2)從1開始而不是0.如果你的角色不等於'X',你可以退出循環並打印出'壞'。 –

回答

4

簡單的評估只奇數索引:

char[] c = myString.toCharArray(); 
boolean good = true; 

for(int i = 3 ; i < c.length ; i+=2){ 
    if(c[i] != c[i-2]){ 
     good = false; 
     break; 
    } 
}  

if(good) System.out.println("GOOD"); 
else System.out.println("BAD"); 
+0

你不是在這裏測試* even *指數嗎? –

+0

@ElliottFrisch很好,取決於你的觀點..通常人們把第一,第三,第五......稱爲奇怪的位置。由於1st是索引0,0是「奇數」 – Maljam

+0

OP的例子包括索引爲'1','3'和'5'的'AXFXTX'和'X'。這就是生活。 –

2

嘗試

booelan allGood = true; 
for(int i = 2 ; i < c.length ; i = i + 2){ 
    if(c[i] != c[0]){ 
     allGood = false; 
     break; 
    } 
} 
+0

爲什麼不比較'c [0'每次? – AntonH

+0

@AntonH確實可以做到這一點。 –

+0

你不需要檢查字符串是否至少有3個字符長,你的for循環已經處理了這個 – Maljam

1

首先,你需要在這裏一個布爾變量來跟蹤它是否一致跨越所有角色。其次,你需要提高你的循環

boolean testSucceed = true; 

for(int i = 1 ; i < c.length ; i += 2){ 
    if (c[i] != 'X') testSucceed = false; 
    break; 
} 
if(testSucceed){ 
    System.out.println("GOOD!"); 
} else{ 
    System.out.println("BAD"); 
} 
5

如果我明白你的問題,那麼一定要注意,第一奇數的索引是1是很重要的。所以你可以從3開始,並檢查它是否和每個後續的奇數(index += 2)與第一個相同。喜歡的東西,

boolean sameLetter = true; 
for (int index = 3; index < c.length && sameLetter; index += 2) { 
    sameLetter = (c[1] == c[index]); 
} 
System.out.println(sameLetter ? "GOOD!" : "BAD"); 
-2

//如果2-僅選中編輯奇數 不能整除:你是suppossed使用模%,而不是分裂%。我的壞 for(int i = 0; i < c.length; i ++)if(c [i]%2!= 0){c [i] =='X'){ System。通過out.println( 「GOOD!」); } else { System.out.println(「BAD」); } } }

1

更改for循環: 爲(INT I = 0;我< c.length; I + = 2) 使得它越過替代字符。

+2

然後呢?仍然打印其他角色的東西? – Thilo

+0

設置一個標誌並繼續檢查這些字符是否相同。如果發現這些字符中的任何一個不同,只要打破循環並打印「壞」。 –

1

我會簡單地使用這裏正則表達式

str.matches(".(\\w)(.\\1)+") //真正是GOOD

相關問題