0 votes

Public String shorthand(String in)

Je suis bloqué sur ce code.

Le code doit utiliser la classe StringBuilder pour construire une chaîne de sortie en ajoutant les caractères non-voyelles de son argument au résultat qu'il renvoie. Il doit identifier les voyelles à supprimer en utilisant la méthode d'aide que j'ai créée et qui est public boolean isVowel(char c).

public String shorthand(String in) C'est la méthode pour laquelle j'ai besoin d'aide. J'ai créé le stringbuilder mais la condition if n'accepte pas la méthode isVowel.

import java.io.*;
import java.util.*;

public class Shorthand
{    

    public boolean isVowel(char c)
   {

       if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A'|| c == 'E'||c == 'I'|| c == 'O'|| c == 'U')
       {
           return true;
       }
       else
       {
           return false;
       }
   }

    //TODO Complete the shorthand method
    public String shorthand(String in) //this is the code I need help with
    {
      StringBuilder vowel = new StringBuilder();

      if (isVowel() == false)
      { 
        vowel.append(in); 
       } 
          return vowel.toString(); 
    }

    //TODO Complete the run method
    public void run() throws IOException
    {
       String yourLine; 
       Scanner sc = new Scanner(System.in); 
       yourLine = sc.nextLine(); 
       while(!yourLine.equals("*"));
       {
            System.out.println("Enter your line of text");
       }
       yourLine = sc.nextLine(); 
    }
}

2voto

ryanprayogo Points 5058

Vous n'avez pas passé le char c argument de isVowel()

Essayez ça :

public String shorthand(String in) { 
        StringBuilder vowel = new StringBuilder();

        for (char c : in.toCharArray()) {
            if (!isVowel(c)) {
                vowel.append(c);
            }
        }

        return vowel.toString();
}

EDIT : Votre run() La méthode semble être un peu bizarre...

Peut-être que ce qui suit est ce que vous vouliez ?

public void run() throws IOException
{
    String yourLine;
    Scanner sc = new Scanner(System.in);
    while (!sc.nextLine().equals("*")) {
        System.out.println("Enter your line of text");
    }
}

D'ailleurs, il n'appelle même pas la fonction shorthand() méthode.

2voto

polygenelubricants Points 136838

Il y a beaucoup à apprendre de votre code.

En retournant une expression booléenne

Voici une version améliorée de isVowel(char ch) :

public boolean isVowel(char ch) {
    ch = Character.toLowerCase(ch);
    return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
}

Notez deux choses ici :

  • ch est simplifié en minuscules, ce qui réduit considérablement le nombre de contrôles.
  • Il n'y a pas if déclaration.

Il y a une leçon importante à tirer ici : vous ne devriez jamais écrire quelque chose comme ça :

if (expression) {
   return true;
} else {
   return false;
}

Vous devriez toujours écrire à la place :

return expression;

C'est beaucoup, beaucoup plus clair.


Se familiariser avec la bibliothèque Java

Notez l'utilisation de Character.toLowerCase dans le code ci-dessus. En fait, il est possible de rendre le code encore plus simple en utilisant, par exemple, les éléments suivants String.indexOf :

public boolean isVowel(char ch) {
    return "aeiouAEIOU".contains("" + ch);
}

Cela utilise String.contains en utilisant la concaténation de chaînes de caractères pour convertir de manière efficace l'adresse de l'utilisateur. char à un String (qui implements CharSequence ).

Lien API

  • java.lang.Character
    • Le site digit , isXXX et toXXX les méthodes sont très utiles
  • java.lang.String
    • Beaucoup de méthodes utiles pour la manipulation des chaînes de caractères

Voir aussi


Ne pas comparer avec les constantes booléennes

Les débutants ont tendance à écrire quelque chose comme ça :

if (expression1 == false) {
}
//...
if (expression2 == true) {
}

En particulier en Java, vous devriez plutôt apprendre à écrire comme ceci :

if (!expression1) {
}
//...
if (expression2) {
}

C'est beaucoup plus clair et beaucoup moins sujet aux erreurs.

Voir aussi


En itérant sur chaque caractère d'un String

Voici une boucle simple pour montrer comment la manière indexée de faire ceci :

    String s = "Abracadabra";
    for (int i = 0; i < s.length(); i++) {
        System.out.print("[" + s.charAt(i) + "]");
    } // prints "[A][b][r][a][c][a][d][a][b][r][a]"

Cela utilise le length() y charAt(int index) méthodes de String .

