检查数组是否包含两个数字
Checking if an array contains two numbers
我刚开始使用 Java,现在遇到一个问题,我在检查代码 2 小时后无法解决。
当我输入:
7(作为长度)
6 3 4 8 3 2 6(作为数组)
8 3(作为要检查的数字)
它写错了,但很明显它们的顺序是正确的。
请帮助我了解问题所在
代码如下:
import java.util.Scanner;
public class checker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int[] numbers = new int[length];
boolean broken = false;
for (int i = 0; i < numbers.length; i++) {
numbers[i] = scanner.nextInt();
}
int n = scanner.nextInt();
int m = scanner.nextInt();
for (int j = 1; j < length; j++) {
if (numbers[j] == n && numbers[j-1] == m || numbers[j] == m && numbers[j+1] == n || numbers[j] == m && numbers[j-1] == n || numbers[j] == n && numbers[j+1] == m) {
broken = false;
} else {
broken = true;
}
}
if (broken) {
System.out.println("false");
} else {
System.out.println("true");
}
}
}
正如你在评论中提到的,你想检查 {n,m} 和 {m,n} 那么你为什么有更多的条件?
以下就够了:
for (int j = 0; j < length-1; j++) {
if (numbers[j] == n && numbers[j+1] == m || numbers[j] == m && numbers[j+1] == n) {
broken = false;
break;
} else {
broken = true;
}
}
循环从 0(=第一个数组元素)到最后一个 -1,因为 if 与 j+1 进行比较。找到匹配项后,您必须跳出循环,否则您可能会再次将 broken
设置为 false。
您也可以在不使用布尔值的情况下实现这一点,请检查下面的调整代码。
import java.util.Scanner;
public class checker {
public static void main(String[] args) {
int howManyValuesPresent = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Length of array");
int length = scanner.nextInt();
int[] numbers = new int[length];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = scanner.nextInt();
}
int n = scanner.nextInt();
int m = scanner.nextInt();
for(int number: numbers){
if(number == n || number == m){
howManyValuesPresent++;
}
}
if (howManyValuesPresent>0) {
System.out.println("true, Your selected numbers appear: " + howManyValuesPresent + " times in array");
} else {
System.out.println("false, Your selected numbers appear: " + howManyValuesPresent + " times in array");
}
}
}
我刚开始使用 Java,现在遇到一个问题,我在检查代码 2 小时后无法解决。 当我输入: 7(作为长度) 6 3 4 8 3 2 6(作为数组) 8 3(作为要检查的数字)
它写错了,但很明显它们的顺序是正确的。 请帮助我了解问题所在
代码如下:
import java.util.Scanner;
public class checker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int[] numbers = new int[length];
boolean broken = false;
for (int i = 0; i < numbers.length; i++) {
numbers[i] = scanner.nextInt();
}
int n = scanner.nextInt();
int m = scanner.nextInt();
for (int j = 1; j < length; j++) {
if (numbers[j] == n && numbers[j-1] == m || numbers[j] == m && numbers[j+1] == n || numbers[j] == m && numbers[j-1] == n || numbers[j] == n && numbers[j+1] == m) {
broken = false;
} else {
broken = true;
}
}
if (broken) {
System.out.println("false");
} else {
System.out.println("true");
}
}
}
正如你在评论中提到的,你想检查 {n,m} 和 {m,n} 那么你为什么有更多的条件? 以下就够了:
for (int j = 0; j < length-1; j++) {
if (numbers[j] == n && numbers[j+1] == m || numbers[j] == m && numbers[j+1] == n) {
broken = false;
break;
} else {
broken = true;
}
}
循环从 0(=第一个数组元素)到最后一个 -1,因为 if 与 j+1 进行比较。找到匹配项后,您必须跳出循环,否则您可能会再次将 broken
设置为 false。
您也可以在不使用布尔值的情况下实现这一点,请检查下面的调整代码。
import java.util.Scanner;
public class checker {
public static void main(String[] args) {
int howManyValuesPresent = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Length of array");
int length = scanner.nextInt();
int[] numbers = new int[length];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = scanner.nextInt();
}
int n = scanner.nextInt();
int m = scanner.nextInt();
for(int number: numbers){
if(number == n || number == m){
howManyValuesPresent++;
}
}
if (howManyValuesPresent>0) {
System.out.println("true, Your selected numbers appear: " + howManyValuesPresent + " times in array");
} else {
System.out.println("false, Your selected numbers appear: " + howManyValuesPresent + " times in array");
}
}
}