Har bir harfni bir jildda ikkita juftlikda va ikkiga bo'lingan java iborasini ishlatib qanday qilib ikkiga katlaysiz

Har bir harfni loop va if-then ifodasini ishlatib, mag'lubiyatga ikki marta qo'shish kerak. Agar mag'lubiyatdan taramasangiz va har bir belgi bir harf yoki belgi kabi belgi bo'lsa, qanday qilib test qilsangiz bo'ladi? Va keyin har bir harf ikki marta va har bir nasihat nuqtasi uch barobar bilan mag'lubiyatga chiqarib qo'ying.

Bu men hozirgacha bor. Bu tugallanmagan va u umuman ishlamaydi, lekin men to'g'ri yo'ldan bormayapmanmi?

import java.util.Scanner;

public class DoubleLetters{
  public static void main(String[] args){
  Scanner scan = new Scanner(System.in);

  System.out.println("Enter a sentence:");
  String sentence = scan.nextLine();

  boolean isLetter = false;

  for (int i = 0; i < sentence.length(); i++){
    isLetter = Character.isLetter(sentence.charAt(i));
    if (i == sentence.length() || sentence.charAt(i) == ' ' || isLetter == false){
    System.out.print(sentence.charAt(i) + sentence.charAt(i));
  }
}
0
Nima qilishingiz kerak, nima qilayotganingizni sharhlash. Agar siz ingliz tilida gaplashadigan odamga har bir qadamda nima bo'lganini tushuntirsangiz, uni o'zingiz ishlashingiz mumkin. Bu erda ikkita maslahat bor. 1) Barcha so'zlar o'rniga "so'zlar" dan foydalanish sizga bu haqda yaxshiroq o'ylashingizga yordam beradi. 2) Har bir iteratsiya paytida (bir yoki ikki marta) biror narsani nashr qilsangiz ishonch hosil qiling.
qo'shib qo'ydi muallif ergonaut, manba
Nima qilishingiz kerak, nima qilayotganingizni sharhlash. Agar siz ingliz tilida gaplashadigan odamga har bir qadamda nima bo'lganini tushuntirsangiz, uni o'zingiz ishlashingiz mumkin. Bu erda ikkita maslahat bor. 1) Barcha so'zlar o'rniga "so'zlar" dan foydalanish sizga bu haqda yaxshiroq o'ylashingizga yordam beradi. 2) Har bir iteratsiya paytida (bir yoki ikki marta) biror narsani nashr qilsangiz ishonch hosil qiling.
qo'shib qo'ydi muallif ergonaut, manba
to'g'ri bo'lishi uchun i == sentence.length() ni qanday kutish mumkin? Bundan tashqari, char + char ! = string
qo'shib qo'ydi muallif fabian, manba
to'g'ri bo'lishi uchun i == sentence.length() ni qanday kutish mumkin? Bundan tashqari, char + char ! = string
qo'shib qo'ydi muallif fabian, manba
Nima uchun StringBuilder sharhini shu qadar yuqoriga ko'targanini tushunmayapman. StringBuilder - bu erda mavjud bo'lmagan string birlashmasidan yaxshiroqdir.
qo'shib qo'ydi muallif Aaron, manba
Nima uchun StringBuilder sharhini shu qadar yuqoriga ko'targanini tushunmayapman. StringBuilder - bu erda mavjud bo'lmagan string birlashmasidan yaxshiroqdir.
qo'shib qo'ydi muallif Aaron, manba
i == sentence.length() || shartini tasavvur qiling (sizning savolingizga tahrir qilishda). sentence.charAt (i) == '' || isLetter == false amalga oshirish uchun, men sizning savolingizga javob beraman.
qo'shib qo'ydi muallif Mad Physicist, manba
i == sentence.length() || shartini tasavvur qiling (sizning savolingizga tahrir qilishda). sentence.charAt (i) == '' || isLetter == false amalga oshirish uchun, men sizning savolingizga javob beraman.
qo'shib qo'ydi muallif Mad Physicist, manba
Men StringBuilder dan foydalanishni o'ylab qolaman
qo'shib qo'ydi muallif 3kings, manba
Dastlab if ixtiyoriy boshqacha bo'lishi kerak edi. Men boshqa bir savol ustida u erda nima topdim va faqat nima qilganini sinab ko'rdim.
qo'shib qo'ydi muallif Typag4, manba
Dastlab if ixtiyoriy boshqacha bo'lishi kerak edi. Men boshqa bir savol ustida u erda nima topdim va faqat nima qilganini sinab ko'rdim.
qo'shib qo'ydi muallif Typag4, manba

