я только нашел, как заполнить массив символов одним и тем же символом, например:
char[] charArray = new char[5];
char charValue = 'A';
Arrays.fill(charArray, charValue);
System.out.println("The char array content is: " + Arrays.toString(charArray));
// output: The char array content is: [A, A, A, A, A]
то, что я пробовал, это:
char[] abc = new char[5];
Scanner sc = new Scanner(System.in);
String s;
char c;
for (int i = 0; i < abc.length; i++) {
s = sc.next();
if (s.length() == 1) {
c = s.charAt(0);
System.out.println("for position " + i + " the character is: " + c);
Arrays.fill(abc[i], c);
System.out.println("so we get the current array " + Arrays.toString(abc));
} else {
System.err.println("pls give just one charcter");
break;
}
}
Я всегда получаю сообщение об ошибке, чтобы изменить массив abc с char[] на long[].\
Обновлено:
что я хочу для вывода, так это то, что я даю 5 символов (например, a, b, c, d, e) в конце у меня есть массив
abc[] = {a, b, c, d, e}
Заранее спасибо :)
Ты можешь использовать:
Arrays.fill(abc, c);
или просто:
abc[i]=c;
если вы хотите заполнить только указанную позицию массива
если я использую первый вариант, я получаю массив с теми же символами, но позвольте мне проверить второй вариант
Вы печатаете текущий массив каждый раз, поэтому я не был уверен, что вы хотите сделать. Вы хотите иметь несколько массивов с одинаковыми символами и печатать их или только один массив со всеми входными данными от пользователя?
мне нужен один массив со всеми входными данными от пользователя, вы можете проверить мой EDIT в вопросе, там вы найдете пример
Ответ от YourHelper кажется правильным.
char
К сожалению, даже исправленная версия вашего кода не работает с большинством символов. Тип char
по существу сломан, начиная с Java 2, и устарел, начиная с Java 5.
Чтобы увидеть разрыв char
, используйте символ, например «?».
Вместо этого используйте целые числа кодовая точка.
StringBuilder
как результатЧто-то вроде этого непроверенного кода.
int limit = 5 ;
StringBuilder sb = new StringBuilder() ;
Scanner sc = new Scanner(System.in);
String input;
int codePoint;
for ( int i = 0 ; i < limit ; i++ ) {
input = sc.next();
int[] codePoints = input.codePoints().toArray() ;
if ( codePoints.length == 1 ) {
codePoint = codePoints[ 0 ] ;
System.out.println( "for position " + i + " the input character is: " + Character.toString( codePoint ) );
sb.appendCodePoint( codePoint );
System.out.println("so we get the current result " + sb.toString() );
} else {
System.out.println( "Done: " + sb.toString() ) ;
break;
}
}
System.out.println( "Done: " + sb.toString() ) ;
См. этот запуск кода в прямом эфире на IdeOne.com.
for index 0 the input character is: H
so we get the current result H
for index 1 the input character is: ?
so we get the current result H?
for index 2 the input character is: l
so we get the current result H?l
for index 3 the input character is: l
so we get the current result H?ll
for index 4 the input character is: o
so we get the current result H?llo
Done: H?llo
Если вы хотите собрать каждый символ по отдельности, составьте список строк. Создайте строку каждой кодовой точки и добавьте в список. Опустите StringBuilder
.
List< String > characters = new ArrayList <>() ;
…
characters.add( Character.toString( codePoint ) ) ;
См. пример этот код работает в прямом эфире на IdeOne.com.
for index 0 the input character is: H
so we get the current result [H]
for index 1 the input character is: ?
so we get the current result [H, ?]
for index 2 the input character is: l
so we get the current result [H, ?, l]
for index 3 the input character is: l
so we get the current result [H, ?, l, l]
for index 4 the input character is: o
so we get the current result [H, ?, l, l, o]
Done: [H, ?, l, l, o]
Имейте в виду, что в некоторых языках то, что вы можете воспринимать как одну «букву», на самом деле представляет собой комбинацию символов два, букву, за которой следует «комбинированный диакритический знак». Пример здесь. Обсуждение здесь.
Насколько я понимаю, вы пытаетесь позволить пользователю вводить данные в ваш массив символов один за другим... Если это то, что вы хотите, то это должно помочь.
char[] input = new char[5];
for( int i = 0; i < input.length; i++ ) {
System.out.println("Enter only one character");
input[i] = (char)System.in.read();
System.out.println("Thus we have the current array as " + Arrays.toString(input));
}
Этот код принимает только один символ за раз, это быстрее, чем использование Scanner. Вот пробный запуск этого кода:
Enter a charcater
a
Thus we have cuurent array as [a, ., ., ., .]
Enter a charcater
b
Thus we have cuurent array as [a, b, ., ., .]
Enter a charcater
c
Thus we have cuurent array as [a, b, c, ., .]
Enter a charcater
d
Thus we have cuurent array as [a, b, c, d, .]
Enter a charcater
a
Thus we have cuurent array as [a, b, c, d, e]
Если вы хотите принять строку и изменить ее на массив символов, вы можете использовать функцию String toCharArray(), char[] input = "abcde".toCharArray()
в пробном прогоне есть опечатка, он должен быть текущим, а не текущим, но вы поняли
напрямую используйте abc[i] = c; потому что Arrays.fill -> вместо этого понадобится массив, а не заполнение части массива.