【问题标题】:Checking if all digits appears in another array检查所有数字是否出现在另一个数组中
【发布时间】:2014-11-29 22:11:23
【问题描述】:

我编写的这段代码应该要求用户输入包含他想要多少数字的第一个数组的长度,而不是接收每个数字直到数量完成。 之后他需要询问数字数组的长度,然后接收数字。 比,我需要检查所有数字是否包含所有数字,如果是真的,打印它,如果不是,打印假。 在这段代码中,我已经用字符串数组替换了 int[],因为我认为这就是它的工作方式。 当我尝试制作一个只有一位数字的 Int 数组时,它的效果很好,当您想要 22 之类的 2 位数字时,问题就出现了,检查中断并且不起作用。

String numInNumbersArray,
digitInDigitsArray;
int counterNumbers=0;
System.out.println("Please enter the length of the numbers array: ");
int numbersLength=s.nextInt();
String[] numbersArray=new String [numbersLength];

System.out.printf("Please enter %d numbers: ",numbersLength);
    for(int i=0;i<numbersArray.length;i++){
        numInNumbersArray=s.next();
        numbersArray[i]=numInNumbersArray;
    }
System.out.println("Please enter the length of the digits array: ");
int digitsLength=s.nextInt();
String[] digitsArray=new String [digitsLength];
System.out.printf("Please enter %d digits between 0 - 9 and - if you want: ",digitsLength);
    for(int i=0;i<digitsArray.length;i++){
        digitInDigitsArray=s.next();
        digitsArray[i]=digitInDigitsArray;
        }
    for(int i=0;i<digitsArray.length;i++){
        for(int j=0;j<numbersArray.length;j++){
            if(numbersArray[j].equals(digitsArray[i])){
                counterNumbers++;
            }
        }
    }
    if(counterNumbers==numbersArray.length){
        System.out.println("true\n");
    }else{
        System.out.println("false\n");
    }

所以我显然需要一个字符串数组,但我不知道如何从这里继续检查数字中的每个数字。 (我不能使用高级方法,只有简单的检查)。 您的帮助或调整会很棒。谢谢。

编辑:它必须是字符串,因为它也可能包含“-”(负数) 为了更清楚地理解,我将添加示例:

digits arrays for example : (1,2,-,3)
and numbers array : (1,-2,3)

这应该返回 true。

and digits: (1,2,3)
numbers: (12,-3,123)

应该返回 false。

【问题讨论】:

  • numbersArray[j]==digitsArray[i] 不,您将字符串与 ==.. 进行比较!欲了解更多信息,请参阅How do I compare strings in Java?
  • 糟糕。那是我的错,但无论如何它不会改变我的主要问题,因为我需要移动每个数字的整数并检查,这就是我的主要问题
  • 你的问题并不完全清楚:“我需要检查所有数字是否包含所有数字” - 你必须以更好的方式说,甚至举个例子,什么时候是真的,什么时候错误的。但无论如何,这个基础将是除数,你正在进入数字。所以首先你将输入保存到 int[] 数组,然后在这个数组中的每个 int 上你都在做这样的事情: do { newArray[index++] = number % 10;数字/= 10; } 而(数字 > 0)
  • 这是一个错字吗:数字数组,例如:(1,2,-,3)。这应该是数字数组,例如:(1,-2,3)。如果不是,我想我误解了你的问题
  • 有 2 个数组,一个包含用户输入的数字,例如 21 123 -10 或他想要的任何内容,并且应该是另一个数组,用户输入“合法”数字,例如 1,2,- ,3 等等(取决于输入是什么),我需要检查数字数组中每个数字中的所有数字是否包含所有合法数字

标签: java


【解决方案1】:

您的问题在于检查数组是否相等。

想象一下,如果 numbersArray = {"2", "2"}digitsArray = {"2", "2"} 像你上面所说的那样。

这个循环:

for(int i=0;i<digitsArray.length;i++){
    for(int j=0;j<numbersArray.length;j++){
        if(numbersArray[j].equals(digitsArray[i])){
            counterNumbers++;
        }
    }
}

将比较第一个“2” - numbersArray[0]digitsArray[0] AND digitsArray[1],得到 counterNumbers = 2。然后,第一个 for 循环将处理到 i=1,它会出现第二个“2” - numbersArray[1]digitsArray[0] AND digitsArray[1] 生成 counterNumbers = 4

你看到你的错了吗?

这里有一个提示,您应该“逐位”比较每个数组,而不是将numbersArray 中的第一个“数字”与digitsArray 中的所有“数字”进行比较。注意:此提示仅在每个数组(numbersArraydigitsArray)的顺序相同时才有用。您应该考虑对它们进行排序以确保这一点。

因为这看起来像是一个家庭作业,所以我会在这里停下来,让你自己尝试解决它。​​

【讨论】:

  • 感谢您的评论,正如我所写,我知道需要做什么,我只是不知道该怎么做,这就是我所要求的 :) 提示如何开始这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2016-07-27
  • 2016-11-16
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多