Java 找出输入中有多少相等的对

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;

输入是一系列正整数,末尾为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;
        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时,似乎你在检查同一个数字=