Коли я запускаю наступну програму, я отримую помилку в рядку 20, і це мій код:
package J1;
import java.util.Scanner;
public class SpeedLimit {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int input = keyboard.nextInt();
String[] tab = new String[2];
String output="";
int speed = 0;
while(input!=-1){
int last =0;
for (int i=0; i<input ; i++){
String pair = keyboard.next();
tab = pair.split(" ");
speed = speed + Integer.parseInt(tab[0])*(Integer.parseInt(tab[1])-last);
last = Integer.parseInt(tab[1]);
}
output = output +speed + "miles" + "n";
speed =0;
input = Integer.parseInt(keyboard.nextLine());
}
System.out.println(output);
}
}
коли я запускаю код, я ввожу наступний вхід з клавіатури:
3
20 2
30 6
10 7
2
60 1
30 5
4
15 1
25 2
30 3
10 5
-1
щоб отримати цей результат як результат: 170 миль 180 миль 90 миль
але я отримую таку помилку, коли запускаю код
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at J1.SpeedLimit.main(SpeedLimit.java:20)
Відповіді:
2 для відповіді № 1String pair = keyboard.next();
Це читає лише один маркер, який розділений між собою " "
тому коли ви розколитесь pair
по " "
. Він матиме лише один елемент - саму струну. Тож вам потрібно прочитати весь рядок, а потім розділити його на розмежування " "
.
Ще одна помилка полягає в тому, що при зміні цього рядка на String pair = keyboard.nextLine();
, Ви все одно отримаєте помилку, оскільки система вважає Enter
ключ як вхід .nextLine()
метод. Тож вам потрібно відмовитися від зайвих непотрібних даних.
while(input!=-1){
int last =0;
for (int i=0; i<input ; i++){
int ip1=keyboard.nextInt();
int ip2=keyboard.nextInt();
speed = speed + ip1*(ip2-last);
last = ip2;
}
output = output +speed + "miles" + "n";
speed =0;
input = keyboard.nextInt();
}
0 для відповіді № 2
Ви неправильно читаєте пару змінних, а потім розділяєте її та присвоюєте їй вкладку, яка не вдається автоматично отримати індекс, тому що пара змінної пари отримала проблему.
* nextLine (): читає залишок поточного рядка, навіть якщо він порожній.
keyboard.nextLine(); //To avoid the exception you commented
String pair = keyboard.nextLine(); //here is solved
tab = pair.split(" ");
0 для відповіді № 3
Клавіатураnext () зчитує лише вхід до пробілу, тому пара і масив матимуть лише одне число, тому вкладка [1] призводить до винятку arrayOutOfBound. Використовуйте метод nextLine () для читання входів з пробілом.
0 для відповіді № 4
Ви можете спробувати нижче зміни в коді:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int input = Integer.parseInt(keyboard.nextLine());
String[] tab = new String[2];
String output="";
int speed = 0;
while(input!=-1){
int last =0;
for (int i=0; i<input ; i++){
String pair = keyboard.nextLine();
tab = pair.split(" ");
speed = speed + Integer.parseInt(tab[0].trim())*(Integer.parseInt(tab[1].trim())-last);
last = Integer.parseInt(tab[1]);
}
output = output +speed + " miles " + "n";
speed =0;
input = Integer.parseInt(keyboard.nextLine());
}
System.out.println(output);
}
0 для відповіді № 5
я дійсно не розумію, як ти надаєшвходи. але, якщо "3" стане вашим першим рядком, тоді split ("") поверне масив довжиною 1. Таким чином, вкладка [0] поверне 3, а вкладка [1] надасть вам nullPointerException.
спробуйте додати чек на довжину вкладки перед виконанням рядка 20.
це повинно зробити трюк:
if(tab.length() > 1){
speed = speed + Integer.parseInt(tab[0])*(Integer.parseInt(tab[1])-last);
}