J'essaie de remplacer des éléments spécifiques d'un tableau d'entiers, en fonction d'une condition, par des chaînes. J'identifie les éléments int qui doivent être remplacés en utilisant l'opérateur de module.

class Source {
    public static void main(String args[]) {
        int[] numbers = { 1, 2, 34, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
        fizzBuzz(numbers);
    }

    public static void fizzBuzz(int[] numbers) {
        // Write the function body here
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] % 3 == 0 && numbers[i] % 5 == 0) {
                numbers[i] = "FizzBuzz";
            } else if (numbers[i] % 5 == 0) {
                numbers[i] = "Buzz";
            } else if (numbers[i] % 3 == 0) {
                numbers[i] = "Fizz";
            } else {
                numbers[i] = numbers[i];
            }
            System.out.print(numbers[i] + " ");
        }
    }
}

Je reçois l'erreur:

Source.java:11: error: inconvertible types
            numbers[i] = (int) "FizzBuzz";
                               ^
  required: int
  found:    String
Source.java:13: error: inconvertible types
            numbers[i] = (int) "Buzz";
                               ^
  required: int
  found:    String
Source.java:15: error: inconvertible types
            numbers[i] = (int) "Fizz";
                               ^
  required: int
  found:    String
3 errors
0
Mohammed Safee Uddin 2 juin 2020 à 21:59

3 réponses

Meilleure réponse

Un tableau qui a été déclaré en tant que tableau d'entiers ne peut pas être rempli de chaînes, car Java est un langage fortement typé.

Voici comment vous pouvez atteindre le même objectif sans violer les principes de Java. Vous pouvez imprimer le résultat dès qu'il est trouvé en fonction de la logique.

class Source {
  public static void main(String args[]) {
    int[] numbers = {1,2,34,5,6,7,8,9,10,11,12,13,14,15};
    fizzBuzz(numbers);
  }

  public static void fizzBuzz(int[] numbers) {
      //Write the function body here 
      for(int i = 0; i < numbers.length; i++){
          if(numbers[i] % 3 == 0 && numbers[i] % 5 == 0){
            System.out.print("FizzBuzz" + " ");
          }else if(numbers[i] % 5 == 0){
            System.out.print("Buzz" + " ");
          }else if(numbers[i] % 3 == 0){
            System.out.print("Fizz" + " ");
          }else {
            System.out.print(numbers[i] + " ");
          }
      }
  }
}
3
Chana 2 juin 2020 à 19:03

Vous devez utiliser un String[] au lieu d'un int[]. Java n'autorise pas le stockage des valeurs String dans une variable ou un tableau int. Vous pouvez stocker des valeurs du même type ou d'un sous-type dans une variable ou un tableau.

Procédez comme suit:

import java.util.Arrays;

public class Source {
    public static void main(String args[]) {
        String[] numbers = { "1", "2", "34", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15" };
        fizzBuzz(numbers);
        System.out.println(Arrays.toString(numbers));
    }

    public static void fizzBuzz(String[] numbers) {
        // Write the function body here
        for (int i = 0; i < numbers.length; i++) {
            int n = Integer.parseInt(numbers[i]);
            if (n % 3 == 0 && n % 5 == 0) {
                numbers[i] = "FizzBuzz";
            } else if (n % 5 == 0) {
                numbers[i] = "Buzz";
            } else if (n % 3 == 0) {
                numbers[i] = "Fizz";
            } else {
                numbers[i] = numbers[i];
            }
        }
    }
}

Sortie:

[1, 2, 34, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz]

Alternativement ,

import java.util.Arrays;

public class Source {
    public static void main(String args[]) {
        int[] numbers = { 1, 2, 34, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
        String[] arr = new String[numbers.length];
        fizzBuzz(numbers, arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void fizzBuzz(int[] numbers, String[] arr) {
        // Write the function body here
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] % 3 == 0 && numbers[i] % 5 == 0) {
                arr[i] = "FizzBuzz";
            } else if (numbers[i] % 5 == 0) {
                arr[i] = "Buzz";
            } else if (numbers[i] % 3 == 0) {
                arr[i] = "Fizz";
            } else {
                arr[i] = String.valueOf(numbers[i]);
            }
        }
    }
}

Sortie:

[1, 2, 34, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz]
0
Arvind Kumar Avinash 2 juin 2020 à 19:20

J'essaye de replace éléments spécifiques d'un tableau de integers, basé sur une condition, avec strings.

Dans ce cas particulier, le moyen le plus simple est de stocker les entiers dans le tableau d'origine sous la forme Objects. Ensuite, il vous suffit de les caster sur un int pour travailler avec eux.

public static void main(String args[]) {
    Object[] numbers = {1,2,34,5,6,7,8,9,10,11,12,13,14,15};
    fizzBuzz(numbers);
    System.out.println(Arrays.toString(numbers));
}

public static void fizzBuzz(Object[] numbers) {
    int i = 0;
    for (Object o : numbers) {
        int n = (int)o;
        boolean t3 = n % 3 == 0;
        boolean t5 = n % 5 == 0;

        numbers[i] = t3 && t5 ? "FizzBuzz" : t3 ? "Fizz" :
                t5 ? "Buzz" : n;
        i++;
    }
}

Impressions

[1, 2, 34, Fizz, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz]

Points à considérer.

  • établissez les résultats booléens once puis appliquez-les simplement à un opérateur chaîné ternary. L'opérateur ternaire a?b:c signifie if a is true then b, else c
  • puisque cela utilise Objects, il n'y a pas de problème pour remettre le résultat (soit String or int) dans le tableau
  • et comme vous n'utilisez que des entiers pour commencer, vous n'obtiendrez pas d'exception de conversion de classe lorsque vous effectuez (int)o
1
WJS 2 juin 2020 à 20:17