【问题标题】:concatenated sum of two arrays of integer两个整数数组的串联和
【发布时间】:2018-09-02 17:36:16
【问题描述】:

我得到了这样的输出

线程“main”中的异常 java.util.InputMismatchException 在 java.util.Scanner.throwFor(Scanner.java:864) 在 java.util.Scanner.next(Scanner.java:1485) 在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Main.main(Main.java:9)

我们已经取了两个大小为 m 和 n 的数组,现在我们必须取 m 和 n 大小的数组 我们必须连接每个数组并执行我们得到的两个数组的加法 例如:

m=4,n=5

  • 1 2 4 5
  • 5 7 3 12 6
  • 输出是->574371

1245 + 573126=574371

import java.util.*;
public class Main {

    public static void main(String[] args) {
        //Your Code Here

Scanner s=new Scanner (System.in);
int i,j,cc,dd;
int m=s.nextInt();
int n=s.nextInt();
int a[]=new int[m];
int b[]=new int[n];
for(i=0;i<m;i++)
{
    a[i]=s.nextInt();

}
for(j=0;j<n;j++)
{
    b[j]=s.nextInt();
}
String s1=Arrays.toString(a);
String s2=Arrays.toString(b);

cc=Integer.parseInt(s1);
dd=Integer.parseInt(s2);

System.out.print(cc+dd);



    }
}

【问题讨论】:

  • 您在找什么先生?有什么错误吗?优化?
  • 您忘记提问了吗?
  • 错误:不兼容的类型:int[]不能转换为String[] String a[]=new int[m];
  • 确实,看看这行代码。您开始定义一个字符串数组并创建一个整数数组。
  • 您应该将第一个数组中的所有值附加到一个字符串,并将第二个数组中的所有值附加到第二个字符串,然后使用Integer.parseInt()那些具有附加值的新字符串转换为int,它将起作用

标签: java int parseint


【解决方案1】:

另一种方法:您可以尝试利用字符串连接。

import java.util.*;

public class Hello {

    public static void main(String[] args) {
        // Your Code Here

        Scanner s = new Scanner(System.in);
        int i, j, cc, dd;
        int m = s.nextInt();
        int n = s.nextInt();
        // int a[]=new int[m];
        // int b[]=new int[n];
        String a = "";
        String b = "";
        for (i = 0; i < m; i++) {
            a += s.next();

        }
        for (j = 0; j < n; j++) {
            b += s.next();
        }
        // String s1=Arrays.toString(a);
        // String s2=Arrays.toString(b);
        //
        cc = Integer.parseInt(a);
        dd = Integer.parseInt(b);

        System.out.print(cc + dd);

    }
}

【讨论】:

  • 我更喜欢这个,而不是使用数组
【解决方案2】:

对于循环中的字符串连接,最好使用StringBuilder

try (Scanner scan = new Scanner(System.in)) {
    final Function<Integer, Integer> readValue = digits -> {
        StringBuilder buf = new StringBuilder();

        for (int i = 0; i < digits; i++)
            buf.append(scan.nextInt());

        return Integer.parseInt(buf.toString());
    };

    int m = scan.nextInt();
    int n = scan.nextInt();
    System.out.println(readValue.apply(m) + readValue.apply(n));
}

或者完全使用Streams

try (Scanner scan = new Scanner(System.in)) {
    final Function<Integer, Integer> readValue = digits ->
            Integer.parseInt(IntStream.range(0, digits)
                                      .map(i -> scan.nextInt())
                                      .mapToObj(String::valueOf)
                                      .collect(Collectors.joining()));

    int m = scan.nextInt();
    int n = scan.nextInt();
    System.out.println(readValue.apply(m) + readValue.apply(n));
}

【讨论】:

    【解决方案3】:

    您可以从数组中构建数字,并且可以像下面这样求和: 比如使用 parseInt() 方法将 int 数组转换为字符串,然后将字符串转换为整数。

    public static void main(String args[]) {
        int[] arr1 = {1 ,2, 4 ,5};
        int[] arr2 = {5 ,7, 3 ,12 ,6};
    
        long sum = getNumber(arr1) + getNumber(arr2);
        System.out.println(sum);
    
            }
    
            public static int getNumber(int[ ] arr) {
                String number ="";
                for(int i : arr) {
                    number = number + i;
                }
                return Integer.parseInt(number);
            }
    
    }
    

    【讨论】:

      【解决方案4】:

      在代码中,我建议你使用一些停用词来停止扫描流,这个例子使用empty string ~ "" 每次迭代都不需要将字符串值解析为整数。 阅读后,我会执行以下步骤。

      首先,代码根据您的示例替换数字之间的所有空格。

      其次,使用正则表达式过滤您的输入值。

      第三,那么我们只有数字,我们应该将它们转换为整数值,没有任何问题。

      最后一步是汇总,它计算输入和打印结果的总和。

      public static void main(String[] args) {
          ArrayList<String> arrays = new ArrayList<>();
          Scanner scanner = new Scanner(System.in);
      
          String bufferLine;
          while (scanner.hasNextLine() && !Objects.equals(bufferLine = scanner.nextLine(), "")) {
              arrays.add(bufferLine);
          }
      
          int sum = arrays.stream()
                  .map(s -> s.replace(" ",""))
                  .filter(s -> s.matches("\\d+"))
                  .mapToInt(Integer::valueOf)
                  .sum();
          System.out.println(sum);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 2012-10-22
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        相关资源
        最近更新 更多