Erreur d'initialisation Java


double pullPrice(String input){
        if(input.length() < 3){
            System.out.println("Error: 02; invalid item input, valid example: enter code here'milk 8.50'");
            System.exit(0);
        }
        char[] inputArray = input.toCharArray();
        char[] itemPriceArray;
        double price;
        boolean numVal = false;
        int numCount = 0;
        for(int i = 0; i <= inputArray.length-1; i ++){
            //checking if i need to add char to char array of price
            if(numVal == true){
                //adding number to price array
                itemPriceArray[numCount] = inputArray[i];
                numCount++;
            }
            else{
                if(inputArray[i] == ' '){
                    numVal = true;
                    //initializing price array
                    itemPriceArray = new char[inputArray.length - i];
                }
                else{

                }
            }


        }
        price = Double.parseDouble(String.valueOf(itemPriceArray));
        return price;
    }

Problème: tentative de tirer la séquence de caractères après l'espace blanc entre 'milk 8.50' en entrée. Une erreur d'initialisation se produit car j'initialise un tableau de caractères dans une instruction if else qui initialisera le tableau s'il trouve des espaces.

Question: puisque je ne connais pas mon nombre de caractères jusqu'à ce que je trouve un espace, existe-t-il un autre moyen d'initialiser? Le compilateur ne me fait-il pas confiance que je vais initialiser avant d'appeler array.

De plus, s'il me manque quelque chose ou s'il existe de meilleures façons de coder tout cela, faites-le moi savoir. Je suis dans une classe de structures de données java et j'apprends des structures de données fondamentales, mais je voudrais également me concentrer sur l'efficacité et la modularité en même temps. J'ai aussi une fonction pullPrice qui fait la même chose mais tire le nom de l'élément. Je voudrais les combiner afin de ne pas avoir à réutiliser le même code pour les deux, mais je ne peux renvoyer que des éléments avec le même type de données, sauf si je crée une classe. Malheureusement, cet exercice consiste à utiliser deux tableaux puisque nous pratiquons l'utilisation des sacs ADT. Toute aide est grandement appréciée?

Author: user3238382, 2017-09-11

4 answers

Essayez quelque chose comme ceci:

double pullPrice(String input)
{
   try
   {
      // Instantiate a new scanner object, based on the input string
      Scanner scanner = new Scanner(input);
      // We skip the product (EG "milk")
      String prod = scanner.next();
      // and read the price(EG 8.5)
      double price = scanner.nextDouble();
      // We should close the scanner, to free resources...
      scanner.close();
      return price;
   }
   catch (NoSuchElementException ex)
   {
      System.out.println("Error: 02; invalid item input, valid example: enter code here 'milk 8.50'");
      System.exit(0);
   }

}
 2
Author: Usagi Miyamoto, 2017-09-10 21:58:14

Si vous êtes sûr que votre programme n'obtiendra que les données d'entrée appropriées, initialisez simplement votre tableau avec null:

char[] itemPriceArray = null;

Le principal problème pourquoi le compilateur se plaint-que se passe-t-il si votre programme accède à une variable non initialisée (par exemple avec des données d'entrée incorrectes)? Le compilateur Java empêche complètement ce genre de situations.

 0
Author: algrid, 2017-09-10 21:59:07

Je vais ajouter aux autres réponses, puisque vous ne pouvez pas modifier la taille d'un tableau une fois créé. Vous devez soit l'allouer plus grand que vous pensez que vous aurez besoin ou accepter les frais généraux d'avoir à réaffecter ses besoins pour croître en taille. Quand c'est le cas, vous devrez en allouer un nouveau et copier les données de l'ancien vers le nouveau:

int oldItems[] = new int[10];
for (int i=0; i<10; i++) {
  oldItems[i] = i+10;
}
int newItems[] = new int[20];
System.arraycopy(oldItems, 0, newItems, 0, 10);
oldItems = newItems;
 0
Author: , 2017-09-10 22:06:01
char[] itemPriceArray = new char[inputArray.length];
 0
Author: M.Fneish, 2017-09-11 08:33:28