Количество случайных чисел из строки java - PullRequest
0 голосов
/ 12 февраля 2020

Это проблема домашней работы с правилом, что мы не можем использовать массивы. Мне нужно составить программу, которая будет генерировать десять случайных чисел, добавлять их в строку с запятой после каждого числа.
Затем я должен подсчитать каждое случайное число и удалить наибольшее число частот из строки.
Единственная проблема, которую я не могу решить, это как подсчитать каждое число. Допустим, строка «1,1,2,4,5,6,6,2,1,1» или «1124566211» с удаленными запятыми.
Как я могу go о выводе что-то вроде

1 = 4
2 = 2
4 = 1
5 = 1
6 = 2
Removing all numbers of max frequency
245662

Где левая сторона - это число, а правая - это число.

РЕДАКТИРОВАТЬ: диапазон составляет 1 от 10 , исключая 10. Он проверяет частоту каждого di git, т. е. сколько раз 1 появляется, сколько раз 2 появляется et c. Также сегодня вечером, и мой проф не отвечает так быстро: /

Ответы [ 4 ]

0 голосов
/ 12 февраля 2020

Это должно помочь подсчитать каждый символ. Я быстро набрал его на макушке, но, надеюсь, это как минимум передает концепцию. Имейте в виду, что на данный момент он напечатан слабо и определенно не OO. На самом деле, это немного больше, чем псевдо. Это было сделано намеренно. Когда вы перейдете к правильному значению Java, я надеюсь, что вы сможете получить гр asp того, что происходит. В противном случае, нет смысла в назначении.

function findFrequencyOfChars(str){

    for (i=0; i<str; i++){

        // Start by looping through each char. On each pass a different char is 
        // assigned to lettetA

        letterA = str.charAt(i);
        freq = -1;
        for (j=0; j<str; j++){

            // For each iteration of outer loop, this loops through each char, 
            // assigns it to letterB, and compares it to current value of 
            // letterA.

            letterB = str.charAt(j);
            if(letterA === letterB){
                freq++
            }
        }
        System.Out.PrintLn("the letter " + letterA + " occurs " + freq +" times in your string.")  
    }
}
0 голосов
/ 12 февраля 2020

Начните с пустой строки и добавьте go, проверьте частоту с помощью регулярного выражения. ИДК, что еще тебе сказать. Но да, учитывая, что строка - это просто массив символов, она довольно глупа.

0 голосов
/ 12 февраля 2020

Сначала вы можете сказать, что наиболее распространенное целое число равно 0, затем сравнить его с остальными один за другим, заменив самое старое на самое новое, если оно записано больше раз, и, наконец, вы просто переписываете строку без самого записанного числа. .

Не самый эффективный и чистый метод, но он работает в качестве примера!

    String Text = "1124566211"; // Here you define the string to check

    int maxNumber = 0;
    int maxNumberQuantity = 0; // You define the counters for the digit and the amount of times repeated


    //You define the loop and check for every integer from 0 to 9
    int textLength = Text.length();
    for(int i = 0; i < 10; i ++) {


        int localQuantity = 0; //You define the amount of times the current digit is written
        for(int ii = 0; ii < textLength; ii ++) {

            if(Text.substring(ii, ii+1).equals(String.valueOf(i)))
                localQuantity ++;

        }


        //If it is bigger than the previous one you replace it
        //Note that if there are two or more digits with the same amount it will just take the smallest one
        if(localQuantity > maxNumberQuantity) {
            maxNumber = i;
            maxNumberQuantity = localQuantity;
        }
    }


    //Then you create the new text without the most written character
    String NewText = "";
    for(int i = 0; i < textLength; i ++) {

        if(!Text.substring(i,i+1).equals(String.valueOf(maxNumber))) {
            NewText += Text.charAt(i);
        }
    }

    //You print it
    System.out.println(NewText);
0 голосов
/ 12 февраля 2020

Я бы использовал HashMap. В качестве ключа будет использовано строковое представление числа, и у вас будет целочисленное значение, представляющее частоту, с которой оно происходит.

L oop через строку чисел и поместите их в HashMap, если число уже существует на карте, обновите значение, чтобы оно было (текущее значение + 1).

Затем вы можете выполнить итерацию по этой карте и отслеживать текущий максимум, а в конце этого процесса вы можете узнать, какие числа появляются чаще всего.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...