Как скрыть символы с помощью циклов for соответственно? - PullRequest
2 голосов
/ 27 мая 2020

Я хочу в основном скрыть символы, следующие за тремя постоянными точками (...), шаблон выглядит следующим образом:


Вводит фразу пользователя и выводит фразу, за которой следуют три точки (. ..), затем фраза минус один символ с последующими тремя точками (...), затем фраза минус два символа с последующими точками и так далее, пока не останется только одна точка.

Примечание: это должно быть сделано только с использованием вложенных циклов for

Пример ввода

 1
 disappear

Ожидаемый результат:

 disappear...
 disappea...
 disappe...
 disapp...
 disap...
 disa...
 dis...
 di...
 d...
 ...
 ..
 .

Это моя попытка:

Проблема : Я не могу сделать так, чтобы фраза уменьшалась каждый раз (минус 1 каждый раз)

Я пробовал использовать charAt (); метод, но это не сработает, я уверен, что в этом случае вам понадобится для l oop отдельно для каждой из точек или всего набора точек.

import java.util.Scanner;
public class Dissappear{
public static void main(String[]args){
    Scanner keyboard = new Scanner(System.in);
    int option = keyboard.nextInt();
    String phrase = keyboard.next();
        if (option == 1){
            for (int x = 0; x <= phrase.length(); x++){
                    System.out.print(phrase + "...");
                for (int y = 0; y <= phrase.length(); y++){
                    char n = phrase.charAt(y);
                    System.out.print(n+"...");
                }
            }
        }
     }
 }

Ответы [ 3 ]

1 голос
/ 27 мая 2020

Вот как я заработал:

public class Disappear {
    public static void main(String... args) {
        String word = "disappear";
        int originalLength = word.length();

        for(int i = 0; i < originalLength; i++) {
            System.out.println(word.substring(0, originalLength - i) + "...");
        }

        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3 - i; j++) {
                System.out.print(".");
            }
            System.out.println();
        }
    }
}

Без подстроки:

public class Disappear {
    public static void main(String... args) {
        String word = "disappear";
        int originalLength = word.length();

        for(int i = 0; i < originalLength; i++) {
            for(int j = 0; j < originalLength - i; j++) {
                System.out.print(word.charAt(j));
            }

            System.out.println("...");
        }

        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3 - i; j++) {
                System.out.print(".");
            }
            System.out.println();
        }
    }
}
0 голосов
/ 27 мая 2020

Хорошо! Вложенные for петли. Но внешний включен только для соответствия требованиям. Наверное, не в духе задания. Просто продолжайте уменьшать k, пока оно не станет равным нулю, а затем зафиксируйте его там, пока длина StringBuilder не станет 0 и внутреннее l oop не завершится.

StringBuilder sb = new StringBuilder("disappear...");
for (;;) {
    for (int k = sb.length() - 4; sb.length() > 0;) {
        System.out.println(sb);
        sb.delete(k, k + 1);
        k = k > 0 ? --k : 0;
    }
    break;
}
0 голосов
/ 27 мая 2020

Вы можете сделать это с помощью StringBuilder:

    StringBuilder stringBuilder = new StringBuilder(str);

    System.out.println(str + "...");
    for (int i = 0; i < length; i++) {
        stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        System.out.println(stringBuilder.toString() + "...");
        if (i == length - 1) {
            for (int j = 0; j < 2; j++) {
                for (int k = j; k < 2; k++) {
                    System.out.print(".");
                }
                System.out.println();
            }
        }
...