6 javoblar

Siz to'g'ri yo'lda bo'lgansiz, keyin to'g'ri chiqishdan o'tib, noto'g'ri yo'lda yurgansiz.

for (int i = 0; i < sentence.length(); i++){ [...] } is a right way to iterate over a string's characters.

Character.isLetter(c) is a right way to check whether a character is a letter.

Biroq, sizning holatingiz xaotikdir:

  • nega bo'sh joylar va yakunlovchi belgilar uchun maxsus shartlar yaratasiz?
  • Nima uchun is yourLetter sharti bekor qilindi?

Sizning vaziyatingiz oddiy bo'lishi kerak deb o'ylayman

if (isLetter) { /* print twice */ } 
else if (isExclamationPoint) { /* print "thrice" */ }
else { /* print once */ }
1
qo'shib qo'ydi
Rahmat, buni sezmagandim. Tuzatish jarayoni davom etmoqda.
qo'shib qo'ydi muallif Aaron, manba
Unga diqqat qilish kerak, ammo bu sizni qiziqtiradigan maxsus holat
qo'shib qo'ydi muallif Idos, manba

Siz to'g'ri yo'lda bo'lgansiz, keyin to'g'ri chiqishdan o'tib, noto'g'ri yo'lda yurgansiz.

for (int i = 0; i < sentence.length(); i++){ [...] } is a right way to iterate over a string's characters.

Character.isLetter(c) is a right way to check whether a character is a letter.

Biroq, sizning holatingiz xaotikdir:

  • nega bo'sh joylar va yakunlovchi belgilar uchun maxsus shartlar yaratasiz?
  • Nima uchun is yourLetter sharti bekor qilindi?

Sizning vaziyatingiz oddiy bo'lishi kerak deb o'ylayman

if (isLetter) { /* print twice */ } 
else if (isExclamationPoint) { /* print "thrice" */ }
else { /* print once */ }
1
qo'shib qo'ydi
Rahmat, buni sezmagandim. Tuzatish jarayoni davom etmoqda.
qo'shib qo'ydi muallif Aaron, manba
Unga diqqat qilish kerak, ammo bu sizni qiziqtiradigan maxsus holat
qo'shib qo'ydi muallif Idos, manba

Buni ko'ring:

    import java.util.*;

    public class DoubleLetters{
      public static void main(String[] args){
          Scanner scan = new Scanner(System.in);

          System.out.println("Enter a sentence:");
          String sentence = scan.nextLine();

          StringBuilder sb = new StringBuilder();
          for (Character c: sentence.toCharArray()){
            sb.append(c);

            if(Character.isLetter(c)){
                sb.append(c);
            }
            else if(c == '!'){
                sb.append(c).append(c);
            }
          }
          sentence = sb.toString();
          System.out.println(sentence);
      }
    }
0
qo'shib qo'ydi
Ajoyib. Agar javobingiz siz uchun ishlayotgan bo'lsa, iltimos, uni to'g'ri deb belgilang va/yoki yuqoriga ko'taring.
qo'shib qo'ydi muallif pczeus, manba
Hey, bu ishlaydi! Katta rahmat. Men stringBuilder class yoki arrays bilan tanish emasman, shuning uchun uni ishlatishga harakat qilmadim, lekin buni amalga oshirishning eng oddiy yo'li kabi ko'rinadi.
qo'shib qo'ydi muallif Typag4, manba

Buni ko'ring:

    import java.util.*;

    public class DoubleLetters{
      public static void main(String[] args){
          Scanner scan = new Scanner(System.in);

          System.out.println("Enter a sentence:");
          String sentence = scan.nextLine();

          StringBuilder sb = new StringBuilder();
          for (Character c: sentence.toCharArray()){
            sb.append(c);

            if(Character.isLetter(c)){
                sb.append(c);
            }
            else if(c == '!'){
                sb.append(c).append(c);
            }
          }
          sentence = sb.toString();
          System.out.println(sentence);
      }
    }
