Java 找出输入中有多少相等的对
输入是一系列正整数,末尾为0。我的任务是打印出这个系列包含多少对相等的数字 例如: 输入:23434627278850 配对:4(34和34、27和27、8和8、8和8) 到目前为止,我已经想到了这一点,但我想我真的迷路了Java 找出输入中有多少相等的对,java,equals,Java,Equals,输入是一系列正整数,末尾为0。我的任务是打印出这个系列包含多少对相等的数字 例如: 输入:23434627278850 配对:4(34和34、27和27、8和8、8和8) 到目前为止,我已经想到了这一点,但我想我真的迷路了 import java.util.Scanner; public class P3_5 { public static void main(String[]args) { int k1 = 0; int k2 = 0;
import java.util.Scanner;
public class P3_5 {
public static void main(String[]args) {
int k1 = 0;
int k2 = 0;
int pair = 0;
Scanner scan = new Scanner(System.in);
System.out.print("Input series of positive integers: ");
while (scan.nextInt() != 0) {
k1 = scan.nextInt();
k2 = scan.nextInt();
if (k1 == k2) {
pair++;
}
}
System.out.print(pair);
}
}
您应该只在循环中请求一个新的int。在循环外部请求初始int,然后在循环内部请求一个int。在循环内的
k2
中获得一个新的后,将其与k1
进行比较,可能会增加pair
。然后设置k1=k2
并继续下一个循环迭代。您应该只在循环中请求一个新的int。在循环外部请求初始int,然后在循环内部请求一个int。在循环内的k2
中获得一个新的后,将其与k1
进行比较,可能会增加pair
。然后设置k1=k2
并继续进行下一个循环迭代。您可以查看一下,以记住您已经看到的避免多次计数的数字。您可以查看一下,以记住您已经看到的避免多次计数的数字同时要求两个输入,因为一个数字可以与另外两个数字形成一对,就像maloomeister在评论中已经说过的那样
根据你的问题,我假设一对是两个连续相等的数。此外,在您的示例中,一个数字可以与另外两个数字(如果是两个以上相等的连续数字),8
配对
在每次迭代中,您必须以某种方式记住上一个数字,以便将其与当前数字进行比较。由于某个数可以出现在两对中,因此可以推断,对于k个连续数,对的数目是k− 1.因此,我们需要记录连续相等数字序列的当前长度,如果它重置为零(即,当出现其他数字时),则我们将其添加到对的总数中:
//找到的对的总数
整数对=0;
//当前连续相等数的数目(始终>=1)
int序列=1;
//记录以前遇到的号码。因为
//无法将数组与前一个数组进行比较(因为没有!),
//我们需要从第二个元素开始。
int last=int[0];
//假设阵列的长度至少为一个。你应该,
//但是,添加代码以检查长度是否为零。
for(inti=1;i
我在这里使用了一个数组,但您也可以要求用户输入一个int,而不是使用
int[]
。您不应该同时要求两个输入,因为一个数字可以与其他两个数字组成一对,就像maloomeister在评论中已经说过的那样
根据你的问题,我假设一对是两个连续相等的数。此外,在您的示例中,一个数字可以与另外两个数字(如果是两个以上相等的连续数字),8
配对
在每次迭代中,您必须以某种方式记住上一个数字,以便将其与当前数字进行比较。由于某个数可以出现在两对中,因此可以推断,对于k个连续数,对的数目是k− 1.因此,我们需要记录连续相等数字序列的当前长度,如果它重置为零(即,当出现其他数字时),则我们将其添加到对的总数中:
//找到的对的总数
整数对=0;
//当前连续相等数的数目(始终>=1)
int序列=1;
//记录以前遇到的号码。因为
//无法将数组与前一个数组进行比较(因为没有!),
//我们需要从第二个元素开始。
int last=int[0];
//假设阵列的长度至少为一个。你应该,
//但是,添加代码以检查长度是否为零。
for(inti=1;i
我在这里使用了一个数组,但您也可以要求用户输入一个int,而不是使用
ints[]
,因为您显然只需要计算连续对。这意味着8,8,8产生[8,8]和[8,8],因为第一个和第三个8不是连续的。你可以通过一个简单的循环来完成
int k = 0;
int count = 0;
int previousK = 0;
String s = "2 34 34 4 6 2 27 27 8 8 8 5 0";
Scanner input = new Scanner(s);
String pairs = "";
while ((k = input.nextInt()) != 0) {
// if current number equals previous, a pair has been found.
if (k == previousK) {
// update output string and count
pairs += k + " & " + k + ", ";
count++;
}
// update previous value with this value
previousK = k;
}
// get rid of lingering ","
int len = pairs.length()-2;
System.out.println("Pairs: = " + count + " " + pairs.substring(0,len)+")");
印刷品
Pairs: 4 (34 & 34, 27 & 27, 8 & 8, 8 & 8)
因为你显然只需要计算连续的对。这意味着8,8,8产生[8,8]和[8,8],因为第一个和第三个8不是连续的。你可以通过一个简单的循环来完成
int k = 0;
int count = 0;
int previousK = 0;
String s = "2 34 34 4 6 2 27 27 8 8 8 5 0";
Scanner input = new Scanner(s);
String pairs = "";
while ((k = input.nextInt()) != 0) {
// if current number equals previous, a pair has been found.
if (k == previousK) {
// update output string and count
pairs += k + " & " + k + ", ";
count++;
}
// update previous value with this value
previousK = k;
}
// get rid of lingering ","
int len = pairs.length()-2;
System.out.println("Pairs: = " + count + " " + pairs.substring(0,len)+")");
印刷品
Pairs: 4 (34 & 34, 27 & 27, 8 & 8, 8 & 8)
你试过调试你的代码吗?配对必须是连续的吗?也请善意地问:这是为了某种赋值吗?当你说
k1时,似乎你在检查同一个数字=