如何只显示输出中最大的数字?

nom7f22z  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(375)

在这个程序中,我试图显示最长的连续数字(例如:输入: 1 1 1 2 2 2 2 3 3 3 3 3 ,输出: 3 4 5 )
我的问题是如何只显示输出中最大的数字。在这个例子中 5 .
我们不允许使用数组,有没有其他方法来解决这个问题?

public static void main(String args[]) {

    Scanner sc = new Scanner(System.in);

    int zahl = 0;
    int anzahl = -1;
    String maxString = "";

    while (sc.hasNextInt()) { 

        int i = sc.nextInt();

        if (anzahl == i | anzahl == -1) {
            zahl++;
        } else if(anzahl != i) {
            maxString += zahl + "\n" ;
            zahl = 1;
        }

        anzahl = i;
    }

    sc.close();
    System.out.println(maxString + (zahl + 1));
}
lkaoscv7

lkaoscv71#

只需创建一个变量来跟踪循环外的最大数,并在检测到新的子序列时和循环后更改它以检查最后一个子序列的长度:

Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");

int zahl = 0;
int anzahl = -1;
String maxString = "";
int maxFreq = 0; // maximal frequency of numbers

while (sc.hasNextInt()) { 

  int i = sc.nextInt();

  if(anzahl == i || anzahl == -1) {
      zahl++;
  } else {
      maxFreq = Math.max(maxFreq, zahl); // update maxFreq
      maxString += zahl + "\n" ;
      zahl = 1;
  }

  anzahl = i;
}
maxFreq = Math.max(maxFreq, zahl); // check the tail

sc.close();
//System.out.println(maxString + (zahl + 1) );
System.out.println("maxFreq=" + maxFreq);

印刷品 maxFreq=6 (数到 4 s) 是的。
对于此输入 Scanner sc = new Scanner("1 1 1 2 2 2 2 2 2 2"); 密码打印出来了 maxFreq=7

djp7away

djp7away2#

这是我的想法:

Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");

    int letzter = 0;
    int anzahl = 0;
    String rekord = "";

    while (sc.hasNextInt()) {
        int gegeben = sc.nextInt();

        if(letzter == -1 || letzter == gegeben) {
            anzahl++;
        } else {
            anzahl = 1;
        }

        if(rekord == ""){
            rekord = String.valueOf(gegeben);
        }else if(anzahl > rekord.length()) {
            rekord = String.format("%0" + anzahl + "d", 0).replace("0", String.valueOf(gegeben));
        }

        letzter = gegeben;
    }

    sc.close();

字符串rekord实际上拥有当前记录,可以覆盖它。
(运行时间4ms)

gblwokeq

gblwokeq3#

(我没有足够的代表发表评论)
除了亚历克斯写的,你还应该改变 else if(anzahl != i) 为了公正 else .

相关问题