Әдістерді пайдаланып жолдағы сөздердің санын табу үшін кодты жазыңыз

Мен іздеп жүрмін және 3 әдісті қолдана отырып, сөздерді жазуды қалайша таба алмаймын. Міне код осы уақытқа дейін көрінеді. Мен әдістерді қалай пайдалану керектігінен айырылып қалдым. Мен мұны әртүрлі әдістерді пайдаланбай және біреуін пайдаланбай істей аламын. Өтінемін көмектесіңіз!!!

    public static void main(String[] args) {
    Scanner in = new Scanner (System.in);
    System.out.print("Enter a string: ");
    String s = in.nextLine();
    if (s.length() > 0)
    {
        getInputString(s);
    }
    else 
    {
        System.out.println("ERROR - string must not be empty.");
        System.out.print("Enter a string: ");
        s = in.nextLine();
    }
   //Fill in the body with your code
}

// Given a Scanner, prompt the user for a String.  If the user enters an empty
// String, report an error message and ask for a non-empty String.  Return the
// String to the calling program.
private static String getInputString(String s) {
    int count = getWordCount();
    while (int i = 0; i < s.length(); i++)
    {
        if (s.charAt(i) == " ")
        {
            count ++;
        }
    }
    getWordCount(count);
   //Fill in the body

   //NOTE: Do not declare a Scanner in the body of this method.
}


// Given a String return the number of words in the String.  A word is a sequence of 
// characters with no spaces.  Write this method so that the function call:
//      int count = getWordCount("The quick brown fox jumped");
// results in count having a value of 5.  You will call this method from the main method.
// For this assignment you may assume that
// words will be separated by exactly one space.
private static int getWordCount(String input) {
   //Fill in the body
}

}

EDIT: Мен кодты өзгерттім

private static String getInputString(String s) {
    String words = getWordCount(s);
    return words.length();
}


private static int getWordCount(String s) {
    return s.split(" ");
}

Бірақ мен жолды бүтін санға айналдыра алмаймын.

2
Мен тіпті s.charAt (i) == «» тіпті компиляцияға таң қалдым. Содан кейін мен автобоксингті есіме түсірдім және бұл негізінен Character.valueOf (s.charAt (i)) == «» сияқты әрекет етеді. Және иә, ол ешқашан дұрыс болмайды, кейіпкерді тудырады, ал сызық тіпті бірдей емес.
қосылды автор cHao, көзі
Мен тіпті s.charAt (i) == «» тіпті компиляцияға таң қалдым. Содан кейін мен автобоксингті есіме түсірдім және бұл негізінен Character.valueOf (s.charAt (i)) == «» сияқты әрекет етеді. Және иә, ол ешқашан дұрыс болмайды, кейіпкерді тудырады, ал сызық тіпті бірдей емес.
қосылды автор cHao, көзі
Мен сіздің жазбаңызды түпнұсқаны қалпына келтіріп, жасаған өзгерістеріңіз туралы жаздым. Пожалуйста, сұрақтың түпнұсқалық кодын фактіден кейін түзетпеңіз, енгізу кезінде жасалған қателерді түзетуді қоспағанда; ол жауаптарды жарамсыз етеді. Өзіңіз өзгерткен нәрселер туралы ескертуді қосыңыз. (Бірақ, сіз жасаған өзгерістердің мәселені толығымен басқаша етіп қойғанын есте ұстаңыз.)
қосылды автор cHao, көзі
Мен сіздің жазбаңызды түпнұсқаны қалпына келтіріп, жасаған өзгерістеріңіз туралы жаздым. Пожалуйста, сұрақтың түпнұсқалық кодын фактіден кейін түзетпеңіз, енгізу кезінде жасалған қателерді түзетуді қоспағанда; ол жауаптарды жарамсыз етеді. Өзіңіз өзгерткен нәрселер туралы ескертуді қосыңыз. (Бірақ, сіз жасаған өзгерістердің мәселені толығымен басқаша етіп қойғанын есте ұстаңыз.)
қосылды автор cHao, көзі
Мен сіздің жазбаңызды түпнұсқаны қалпына келтіріп, жасаған өзгерістеріңіз туралы жаздым. Пожалуйста, сұрақтың түпнұсқалық кодын фактіден кейін түзетпеңіз, енгізу кезінде жасалған қателерді түзетуді қоспағанда; ол жауаптарды жарамсыз етеді. Өзіңіз өзгерткен нәрселер туралы ескертуді қосыңыз. (Бірақ, сіз жасаған өзгерістердің мәселені толығымен басқаша етіп қойғанын есте ұстаңыз.)
қосылды автор cHao, көзі
Мәселеге келер болсақ, бұл логикамен байланысты. s.split («) String [] мәнін қайтарады және words.length int мәнін қайтарады. Сіз енгізген код дұрыс емес жерлерде; getInputString() жолды алу болуы керек және getWordCount сөз тіркесі алу керек болуы керек.
қосылды автор cHao, көзі
Мұнда нақты сұрақтарды қою дұрыс, бірақ біз үй тапсырмасын орындамаймыз. Пожалуйста, анық көріңіз, сіз тырысыңыз және сіз қайда.
қосылды автор Vincent van der Weele, көзі
әдістерді жақсы қолданып жатсаңыз, әдістерді пайдалану арқылы қандай проблема туындайсыз?
қосылды автор Stephan, көзі
if (s.charAt (i) == «») әрқашан жалған болады, себебі сіз char деп String ретінде бірдей объект болып табылады. «'' - бос орынды таңба ретінде көрсетеді
қосылды автор Edd, көзі

