2016-12-28 2 views
-1

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

import java.util.*; 

public class LowerUpper { 
    public static void Main(String[] args) { 
     Scanner letters = new Scanner(System.in); 
     System.out.println("Please enter 3 letters:"); 
     String input = letters.next(); 
     int length = input.length(); 

     for (int i = 0; i < length; i++){ 
      if (Character.isUpperCase(input.charAt(i))) { 
       Character.toLowerCase(input.charAt(i)); 
       break; 
      } 
      else if (Character.isLowerCase(input.charAt(i))) { 
       Character.toUpperCase(input.charAt(i)); 
       break; 
      } 
      return input.toString(); 
     } 
    } 
} 

Заранее благодарим за помощь! Я уверен, что это простое решение, которое мне не хватает.

+0

Строки неизменяемы, в коде вы не меняете строку, а просто получаете верхние/нижние копии ее символов. Попытайтесь использовать методы 'String.toUpperCase()' и 'String.toLowerCase()', такие как «abcd» .toUpperCase(); –

ответ

0

Используйте StringBuilder, чтобы сохранить преобразованные символы в.

Также вы не хотите break иначе вы будете конвертировать только первый символ

попробовать что-то вроде

StringBuilder buf = new StringBuilder(); 
for (int i = 0; i < length; i++){ 
    if (Character.isUpperCase(input.charAt(i))) { 
    buf.append (Character.toLowerCase(input.charAt(i))); 
    // break; 
    } 
    else { 
    buf.append (Character.toUpperCase(input.charAt(i))); 
    // break; 
    } 
} 

return buf.toString(); 

редактировать

испытательное решение

String input = "this iS my test"; 
    int length = input.length(); 

    StringBuilder buf = new StringBuilder(); 
    for (int i = 0; i < length; i++){ 
     if (Character.isUpperCase(input.charAt(i))) { 
      buf.append (Character.toLowerCase(input.charAt(i))); 
      // break; 
     } 
     else { 
      buf.append (Character.toUpperCase(input.charAt(i))); 
      // break; 
     } 
    } 

    System.out.println(buf.toString()); 

выход

Это мой тест

2

Во-первых, это main (не Main). Во-вторых, вы забыли создать второй метод (который возвращает String), вы не можете вернуть String из метода void (например, main). Как только у вас есть метод, вам нужно его вызвать. Но начнем с метода. Вам нужно сохранить символы при их создании. В Java 8+, вы могли бы сделать

public static String swapCase(String input) { 
    return input.codePoints() 
      .map(ch -> Character.isUpperCase(ch) ? 
         Character.toLowerCase(ch) : 
         Character.toUpperCase(ch)) 
      .collect(StringBuilder::new, 
         StringBuilder::appendCodePoint, 
         StringBuilder::append).toString(); 
} 

или как,

public static String swapCase(String input) { 
    StringBuilder sb = new StringBuilder(); 
    char[] chars = input.toCharArray(); 
    for (char ch : chars) { 
     if (Character.isUpperCase(ch)) { 
      sb.append(Character.toLowerCase(ch)); 
     } else { 
      sb.append(Character.toUpperCase(ch)); 
     } 
    } 
    return sb.toString(); 
} 

или как,

public static String swapCase(String input) { 
    StringBuilder sb = new StringBuilder(); 
    input.chars().forEachOrdered(ch -> { 
     sb.append(Character.isUpperCase(ch) ? 
       Character.toLowerCase(ch) : 
       Character.toUpperCase(ch)); 
    }); 
    return sb.toString(); 
} 

Тогда назвать его,

public static void main(String[] args) { 
    Scanner letters = new Scanner(System.in); 
    System.out.println("Please enter 3 letters:"); 
    String input = letters.next(); 
    System.out.printf("Original: %s, Swapped: %s%n", input, swapCase(input)); 
} 
+0

плюс один для замещения 'main' –

+1

Если вы собираетесь использовать потоки и лямбды, почему бы просто не сопоставить ввод вместо того, чтобы мутировать StringBuilder? Побочные эффекты злые, в конце концов :) –

+0

@YonaAppletree Просто устал, но хороший момент. Ред. –