2014-11-21 7 views
1

Мне было интересно, есть ли способ использовать String::concat с петлями, вместо того, чтобы использовать StringBuilder/StringBuffer.конкатенация контура с использованием .concat без использования только петли

Я пробовал так, но это не работает. Может ли кто-нибудь помочь решить проблему? или дать мне предложения, поэтому я сам пробовал?

public class multiConcat { 
    public static void main(String[] args) { 
     int num = 0; 
     String finish = ""; 
     Scanner reader = new Scanner(System.in); 

     System.out.println("Type a word: "); 
     String state = reader.next(); 
     System.out.println("Number of Concatenation: "); 
     num = reader.nextInt(); 
     finish = state.concat(state); 

      for (int i = 0; i == num; i++) { 
       finish.concat(state); 
      } 

     System.out.println(finish); 

    } 
} 

Я думал, что это будет sthe AME идея, как x = x + 1, т.е. постоянно перезаписывать значение ...

Спасибо

вы имеете в виду, как это?

 for (int i = 0; i == num; i++) { 
      finish = finish.concat(state); 
     } 
+0

Не могли бы вы опубликовать ошибку вы получаете? Кроме того, первая фраза несколько запутанна, подумайте о том, чтобы сделать ее более ясной. – MondKin

+0

Я не получаю компиляции ошибок. То, что я пытаюсь сделать, - это ввести «привет» для моего слова, и я хотел 4 раза присоединиться к моему миру, поэтому результат этого будет похож на «hihihihi» извините за плохой грамматик. –

+0

concat не изменяет строку. используйте 'finish = finish.concat (state);'. и удалите эту строку 'finish = state.concat (state);' – nitish005

ответ

0

Немного изменений.

1.) петля была неправильной.

должно быть таким, как показано ниже, если num > 1, тогда конкатенация в цикле.

if (num > 1) { 
      for (int i = 0 ; i < num ; i++) { 
       finish = finish.concat(state); 
      } 
     } else { 
      finish = finish.concat(state); 
     } 

2.) finish.concat(state) возвращает новую строку, так что вы должны назначить в переменной финишного

finish = finish.concat(state); // **remember Strings are immutable** 

Полная программа

public class multiConcat { 
    public static void main(String[] args) { 
     int num = 0; 
     String finish = ""; 
     Scanner reader = new Scanner(System.in); 

     System.out.println("Type a word: "); 
     String state = reader.next(); 
     System.out.println("Number of Concatenation: "); 
     num = reader.nextInt(); 

     if (num > 1) { 
      for (int i = 0 ; i < num ; i++) { 
       finish = finish.concat(state); 
      } 
     } else { 
      finish = finish.concat(state); 
     } 

     System.out.println(finish); 

    } 
} 

выходного

Type a word: 
ankur 
Number of Concatenation: 
2 
ankurankur 


Type a word: 
ankur 
Number of Concatenation: 
1 
ankur 

Type a word: 
ankur 
Number of Concatenation: 
3 
ankurankurankur 
+0

игнорировать утверждение if извините ... я отправил неправильный код ..Я пытался что-то сделать самостоятельно –

+0

Я пытался это сделать, если человек хочет, чтобы он был конкатенирован менее чем дважды. Он просто выведет слово –

+0

@JasonKim ok, чтобы вы могли поместить фильтр для '<2', те вещи, которые вы может tweek я надеюсь. –

2

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

finish = finish.concat(state);

Вы уже делаете это до в цикле, но внутри цикла вы ничего не делаете с возвращаемым значением concat, и поэтому цикл ничего не меняет.

+0

@JasonKim вы не исправили проблему в цикле for, что я имел в виду в своем ответе. – Eran

0

Вы можете использовать нижеследующий код.

String is immutable так что вам нужно сохранить возвращаемое значение.

String finish = new String(); 
finish = finish.concat("Any Value"); 

Использование StringBuilder или StringBuffer вы можете сделать это путь

StringBuilder finish = new StringBuilder(); 
finish.append(state); 

StringBuffer finish = new StringBuffer(); 
finish.append(state); 
+0

Спасибо за ответ. В следующий раз я попытаюсь использовать Stringbuilder и Stringbuffer: D –

+0

Нет проблем. Но 1 совет, если вы меняете строковое значение, лучше использовать StringBuilder или Stringbuffer. Поскольку каждый раз, когда concat называется new, выделяется память для этой строки, поскольку String неизменяема. –

+0

Я буду помнить об этом, спасибо –

Смежные вопросы