Alternativement, si vous n'avez pas besoin de l'index, vous pouvez aussi utiliser String.toCharArray() pour faire un foreach sur le char[] à la place. Cette méthode n'est pas efficace en termes d'espace (le char[] doit être nouvellement alloué pour garantir l'immuabilité), mais il est très lisible et concis :

    String s = "Abracadabra";
    for (char ch : s.toCharArray()) {
        System.out.print("[" + ch + "]");
    } // prints "[A][b][r][a][c][a][d][a][b][r][a]"

Voir aussi


Sur le processus de développement des logiciels

Comme d'autres l'ont mentionné, votre run est très problématique : elle aboutit actuellement à une boucle infinie.

Ce que vous auriez pu faire à la place, c'est écrire ce qu'on appelle des " stubs de méthodes " pour isVowel (par exemple, simplement return true; ) et shorthand (par exemple, simplement return ""; ). Ils ne sont pas encore corrects, mais l'important est qu'ils compilent pour le moment. Cela vous laisse le temps de vous concentrer sur run Vous devez vous assurer que la boucle fonctionne correctement et que vous êtes en mesure d'extraire les données pertinentes de l'utilisateur. Vous devez amener le code au point où il se compile et s'exécute, de manière à pouvoir le tester et être sûr que votre run fait ce qu'il doit faire. À ce stade, vous pouvez commencer à compléter les méthodes précédemment stubées, en implémentant les fonctionnalités appropriées selon les besoins.

Si vous avez des difficultés à y parvenir, vous pouvez poser des questions sur cet aspect particulier des devoirs (mais cherchez d'abord sur stackoverflow !). Vous obtiendrez ainsi des réponses de qualité et ciblées sur les problèmes que vous rencontrez (plutôt que de poser un code si problématique que les gens peuvent s'y perdre), ce qui est donc plus instructif pour vous.

La question est également susceptible d'être plus utile aux autres puisqu'elle s'inscrit dans un contexte plus général (c'est-à-dire qu'elle porte sur la façon d'écrire une boucle d'invite utilisateur, et non sur la façon de faire ses devoirs) (en revanche, cette question est actuellement intitulée public String shorthand(String in) ).

Une autre chose que vous pouvez faire est d'effectuer ce que l'on appelle tests unitaires . isVowel est un GREAT candidat pour cela : pour tester son exactitude, il faudrait savoir comment l'invoquer (ce qui semble vous poser problème).

Tout cela semble être un travail inutile au début. On peut supposer que les tests unitaires ne font pas partie du devoir (bien qu'ils devraient probablement en faire partie), et écrire des stubs puis les remplacer par quelque chose d'autre semble être une perte de temps et que vous devriez plutôt faire les choses correctement du premier coup. C'est précisément parce qu'il s'agit d'un devoir à domicile que vous devez adopter et mettre en pratique les méthodologies d'un bon processus de développement logiciel. C'est pour votre propre bien.

Voir aussi

1voto

Chris Knight Points 7946

Vous devez transmettre une valeur char à la fonction isVowel() méthode. Essayez ce qui suit :

public String shorthand(String in) 
{
  StringBuilder vowel = new StringBuilder();

  for (int i=0; i < in.length(); i++)
  {
      if (isVowel(in.charAt(i)) == false)
      { 
        vowel.append(in.charAt(i)); 
      }
  } 
  return vowel.toString(); 
}

1voto

mdma Points 33973

Vous voulez quelque chose comme ça

public String shorthand(String in)
{
      int length = in.length();
      StringBuilder noVowels = new StringBuilder(length);
      for (int i=0; i<length; i++)
      {
         c = in.charAt(i);
         if (!isVowel(c))
           noVowels.append(c);
      }
      return noVowels.toString(); 
}

PS : Votre méthode isVowel ne vérifie que les minuscules. Si vous souhaitez reconnaître les voyelles en majuscules et en minuscules, appelez la méthode Character.toLowerCase dans la première ligne de isVowel.

EDIT : Je n'ai pas commenté la méthode run() parce que j'ai supposé que c'était un travail en cours. Comme vous avez des problèmes avec ça, voici une version corrigée.

public static void main(Stirng[] args) throws IOException
{
   Scanner sc = new Scanner(System.in);
   for(;;) {
    System.out.println("Enter your line of text");
    String line = sc.nextLine();
    if (line.equals("*")) break;
    String shortHandLine = shorthand(line);
    System.out.println(String.format("Shorthand form of %s is %s", line, shortHandLine));
   }    
}

Comme il s'agit d'une application, vous pouvez faire un clic droit et l'exécuter dans la plupart des IDE.

1voto

Uri Points 50687

Veuillez étiqueter ceci comme un devoir

Pour aller droit au but : beaucoup de problèmes ici

Tout d'abord, vous devez faire en sorte que votre main appelle effectivement shortHand sur chaque ligne, et probablement imprimer les résultats.

Deuxièmement, votre fonction sténographique doit itérer sur tous les caractères de la chaîne de caractères, ce que vous ne faites pas actuellement. Vous allez passer chaque caractère à la fonction isVowel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X