10 жауаптар

Әдістің атауын оқып шығыңыз және әдіс ішіндегі ненің орындалуын және қайтарылатын мәндерді шешу үшін түсініктемелерге қараңыз.

getInputString әдісінің қолтаңбасы болуы керек:

private static String getInputString(Scanner s) {

    String inputString = "";

   //read the input string from system in
   //....

    return inputString;

}

getWordCount әдісінің қолтаңбасы:

private static int getWordCount(String input) {

    int wordCount = 0;

   //count the number of words in the input String
   //...

    return wordCount;
}

main әдісі келесідей болуы керек:

public static void main(String[] args) {

   //instantiate the Scanner variable

   //call the getInputString method to ... you guessed it ... get the input string

   //call the getWordCount method to get the word count

   //Display the word count
}
3
қосылды
                 count=1 //last word must be counted
                 for(int i=0;i
2
қосылды
Түсініктеме жақсы болады, сондай-ақ ол жарияланған сияқты бірдей код.
қосылды автор Kobi K, көзі

1-n бос орын таңбалары бойынша trim() және split() пайдаланыңыз:

private static int getWordCount(String s) {
    return s.trim().split("\\s+").length;
}

trim() -ке қоңырау шалу керек, әйтпесе жолда жетекші бос орын болса, қосымша «сөз» аласың.

«\» s + « параметрі бірнеше бос орындарды бір сөз бөлгіш ретінде санау үшін қажет. \ s - бұл «бос кеңістік» үшін regex. + - «1 немесе одан да көп» деген жазу.

1
қосылды
@RosdiKasim oops! Мен дұрыс емес әдіс қолтаңбасын көшірді (тіркелген). Сонымен қатар, ол бірдеңе түсіндіргендіктен қазір бірдеңе үйреніп жатыр ма?
қосылды автор Bohemian, көзі
@RosdiKasim: Ал ол бір нәрсе жасады, сондықтан біз жауап бердік
қосылды автор Nandkumar Tekale, көзі
Ең алдымен, бұл құрастырылмайды. Екіншіден, ол бір нәрсе үйренуі керек.
қосылды автор Rosdi Kasim, көзі
@Bohemian, мен оны сіз қолданатын әдістердің әрқайсысы үшін тиісті javadoc-ге бағыттап берер едім. Оған балық бермеңіз, оған балықты қалай үйрету керек ;-)
қосылды автор Rosdi Kasim, көзі
Оның үстіне, егер getWordCount әдісін түсіндіріп алсаңыз, ол сөздерді өзі есептеуге тиіс. Енгізілген java әдістерін пайдалану есептелмейді.
қосылды автор Rosdi Kasim, көзі

Сіз не істеуіңіз керек, жолдағы бос орын санын есептеңіз . Бұл жолдағы сөздердің саны.

Сіз өзіңіздің есептеулеріңізді 1-тен кешіретінін көресіз, бірақ кейбір ойлар мен қателіктерден кейін неге екенін түсінесіз.

Бақытты оқу!

1
қосылды
Мен шынында да емеспін. Мен түсініктемелерді аңсаған түрде сүзуге бейімдемін; олар бәрібір маған көрінбейді, егер олар көрсеткен болса, немесе олар артық немесе күлкілі болса.
қосылды автор cHao, көзі
Көрінбейтін. Көзге көрінетін болса, бұл түсініктемеде жиырма үш бос орын бар. Бірақ тек жиырма бір сөз бар. Әрбір кеңістікте сөздер бөлінбейді.
қосылды автор cHao, көзі
@cHao, getWordCount әдісін жоғарыдан түсіндірдіңіз бе? Осы тапсырма үшін сөздердің бір кеңістік бөлінетінін болжай аласыз.
қосылды автор Rosdi Kasim, көзі

Сіз мұны:

private static int getWordCount(String input) {
    return input.split("\\s+").length;
}
1
қосылды
Мен «» орнына «\\ s +» ұсынамын. Әрбір \ u0020 дәл бөле отырып, бұл түсініктемедегі сөздерді қателеседі, мысалы, әдетте, екі кезеңнен кейін екі бос орынды қолдануға себеп болады. Бірақ жалпы идея жақсы.
қосылды автор cHao, көзі
Мен бірінші әдіске getIntputString жолын жылжытуға тырысамын. Және ол мені қателеседі, ол оны қолдануға жарамайды, және ол дұрыс салынған. Содан кейін getWordCount әдісін өтуге int. Келесі әдіске өту үшін кодты алу мүмкін емес.
қосылды автор user2509405, көзі
@ user2509405 дәл өткен қатені көшіре аласыз
қосылды автор user2509423, көзі

