2016-03-03 34 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

相关问题