#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 мс)