2017-10-10 3 views
0

Donc le point de ce projet est le valider si l'utilisateur a entré un nombre 0-9 ou s'il a un nombre décimal. Il valide si c'est un nombre ou une lettre mais si l'utilisateur ne met rien, la boucle fonctionne toujours comme si c'était un nombre valide. Donc, bug 1: Les accès utilisateurs entrent avant d'entrer un nombre à virgule flottante valide et le script est toujours valide. Bug 2: L'utilisateur entre une période sans entrer de chiffres et le script est toujours valide.ascii compteur de table avec Java ne retournant null comme faux

package numbers; 

/* 
* Name: Joshua Trimm 
* Date: 9-24-17 
* class: CISP 1010 
* Project: IsAValidNumber 
*/ 

import java.util.Scanner; 

public class IsAValidNumber 
{ 




    public static void main(String[] args) 
    { 

     //console input scanner 
     Scanner consoleInput = new Scanner(System.in); 


     //Prompt user for input 
     System.out.print("enter a valid number:"); 
     String validat = consoleInput.nextLine(); 
     //define boolean from method 
     boolean isTrue = NumberIsValid(validat); 
     //while loop 
     while(isTrue == true) 
     { 


      System.out.println(validat + " is a valid number. Please enter another value:"); 
      validat = consoleInput.nextLine(); 
      isTrue = NumberIsValid(validat); 


     } 
     //if it jumps out of the while because it is false run this 
     System.out.println(validat + " is not a valid number, bye"); 
     consoleInput.close(); 
    } 

    //setup a boolean method 
    public static boolean NumberIsValid(String value) 
    { 

     //define local variables 
     int period = 0; 
     boolean valid = true; 
     int length = value.length(); 


     //run through the string 

     //check the numbers 

     for(int i = 0; i < length; i++) 
     { 
      char aChar = value.charAt(i); 
      // make sure it doesn't start with a space 
      if((int)aChar == 20) 
      { 
       valid =false; 
       break; 
      } 

      // check to make sure its is a int 0-9 
      else if((int)aChar < 48 || (int)aChar > 57) 
      { 

       if((int)aChar == 46) 
       { 
        period++; 
       } 
       else 
       { 
        valid = false; 
        break; 
       } 

      } 

      //make sure it doesn't have more than one period 

      if (period > 1) 
      { 
       valid = false; 
       break; 
      } 

     } 


     return valid; 

    } 
} 

Toute aide serait grandement appréciée! Merci d'avance.

Répondre

0

Pour le bogue n ° 1: dans votre méthode NumberIsValid(String value), vous ne vérifiez jamais si l'argument est vide ou non. Lorsqu'un argument vide est passé à votre méthode, la boucle for est ignorée et renvoie true.

Pour bug # 2: pas la meilleure solution, mais vous pouvez simplement créer quelque chose comme ceci:

if (value.contains(".") && length == 1) { 
     return false 
    } 
+0

Merci! Le correctif Bug # 2 fonctionne très bien. J'ai toujours un peu de mal aveC# 1. Quand dois-je vérifier dans l'entrée isEmpty()? Ces boucles me font boucler mon cerveau autour de lui-même! –

+0

Ça n'a pas vraiment d'importance. Je voudrais simplement vérifier si l'entrée est vide après la ligne 'int length = value.length()'. – Flaom

+0

Merci @Flaom. Je vais l'exécuter et voir ce qui se passe. –

0

Après un certain besoin d'aide beaucoup, la solution est ci-dessous. La correction du bogue n ° 1 consistait à implémenter un moyen de vérifier la chaîne de passage pour voir si elle était vide. Et la correction du bogue n ° 2 était de vérifier si l'utilisateur ne saisissait qu'une période et qu'il n'y avait qu'une longueur de caractère. Assez intelligent de la part de @ Flaom.

Fix # 1: assurez-vous d'entrée avant le début de la boucle

//validate to see if string is empty before starting! 
     if(value.isEmpty()) 
     { 
      valid = false; 

     } 

Fix # 2:

// check to see if user only input a period 
     if (value.contains(".") && length == 1) { 
      valid = false; 
     } 

S'il vous plaît voir le codage ci-dessous pour voir exactement où placer.

package numbers; 

    /* 
    * File name: IsAValidNumber.java 
    * Project name: Is a Valid Number 
    * 
    * Creator's name: Joshua Trimm 
    * Email: [email protected] 
    * Course and section: CISP 1010 
    * Creation Date: 10-9-17 
    */ 

    import java.util.Scanner; 
    /* 
    * <b>Floating point value validation</b> 
    * <hr> 
    * Date created: 10-9-2017 
    * <hr> 
    * @author Joshua Trimm 
    * 
    */ 
    public class IsAValidNumber 
    { 


     /* 
     * Method description: This is the main method 
     * @param args 
     * @return void 
     */ 

     public static void main(String[] args) 
     { 

      //console input scanner 
      Scanner consoleInput = new Scanner(System.in); 


      //Prompt user for input 
      System.out.print("enter a valid number:"); 
      String validat = consoleInput.nextLine(); 
      //define boolean from method 
      boolean isTrue = NumberIsValid(validat); 
      //while loop 
      while(isTrue == true) 
      { 


       System.out.println(validat + " is a valid number. Please enter another value:"); 
       validat = consoleInput.nextLine(); 
       isTrue = NumberIsValid(validat); 


      } 
      //if it jumps out of the while because it is false run this 
      System.out.println(validat + " is not a valid number, bye"); 
      consoleInput.close(); 
     } 
     /* 
     * Method description: Setup a boolean method 
     * @param string 
     * @return boolean 
     */ 
     public static boolean NumberIsValid(String value) 
     { 

      //define local variables 
      int period = 0; 
      boolean valid = true; 
      int length = value.length(); 
      int digitCount = 0; 


      //validate to see if string is empty before starting! 
      if(value.isEmpty()) 
      { 
       valid = false; 

      } 

      //Start running through the string 
      for(int i = 0; i < length; i++) 
      { 


       char aChar = value.charAt(i); 


       // check to make sure its is a int 0-9 
       if((int)aChar < 48 || (int)aChar > 57) 
       { 
       // check for the period 
        if((int)aChar == 46) 
        { 
         period++; 
         if(length < 2) 
         { 
          valid = false; 
          break; 
         } 
        } 

        else 
        { 
         valid = false; 
         break; 
        } 

       } 

       //make sure it doesn't have more than one period 

       if (period > 1) 
       { 
        valid = false; 
        break; 
       } 

       // check to see if user only input a period 
       if (value.contains(".") && length == 1) { 
        valid = false; 
       } 
      } 


      return valid; 

     } 
    } 
0

Fist de tous dans votre code que vous archivez les cas non favorables, mais je vous suggère de vérifier que dans les cas favorables à vérifier le numéro 1 à 9 et occurrence de la « » J'ai changé votre méthode un peu

public static boolean NumberIsValid(String value) 
{ 


    int period = 0; 
    boolean valid = false; 


    for(int i = 0; i < length; i++) 
    { 
    if(value.charAt(i)>=48 && value.charAt(i)<=57) valid=true; 
    if(value.charAt(i)==46) {valid=true;period++;} 
    if(period!=1 && period!=0) {valid=false;break;} 

    } 


    return valid; 

} 

Par ce code, nous vérifions que pour 0 à 9 et l'occurrence de « » Si une autre condition survient, elle retournera false. De cette façon, nous pouvons le rendre simple
vous ajoutez cette méthode dans votre code et compilez simplement et faites-moi savoir si vous êtes confrontés à nouveau le même problème.