Ребята, помогите, пожалуйста. Больше нет идей. Написала за вечер, а третий день теперь не могу понять, что не так.
При таком коде выполняются все пункты, кроме последнего. Если же вместо
if (isDouble(charAfterObj)) {
alert(Double.parseDouble(charAfterObj)); }
else {
alert(charAfterObj); }
сделать проверку через try-catch (то, что сейчас как комментарий под ним), тогда проходят все пункты, кроме ПРЕДпоследнего. Вызов alert(charAfterObj) одинаковый в обоих вариантах, как так он сначала проходит, потом внезапно не проходит.
Учитывая, что при обоих кодах и double вызывается, когда надо, и String.
Вывод для http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo:
obj name
double: 3.14
Вывод для http://javarush.ru/alpha/index.html?obj=string&name=Amigo:
obj name
String: string
Что ещё ему надо...
P. S. Прошу прощения за длинный код, писала с теми знаниями, какие пока есть, вперёд не забегала.
package com.javarush.task.task15.task1527;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
Парсер реквестов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String url = reader.readLine();
char[] line = url.toCharArray();
for (int i = 0; i < line.length; i++) {
if (line[i] == '?') {
while (line[i+1] != '=') {
System.out.print(line[i+1]);
i++;
}
System.out.print(' ');
}
if (line[i] == '&') {
while (line[i+1] != '=' && line[i+1] != '&') {
System.out.print(line[i+1]);
i++;
}
System.out.print(' ');
}
}
System.out.println();
String charAfterObj = "";
if (url.contains("obj")) {
int indexOfObj = url.indexOf("obj");
int indexOfObjValue = indexOfObj + 4;
if (Character.isDigit(line[indexOfObjValue])) {
while (Character.isDigit(line[indexOfObjValue]) || line[indexOfObjValue] == '.') {
charAfterObj = charAfterObj + line[indexOfObjValue];
indexOfObjValue++;
}
}
else {
while (line[indexOfObjValue] != '&') {
charAfterObj = charAfterObj + line[indexOfObjValue];
indexOfObjValue++;
}
}
if (isDouble(charAfterObj)) {
alert(Double.parseDouble(charAfterObj));
}
else {
alert(charAfterObj);
}
/*try {
alert(Double.parseDouble(charAfterObj));
}
catch (NumberFormatException nfe) {
alert(charAfterObj);
}*/
}
reader.close();
}
public static boolean isDouble(String s) {
try {
Double.parseDouble(s);
return true;
}
catch (NumberFormatException nfe) {
return false;
}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}