2016-01-31 1 views
0

В моей программе я собираюсь хранить пользовательский ввод в массиве, а затем проверять каждый символ, чтобы увидеть, является ли это цифрой или точкой или E или отрицательным знаком, после чего я буду хранить его в массиве с именем temps.Как проверить, является ли строка числом с плавающей запятой?

Теперь у меня есть проблема в моем методе fleating(), не как я должен сделать мое состояние для образца с плавающим значным числом цифр-точка-значный-код (например, 12,22)

У меня есть работать здесь:

public void sorting(String data) { 
    String[] temps = new String[200]; 
    int cpos = 0; 
    int tpos = 0; 

    Arrays.fill(temps, null); 

    if (str.isEmpty() == false) { 
     char char1 = str.charAt(cpos); 

     int i = 0; 
     while (i < str.length()) { 
      char1 = str.charAt(cpos); 

      char1 = str.charAt(tpos); 
      System.out.println("the current value is " + char1 + " "); 
      tpos++; 

      if (Character.isDigit(char1)) { 
       temps[cpos] = "Digit"; 
       // System.out.println(" this number is digit"); 
       cpos++; 
      } else if (char1 == 'e' || char1 == 'E') { 
       temps[cpos] = "s_notaion"; 
       cpos++; 
      } else if (char1 == '-') { 
       temps[cpos] = "negative"; 
       cpos++; 
      } else if (char1 == '.') { 
       temps[cpos] = "."; 
       cpos++; 
      } 
      i++; 
     } 
    } 
} 

здесь является метод плавающей

private static boolean floating(String [] data) { 
    int count =0; 
    boolean correct = false; 
    for (int i = 0; i < data.length; i++) { 

     if (data[i]== "Digit") 
      && data[i]=="." && data[i]"Digit"){ 
      // here is the problem for the condition 
     } 

    } 
    return false; 
} 
+1

Использования '' == это [вообще * неправильно * для струнного] (http://stackoverflow.com/questions/513832/как-ду-я-сравнить-стринг-в-Java/513839 # 513839); Кроме того, 'data [i]« Digit »' является вопиющей синтаксической ошибкой - он анализируется эквивалентно «данным [i]« Digit », что должно сделать работу оператора более ясной. – user2864740

+0

Это условие неверно, если (str.isEmpty() == false). Вы хотите проверить, что str не пуста? если это нужно вам, если (! str.isEmpty()) –

+0

@FarazDurrani, это не делает его «неправильным». Они достигают того же и, хотя считается избыточным, 'boolean == bolean' является допустимым и проверяет его результаты, что также является« логическим », это тоже хорошо. – ChiefTwoPencils

ответ

0

Если я правильно понял, то массив данных имеет такие вещи, как [ "Digit", "цифра", "", "Digit"]

Итак, вы хотите метод

private static boolean floating(String [] data) { для возврата true, если массив имеет только записи «Digit» и ровно один ». запись? это оно?

Если это так:

boolean foundLeDigit = false; 
for (int i = 0; i < data.length; i++) { 

    if (data[i].equals("Digit") == false && data[i].equals(".") == false { 
     //we found something other than a Digit or . it's not a float 
     return false; 
    } 
    if(data[i].equals(".")) { 
    if(foundLeDigit) { return false; //as we found 2 "." } 
    foundLeDigit = true 
    } 


} 
return foundLeDigit; 
+0

Это будет действительный float, даже не существует '.' вообще. Стандартный 'Float.parseFloat()' принимает строку без '.'. Ваше последнее утверждение должно быть «return true». –

+0

спасибо, чувак, твоя работа похожа на то, что я хочу! но я нашел что-то вроде регулярного выражения! и мы можем использовать его, чтобы проверить, не работает ли строка или нет! –

+0

теперь я нашел регулярное выражение для плавающей запятой –

1

Самый простой способ проверить, если строка может представлять собой поплавок, чтобы попытаться разобрать его:

String testString = "1.2345"; 
double result; 
try { 
    result = Double.parseDouble(testString); 
    System.out.println("Success!") 
    } 
catch (NumberFormatException nfe) { 
    // wasn't a double, deal with the failure in whatever way you like 
} 
+0

Да, я думал об этом, но факт, что он может быть разобран, не означает, что это так. Похоже, он делает что-то еще. Ну ладно, давайте посмотрим –

+1

Не уверен, что это означало бы, что строка будет числом с плавающей запятой в Java, но не пройдет этот тест или не пройдет этот тест, а не будет числом с плавающей запятой. –

+1

Другой подход, который будет иметь смысл, я думаю, будет использовать регулярное выражение. Не очень сложно написать регулярное выражение, но я не могу потрудиться, чтобы попытаться получить все подробности прямо сейчас. Это дело создания маленькой государственной машины и сползания массива с ней просто кажется большим количеством неприятностей для получения прибыли. –

1

на вопросы не хватает немного контекста, так что для моего ответа я собираюсь предположить, что это домашнее задание требует ручного решения, и что все числа с плавающей точкой должны быть принятым.

Ваш подход (в то время как чрезмерно спроектированный) является полуправым: вы уменьшаете входную строку до классов символов - цифры, знака, маркера экспоненты. Отсутствует то, что теперь вы должны убедиться, что эти классы символов находятся в правильном порядке.

Определите различные части чисел с плавающей точкой (просто посмотрите на 0, -1.0, 400E30, 42.1E-30), и вы увидите, что они поступают в определенном порядке, даже если некоторые из них являются необязательными, и что каждая часть налагает ограничения на то, какие символы разрешены там. Например, если в номере есть «E», за ним должно следовать число (с необязательным знаком).

Так как вы проходите через символы строки, подумайте о том, как вы можете отслеживать, где вы находитесь, и основывайте свою валидацию на этом (это упоминается в автоответчике @JonKiparsky).

Несколько мелких вещей:

  • Не сравнивать строки с '==' - использовать equalsTo().
  • Подумайте, что это означает, если сортировка() находит символ, который не является ни цифрой, ни знаком, ни экспонентом «E»?
  • Вы выделяете массив temps для 200 записей, но входная строка может быть больше.
1

с использованием регулярных выражений является лучшим способом Handel этой проблемы

private static boolean floating(String [] data) { 
     int count =0; 
     boolean correct = false; 
     for (int i = 0; i < data.length; i++) { 

      if (str.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")){ 
       System.out.println(" it's a floating number "); 
       correct= true; 
       break; 
      }else 
       correct = false; 

     }if (correct ==true){ 
      return true; 
     }else 
     return false; 

    } 
Смежные вопросы