2017-09-03 5 views
-2

c'est le code que j'ai utilisé pour comparer les caractères dans String qui est entrée à "" et puis vérifierait également les caractères avant et après "" pour voir si elles sont similaires afin de retourner vrai ou faux, mais le code a une erreur qui dit une valeur de retour est manquant, ce que je n'ai pas indice pourquoi?Méthode qui compare chaque caractère de chaîne à "*" et compare également si caractère avant "*" et un après sont les mêmes qu'il renvoie vrai ou faux

import java.util.Scanner; 
import java.util.Arrays; 
public class everyOtherLetter { 

    public static void main(String[] args) { 

     Scanner y = new Scanner(System.in); 

     System.out.println("type a word"); 

     String input = y.next(); 

     char[] t = input.toCharArray(); 

     System.out.println(Arrays.toString(t)); 

     //calling the function for even numbers 
     //everyOtherLetter(input, true); 

     //calling the function for odd numbers 
     //everyOtherLetter(input, false); 
     sameStarChar(input); 

    } 

    private static void everyOtherLetter(String input, boolean even) { 
     int i =1; 

     if(even) { //if we need even chars, start with 1; 

      i=0; 

     } 

     for(; i < input.length(); i = i + 2){ 

      System.out.println(input.charAt(i)); 

     } 
    } 

    private static boolean sameStarChar(String input) { 

     int i=0; 

     for (;i < input.length();i=i+1){ 

      if (input.substring(i,(i+1))=="*"){ 


       if(input.substring((i-1),i)==input.substring((i+1),(i+2))){ 

        return true; 
       } 

       else 

        return false; 
      } 
     } 

    } 
} 
+0

'if (input.substring (i, (i + 1)) ==" * ")', 'if (input.substring ((i-1), i) == input.substring ((i + 1), (i + 2)))' '-> [Comment comparer les chaînes en Java? ] (https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Pshemo

+0

À côté: considérons 'for (int i = pair? 0: 1; i

Répondre

2

Dans cette boucle:

for (;i < input.length();i=i+1){ 
     if (input.substring(i,(i+1))=="*"){ 
      if(input.substring((i-1),i)==input.substring((i+1),(i+2))){ 
       return true; 
      } 
      else 
       return false; 
     } 
    } 

(. Comme indiqué dans un commentaire, == est faux, l'utilisation equals())

Si votre code trouve une *, il vérifiera la caractères avant et après pour voir s'ils sont égaux. Si elles le sont, il retournera true de la méthode entière; sinon, la méthode renvoie false. Je pense que cette logique est fausse, mais je ne comprends pas complètement les exigences.

Mais la raison de l'erreur est: que se passe-t-il s'il n'y a pas * dans la chaîne? Ou si la boucle for ne s'exécute jamais (parce que la chaîne d'entrée est vide)? Ensuite, le code complétera la boucle for sans jamais rien retourner. Alors qu'est-ce qui se passe? Le code doit retourner quelque chose. Le compilateur voit que si vous arrivez à ce point, la méthode retournera sans une instruction return indiquant la valeur à retourner, ce qui est un non-non (sauf pour une méthode void). C'est pourquoi vous obtenez l'erreur. Vous pouvez penser que l'entrée ne sera jamais vide et aura toujours * quelque part, mais le compilateur ne le sait pas. Donc, vous aurez besoin d'un return ou throw quelque part après la boucle.

Je me méfie de votre logique. Est-il possible qu'il y ait plus d'un * dans la chaîne? Si oui, alors qu'est-ce que la méthode est censée faire - vérifier seulement le premier, ou les vérifier tous? Si la méthode doit s'assurer que les caractères autour de chaque * sont identiques, la méthode ne peut pas retourner true jusqu'à ce qu'elle les ait tous vérifiés. Cela signifie que vous ne pouvez pas retourner true tant que la boucle n'est pas terminée. Vous retournez true depuis l'intérieur de la boucle, ce qui vous donnera une mauvaise réponse. Je n'en suis pas certain, car je ne connais pas vraiment les détails de ce que la méthode est censée accomplir. Mais c'est une erreur courante chez les programmeurs plus récents qui utilisent une boucle pour essayer de chercher quelque chose ou tester toutes les occurrences de quelque chose.

(Une note finale. Si vous regardez les caractères individuels, il est beaucoup plus facile à utiliser charAt() au lieu de substring())