簡體   English   中英

比較Java中的2組數組

[英]compare 2 sets of arrays in java

創建並填充兩組雙精度值,其中元素的數量和元素本身由用戶指定。 遍歷集合並比較值。

在本實驗中,我們將說順序對於確定集合是否相同很重要。

如果數組的長度和值都相同,則打印組1和組2相等。 否則,打印設置一和設置二不相等。 這是我的代碼,但是當我運行它時,我收到此消息:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at SetComparison.main(SetComparison.java:23)

我是編碼新手,有人可以告訴我這是什么問題嗎?

import java.util.*;
import java.lang.*;
import java.io.*;


public class SetComparison
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Scanner scnr = new Scanner(System.in);
        String str = scnr.nextLine();

        String[] allNums = str.split("\\s+");

        int array1Length = Integer.valueOf(allNums[0]);
        int array2Length = Integer.valueOf(allNums[array1Length + 1]);

        double array1[] = new double[array1Length];
        double array2[] = new double[array2Length];

        for (int i = 0; i < array1Length; i++) {
            array1[i] = Double.valueOf(allNums[i + 1]);
        }
        for (int i = 0; i < array2Length; i++) {
            array2[i] = Double.valueOf(allNums[array1Length + i + 2]);
        }

        if (Arrays.equals(array1, array2)) {
            System.out.println("set one and set two are equal");
        } else {
            System.out.println("set one and set two are not equal");
        }
    }
}

使用掃描儀,您需要檢查hasNextLine()是否存在下一行

所以循環變成

while(scnr.hasNextLine()){
    str=scnr.nextLine();
    //...
}

讀者在EOF上返回null

當然在這段代碼中,這取決於輸入的格式是否正確

您正在調用nextLine(),並且在沒有行時會引發異常。

嘗試以下修改的代碼:

package com.test;

import java.util.Arrays;
import java.util.Scanner;

public class SetComparison {
    public static void main(String[] args) throws java.lang.Exception {
        Scanner scnr = new Scanner(System.in);
        String str = scnr.nextLine();

        String[] allNums = str.split("\\s+");

        int array1Length = Integer.valueOf(allNums[0]);
        int array2Length = Integer.valueOf(allNums[1]); // Modified

        double array1[] = new double[array1Length];
        double array2[] = new double[array2Length];

        for (int i = 0; i < array1Length; i++) {
            array1[i] = Double.valueOf(allNums[i + 2]); // Modified
        }
        print(array1);
        for (int i = 0; i < array2Length; i++) {
            array2[i] = Double.valueOf(allNums[array1Length + i + 2]);
        }
        print(array2);
        if (Arrays.equals(array1, array2)) {
            System.out.println("set one and set two are equal");
        } else {
            System.out.println("set one and set two are not equal");
        }
    }

    private static void print(double[] array) {
        for (double d : array) {
            System.out.print(d + " ");
        }
        System.out.println();
    }
}

輸出:

2 2 3 4 3 4
3.0 4.0 
3.0 4.0 
set one and set two are equal

輸出:

2 2 3 4 3 5
3.0 4.0 
3.0 5.0 
set one and set two are not 

我剛剛檢查過您的代碼也可以:

輸出:

2 3 4 2 3 4
3.0 4.0 
3.0 4.0 
set one and set two are equal

2 3 4 2 3 5
3.0 4.0 
3.0 5.0 
set one and set two are not equal

在我的代碼中:

  1. 第一個元素是第一個數組的長度
  2. 第二個元素是第二個數組的長度
  3. 接下來是第一個數組的元素
  4. 接下來是第二個數組的元素

在您的代碼中:

  1. 第一個元素是第一個數組的長度
  2. 接下來是第一個數組的元素
  3. 下一個元素是第二個數組的長度
  4. 接下來是第二個數組的元素

兩者對我來說都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM