Как я могу показать только наибольшее число из моих выходных данных?

#java #string #eclipse #integer

#java #строка #eclipse #целое число

Вопрос:

В этой программе я пытаюсь показать самые длинные последовательные числа. (Например: ввод: 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));
}
 

Ответ №1:

(У меня недостаточно репутации для комментария)

В дополнение к тому, что написал Алекс, вы также должны изменить значение else if(anzahl != i) на просто else .

Комментарии:

1. Это был хороший улов!

Ответ №2:

Просто создайте переменную для отслеживания максимального числа вне цикла и измените ее при обнаружении новой подпоследовательности и после цикла, чтобы проверить длину последней подпоследовательности:

 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

Ответ №3:

Это моя идея:

     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 действительно владеет текущей записью, и ее можно перезаписать.

(время выполнения 4 мс)