【问题标题】:replace element with string in an array of integers in java用java中的整数数组中的字符串替换元素
【发布时间】:2020-09-21 08:38:26
【问题描述】:

我正在尝试根据某些条件用字符串替换整数数组的特定元素。我正在识别必须使用模运算符替换的 int 元素。

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] + " ");
        }
    }
}

我收到了错误:

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

【问题讨论】:

  • 你为什么要那样做?为什么不直接根据检查获取字符串并打印出来?
  • 您不能将字符串存储在 int[] 数组中。
  • 感谢大家的早期回复@Maverick 感谢提供信息 ChiefTwoPencils 我是新手,正在尝试学习材料

标签: java arrays string dynamic integer


【解决方案1】:

声明为整数数组的数组不能用字符串填充,因为 Java 是一种强类型语言。

以下是在不违反 Java 原则的情况下实现相同目标的方法。您可以根据逻辑一找到结果就打印出来。

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] + " ");
          }
      }
  }
}

【讨论】:

    【解决方案2】:

    我正在尝试replaceintegers 数组的特定元素,基于某些条件,strings

    在这种特殊情况下,最简单的方法是将原始数组中的整数存储为Objects。然后,您只需将它们转换为 int 即可使用。

    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++;
        }
    }
    

    打印

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

    需要考虑的要点。

    • 建立布尔结果once,然后简单地将它们应用于链式ternary 运算符。三元运算符a?b:c 表示if a is true then b, else c
    • 因为这使用了Objects,所以将结果(String or int)放回数组中没有问题
    • 并且由于您只使用整数开头,因此在执行(int)o 时不会出现类转换异常

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 2016-08-04
      • 1970-01-01
      • 2011-04-13
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2021-11-14
      相关资源
      最近更新 更多