Несоответствие типов после запуска
package skater;
import java.io.*;
import java.util.*;
public class TestSkater
{
public static void main(String[]args) throws IOException
{
Scanner sc = new Scanner(new File("C:/pairs.txt"));
String name1 = null, name2 = null, Country = null;
double [] Technical = new double [8];
double [] Performance = new double[8];
try {
while(sc.hasNext())
{
name1=sc.nextLine();
name2 = sc.nextLine();
Country = sc.nextLine();
for (int t = 0; t<Technical.length; t++)
{
Technical[t] = sc.nextDouble();
}
for(int y = 0; y<Performance.length; y++)
{
Performance[y] = sc.nextDouble();
}
// Skater [] skaters = new Skater[20];
Skater S1 = new Skater(name1,name2,Country,Technical,Performance);
System.out.println(S1);
sc.nextLine();
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.out.print("Bad program");
}
}
}
Всякий раз, когда я запускаю свой код без попытки поймать, я получаю InputMismatchException
, Он читает из файла, в котором есть все названия команд с их счетами и странами. Это отформатировано так:
smith
jones
australia
4.2 5.1 3.8 2.9 5.0 4.6 4.9 4.3
4.9 4.8 5.8 3.8 4.9 4.6 5.0 4.5
lennon
murray
england
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8
Я знаю что nextLine()
говорит, чтобы посмотреть на следующую строку данных, и nextDouble()
что я использую для массивов Performance
а также Technical
, говорит ему посмотреть на следующий дубль в очереди.
Я не могу понять, почему это дает мне эту ошибку. Я думаю, это потому, что, когда он переходит к имени следующей команды, он все еще видит его как двойник из массива. Performance
, но я не могу понять, как решить эту проблему.
1 ответ
Трудно сказать наверняка, не зная, что на самом деле делают функции сканера (nextLine, nextDouble) и точный формат файла, который вы читаете.
При условии, что:
nextLine читает текст до конца строки
nextDouble читает и анализирует текст до следующего разрыва / пробела
Затем, когда вы читаете ввод, я предполагаю, что он в формате:
Name1
Name2
Country
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0
Если предположения верны, и это не формат ввода, то есть ваша проблема.
Если вы уверены, что текстовые записи nextLine читаются нормально, возможно, вы можете прочитать строку как строку, разделить ее пробелом (или запятой, точкой с запятой или любым другим разделением) и проанализировать их самостоятельно, например
string[] tmp = sc.nextLine().split(' ');
for(int t = 0; t<Technical.length; t++)
Technical[t] = Double.parseDouble(tmp[t]);