String.split() әдісін қолданыңыз:

String[] words = s.split("\\s+");
int wordCount = words.length;
0
қосылды

Мен қандай әдістермен әдістермен жұмыс істеп жатқанына сенімді емеспін, бірақ біреуден артық қажет деп ойламаймын, мына әрекетті орындап көріңіз: сөздерді жолда бөлуге арналған бөлуді пайдаланады және сіз шекараларды таңдай аласыз

String sentence = "This is a sentence.";  
String[] words = sentence.split(" ");  

for (String word : words) {  
   System.out.println(word);  
}

онда сіз жасай аласыз:

numberOfWords = words.length();

егер сіз 3 әдісті қолданғыңыз келсе, сіз оны өзіңіз үшін жасайтын main() әдісінен қоңырау шала аласыз, мысалы:

public String getInputString() {

    Scanner in = new Scanner (System.in);
    System.out.print("Enter a string: ");
    String s = in.nextLine();
    if (s.length() > 0) {
        return s;
    } else {
        System.out.println("ERROR - string must not be empty.");
        System.out.print("Enter a string: ");
        return getInputString();
    }
}

public int wordCount(String s) {

    words = splitString(s)

    return words.length();
}

public String[] splitString(String s) {

    return s.split(" ");
}
0
қосылды
@ user2509405 «міне кодексім» қайда қойдыңыз?
қосылды автор Stephan, көзі
@ user2509405 сіз сонда барасыз, мен сізге 3 әдісті жасадым
қосылды автор Stephan, көзі
@ user2509405 Мәселеңізді көремін, кодты жақсырақ оқып шығыңыз, қате кодты қате әдіске енгізесіз
қосылды автор Stephan, көзі
@ user2509405 Сіздің кіріс сөздерінің саны word.length() мәнін қайтарады және сіздің кіріс жолында сканер коды болуы керек
қосылды автор Stephan, көзі
umm, бұл жағдайда сізде жолды қабылдауға арналған бір әдіс болуы мүмкін, ол жерде келтірілген сөздік санау әдісіне өтеді, ол жолды бөлетін әдісті шақырады
қосылды автор Stephan, көзі
Мен оны бастапқы сұрағыма түзетемін.
қосылды автор user2509405, көзі
Мен мұны бір әдіс арқылы жасай аламын, бірақ мен 3-ді қолдануға тура келеді.
қосылды автор user2509405, көзі
Эй, бұл менде бар, және менің екінші әдісімде, String int-ге айналдыра алмайды дейді. міне менің кодексім.
қосылды автор user2509405, көзі

Кодыңызға сүйене отырып, сіз мұны істеуге тырысатын нәрсе деп ойлаймын:

private static int getWordCount(String input) {

    int count = 0;

    for (int i = 0; i < input.length(); i++) {
        if (input.charAt(i) == ' ') {
            count++;
        }
    }

    return count;
}

Міне, мен не істедім:

  • Сіз ойнап жатқан кодты дұрыс әдіспен ( getWordCount ) ауыстырдым.
  • Пайдалануға тырысқан циклды түзетілді (менің ойымша, сізге және циклдар шатыстырылған кезде)
  • Кеңістік таңбасына арналған чекіңізді түзетіңіз ( «» емес, «» )

Бұл кодта қатені түзетуді қажет ететін қате бар:

  • getWordCount("How are you"); will return 2 when it should be 3
  • getWordCount(""); will return 0
  • getWordCount("Hello"); will return 0 when it should be 1

Іске сәт!

0
қосылды
Иә ... қандай да бір себептермен, сөздерді шынымен санайтын код жойылған. Мен қайта оралуды ойлап жүрдім.
қосылды автор cHao, көзі
Сұрақ қойылған коды өзгертілгеннен бері өзгерді деп ойлаймын
қосылды автор Edd, көзі

Дәлелдермен бос орын ретінде жайылған функцияны жақсы пайдаланады

int n= str.split(" ").length;
0
қосылды
public static int Repeat_Words(String arg1,String arg2)
{
    //It find number of words can be formed from a given string

    if(arg1.length() < 1 || arg2.length() < 1)
        return 0;

    int no_words = 99999;
    char[] str1 = arg1.toCharArray();
    char[] str2 = arg2.toCharArray();


    for(int x = 0; x < str1.length; x++)
    {
        int temp = 0;
        for(int y = 0; y < str2.length; y++)
        {
            if(str1[x] == str2[y])
            temp++;
        }
        if(temp == 0)
            return 0;
        if(no_words > temp)
            no_words = temp;

        temp = 0;
    }

    return no_words;
}
0
қосылды