Попытка заставить цикл работать через альтернативные массивы

#java #arrays #string #loops #char

Вопрос:

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

 //one attempt
String s = "yourString";
String x = "";

for (int i = 0; i < s.length(); i  = 2) {
    for (int j = 1; j < s.length(); j  = 2) {
        x  = Character.toUpperCase(s.charAt(i));
        x  = Character.toLowerCase(s.charAt(j));
    }
}
System.out.println(x);
 
 //the desired result but not the ideal solution
String[] sArray = {"Your", "String"};
String f = "";
for (String n : sArray) {
    f  = n;
}

char[] c = f.toUpperCase().toCharArray();
char[] d = f.toLowerCase().toCharArray();

System.out.print(c[0]);
System.out.print(d[1]);
System.out.print(c[2]);
System.out.print(d[3]);
System.out.print(c[4]);
System.out.print(d[5]);
System.out.print(c[6]);
System.out.print(d[7]);
System.out.print(c[8]);
System.out.print(d[9]);
System.out.println();
 
 //third attempt with loop but the first loop keeps starting from zero
String t = "";
for (int i = 0; i < c.length; i  = 2) {
    for (int j = 1; j < d.length; j  = 2) {
        t  = Character.toUpperCase(c[i]);
        t  = Character.toLowerCase(d[j]);
    }
    System.out.print(t);
}
 

Что я делаю не так?

Комментарии:

1. Я не хочу портить полный ответ, так как это, вероятно, какое-то задание по программированию. Поэтому вы должны повторить строку только один раз, и если символ прописной, вы должны сделать его строчным, и наоборот. Такая функция, как docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/… может пригодиться для этого.

2. @Sebi Цель состоит не в том, чтобы поменять существующий случай, а в том, чтобы чередовать его в зависимости от позиции.

3. Не желая портить ответ, повторите строковые символы и используйте что-то вроде i % 2 == 0 ? Character.toUpperCase(text.charAt(i)) : Character.toLowerCase(text.charAt(i)) , чтобы решить, что делать.

Ответ №1:

На самом деле, нет необходимости повторять несколько раз элементы строки. Поскольку вам нужно альтернативно изменить регистр символа, вы можете просто посчитать позицию вашей итерации с помощью оператора % . Так, например, в c качестве текущего строкового символа операция будет выглядеть следующим образом:

 System.out.print(i % 2 == 0, (char)Character.toUpperCase(c) : (char)Character.toLowerCase(c));
 

Тем не менее, вы действительно можете воспользоваться преимуществами потока Java и лямбда-выражения, чтобы реализовать очень элегантное решение для этого.
Я собираюсь показать вам мое предлагаемое решение. Единственная проблема заключается в том, что на самом деле у вас не может быть правильной переменной цикла, так как переменная, к которой вы обращаетесь внутри выражения lamba, должна быть окончательной или эффективной, поэтому я использовал для этого своего рода трюк.
Это просто для того, чтобы дать вам представление о том, что вы действительно можете персонализировать, сделать его многоразовым и улучшить по своему усмотрению:

 public class MyStringTest {
    public static void main(String args[]) {
      String s = "yourString";
      
      initializeCycleVariable();
      s.chars().forEach(c -> 
        {System.out.print( MyStringTest.getAndIncrement() %2 == 0 ? 
                           (char)Character.toUpperCase(c) : 
                           (char)Character.toLowerCase(c));
        });
    }
    
    private static int i = 0;
    
    public initializeCycleVariable() {  i = 0; }
    public static int getAndIncrement() { return i  ; }
}
 

И вот результат:

 YoUrStRiNg
 

Комментарии:

1. Не знал, что операнд модуля можно использовать для итераций, спасибо.

2. @DazedandConfucius если вы довольны ответом, пожалуйста, примите его и поддержите, чтобы он мог помочь другим разработчикам в будущем. Спасибо.

Ответ №2:

Вы должны перебирать строку символ за символом. Вы можете использовать верхний регистр для четных индексов и нижний регистр для нечетных. Извините, что не предоставил более подробной информации, но ясно, что это задание.

Комментарии:

1. вы могли бы привести пример, по крайней мере, для демонстрации того, что вы написали.

2. Это не задание, я даже не записан ни на какие летние курсы. Это всего лишь одно из многих упражнений, которые я даю себе, чтобы улучшить свои навыки программирования.

Ответ №3:

Попробуйте это,

 String s = "yourString", x = "";
for(int i = 0; i < str.length(); i  ){

    if(i % 2 == 0)
        x  = Character.toUpperCase(s.charAt(i));
    else
        x  = Character.toLowerCase(s.charAt(i));
}
System.out.println(x);
 

Комментарии:

1. Я чувствую, что этот фрагмент проще.