0
qo'shib qo'ydi
Ajoyib. Agar javobingiz siz uchun ishlayotgan bo'lsa, iltimos, uni to'g'ri deb belgilang va/yoki yuqoriga ko'taring.
qo'shib qo'ydi muallif pczeus, manba
Hey, bu ishlaydi! Katta rahmat. Men stringBuilder class yoki arrays bilan tanish emasman, shuning uchun uni ishlatishga harakat qilmadim, lekin buni amalga oshirishning eng oddiy yo'li kabi ko'rinadi.
qo'shib qo'ydi muallif Typag4, manba

Bu kabi satrlarni manipulyatsiya qilganda, ma'lum bir o'lchamdagi ulashgan belgi buferini ajratadigan StringBuilder dan foydalaning. String chiqishi qanchalik katta bo'lishi kerakligini hisoblashingiz mumkin va bu o'lchamni qurilishda StringBuffer ga o'tkazasiz.

Bundan tashqari, maksimal samaradorlik uchun String.charAt deb nom berishni davom ettirishni tavsiya etaman.

Siz o'zingizning vazifangizni funktsiyani o'z ichiga qamrab olishni xohlaysiz. Kirishni maksimal yordam uchun CharSequence sifatida olishingiz mumkin.

public class DoubleLetters {
    private static int getRepetitionCount(char c) {
        if (Character.isLetter(c)) {
            return 2;
        } else if (c == '!') {
            return 3;
        } else {
            return 1;
        }
    }

    public static String doubleLetters(CharSequence in) {
        int inLength = in.length();
        int outLength = 0;

        for (int i = 0; i < inLength; ++i) {
            outLength += getRepetitionCount(in.charAt(i));
        }

        StringBuilder out = new StringBuilder(outLength);

        for (int i = 0; i < inLength; ++i) {
            char c = in.charAt(i);
            int reps = getRepetitionCount(c);

            for (int r = 0; r < reps; ++r) {
                out.append(c);
            }
        }

        return out.toString();
    }

    public static void main(String[] args) {
        String test = "hello! world!";
        System.out.print(doubleLetters(test));
    }
}

Ushbu muayyan holatda muqobil ravishda 3 * inLength hajmini taqsimlash mumkin, bu har qanday potentsial chiqish qatorini ushlab turadigan darajada katta bo'ladi.

0
qo'shib qo'ydi

Bu kabi satrlarni manipulyatsiya qilganda, ma'lum bir o'lchamdagi ulashgan belgi buferini ajratadigan StringBuilder dan foydalaning. String chiqishi qanchalik katta bo'lishi kerakligini hisoblashingiz mumkin va bu o'lchamni qurilishda StringBuffer ga o'tkazasiz.

Bundan tashqari, maksimal samaradorlik uchun String.charAt deb nom berishni davom ettirishni tavsiya etaman.

Siz o'zingizning vazifangizni funktsiyani o'z ichiga qamrab olishni xohlaysiz. Kirishni maksimal yordam uchun CharSequence sifatida olishingiz mumkin.

public class DoubleLetters {
    private static int getRepetitionCount(char c) {
        if (Character.isLetter(c)) {
            return 2;
        } else if (c == '!') {
            return 3;
        } else {
            return 1;
        }
    }

    public static String doubleLetters(CharSequence in) {
        int inLength = in.length();
        int outLength = 0;

        for (int i = 0; i < inLength; ++i) {
            outLength += getRepetitionCount(in.charAt(i));
        }

        StringBuilder out = new StringBuilder(outLength);

        for (int i = 0; i < inLength; ++i) {
            char c = in.charAt(i);
            int reps = getRepetitionCount(c);

            for (int r = 0; r < reps; ++r) {
                out.append(c);
            }
        }

        return out.toString();
    }

    public static void main(String[] args) {
        String test = "hello! world!";
        System.out.print(doubleLetters(test));
    }
}

Ushbu muayyan holatda muqobil ravishda 3 * inLength hajmini taqsimlash mumkin, bu har qanday potentsial chiqish qatorini ushlab turadigan darajada katta bo'ladi.

0
qo'shib qo'ydi