#java
#java
Вопрос:
У меня есть этот код ниже, который дает мне этот вывод
1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,
[Ljava.lang.String;@3e25a5
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
The input.txt файл содержит 1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,
Код такой. Понятно, что при разделении есть простая ошибка, но мне трудно найти, какая.
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
FileInputStream fstream = new FileInputStream("input.txt");
DataInputStream dat = new DataInputStream (fstream);
BufferedReader in = new BufferedReader(new InputStreamReader(dat));
String[] str ;
int arr[] = new int [100];
String line;
while ((line = in.readLine()) != null)
{
System.out.println(line);
str = line.split(",");
System.out.println(str);
for(int i = 0 ;i<str.length ; i )
{
arr[i]= Integer.parseInt(str[i]);
System.out.println(arr);
}
}
fstream.close();
}
catch(IOException e)
{
System.out.print(e);
}
}
Комментарии:
1. Какой вывод вы хотите?
2. Вы получите,
NumberFormatException
потому что у вас есть запятая в конце, аsplit()
функция выдаст вам пустую строку в конце вашего массива.
Ответ №1:
Измените это
System.out.println(arr);
Для
System.out.println(arr[i]);
до этого вы печатали массив arr
, а не элементы массива.
Ответ №2:
Похоже, что вы повторно печатаете массив, что приведет к тому, что Java вызовет метод toString() массива, который выдаст вам выходные данные, подобные предоставленным вами.
Чтобы исправить это, попробуйте изменить свой цикл на этот:
for(int i = 0 ;i<str.length ; i )
{
arr[i]= Integer.parseInt(str[i]);
System.out.println(arr[i]];
}
Чтобы дать вам более четкое представление о том, что происходит, эта программа сделает нечто подобное:
public class Test {
public static void main(String[] args) {
System.out.println(new int[0]);
}
}
Это выведет:
[I@164f1d0d
Ответ №3:
Распечатав массив в
System.out.println(arr);
вы эффективно распечатываете Object
, который оказывается Array
объектом. У этого есть toString()
метод, и он имеет тенденцию распечатывать Class
объект и hashcode()
ссылку.
Теперь, поскольку ваш массив имеет примитивный тип, он выглядит следующим образом
[I@19821f
где каждый элемент что-то означает
[ => "an array of"
I => "primitive integer"
@19821f => "which has a hashcode of 0x19821f"
Обратите внимание, что это соглашение по умолчанию, означающее, что, хотя это то, что вы видите, вы не можете рассчитывать на этот метод чтения в том же смысле слова, что и гарантия.
Как многие упоминали ранее, вам нужно распечатать элемент массива (который не будет использовать это представление псевдообъекта toString()
, потому что элемент является целым числом.
Ответ №4:
удалите ненужные системные запросы, чтобы получить точный результат. и в последнем системном выводе выведите элемент неполного массива.
Ответ №5:
str = line.split(",");
Если строка содержит запятую, то вам не следует использовать split()
Комментарии:
1. -1: Это не имеет смысла и кажется совершенно неправильным. Если в строке есть запятая, это не причина не использовать
split
…