2015-10-06 64 views
0

在我的程序中,用戶用TEMP輸入一個float數字(例如TEMP 10.05)。 該程序應該只採取float部分,並將其轉換爲fareheit。最後將結果打印出來。 我該怎麼做?如何分隔用字符串輸入的浮點數?

public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     System.out.println("The following program takes a float value with the word 'TEMP'in celcius, and converts into farenheit"); 
     System.out.println("Enter the temperature with TEMP: "); 

     while (true) { 
      String input = s.next(); 
      //converting into farenheit 
      if (input != null && input.startsWith("TEMP")) { 
       float celsius = Float.parseFloat(input.substring(input.indexOf(' ') + 1)); 
float tempFaren=celcius+32.8; 
       // float=result 
       System.out.println("Temperature in farehheit is : "+tempFaren+ " F."); 

      } 
     } 

    } 

該方案顯示此錯誤:

enter image description here

+0

你是什麼意思「只採取浮動部分」?你的意思是「一切都在」TEMP「之後?如果是這樣,子串可能是你的朋友... –

+0

這是一個字符串,找出數字開始的位置,提取那部分字符串,然後http://stackoverflow.com/questions/7552660/java-convert-float-to-string-and-string-to-float –

+0

作爲建議,您希望使用'Scanner#nextLine'而不是'Scanner#next',因爲後者會讀取'' TEMP「'而不是float部分 –

回答

0

可以使用的indexOf找到第一空間,子串的空間位置後得到的字符串測試和parseFloat從字符串解析數轉換爲一個float:

float celsius = Float.parseFloat(input.substring(input.indexOf(' ') + 1)); 

同樣的事情分解成以下步驟:

int spacePos = input.indexOf(' '); 
String celsiusStr = input.substring(spacePos + 1); 
float celsius = Float.parseFloat(celsiusStr); 

UPDATE

您的修改代碼不會編譯(您在「celcius」和其他問題中輸入錯誤)。

這將編譯,並正確地解析浮點部分:

String input = "TEMP 10.5"; 
float celsius = Float.parseFloat(input.substring(input.indexOf(' ') + 1)); 
float tempFaren = celsius + 32.8f; 
System.out.println("Temperature in farehheit is : " + tempFaren + " F."); 

最後, 另一種方式來提取在所述字符串的末尾浮點值是從開始剝離非數字值,用於例如:

float celsius = Float.parseFloat(input.replaceAll("^\\D+", "")); 

免責聲明:無我上面給會爲所有可能的輸入工作的例子,它們都適合你給的例子輸入。必要時可以使它們更健壯。

+0

janos,謝謝你的好答案,但它沒有幫助。請參閱我已更新我的帖子。我已發佈我的錯誤。 – Esha

+0

janos,my不要成爲一個ngry。當然,你回答的幫助。沒有它,我無法做到。然而,非常感謝gre_gor,因爲他指出了重要的事情。 – Esha

1

你可以使用Float.parseFloat(yourString);

例子:

String x = "TEMP 10.5"; 
    float y = Float.parseFloat(x.substring(5,x.length())); 
    System.out.println(y); 
+0

它不會工作,因爲字符串x = TEMP 10.5,那麼它如何忽略TEMP和考慮只有10.5? – Esha

+0

@Esha再次檢查答案。 – ninesalt

0

嘗試這樣的事情

while (true) { 
      String input = s.nextLine(); 
      //converting into farenheit 

     if (input != null && input.startsWith("TEMP")) { 
      try{ 
       double faren=Double.parseDouble(input.substring(input.lastIndexOf(' ')+1))+32.8; 
       //float tempIntoFarenheit= input+32.8 
       System.out.println("Temperature in farenheit: "+faren); 

      }catch(Exception e){ 
       System.out.println("Something was wrong with the temperature, make sure the input has something like 'TEMP 50.0' "); 
       System.out.println(e.toString()); 
      } 


     } else { 
      System.out.println("Wrong input. Try again: "); 
     } 
    } 
1

與您的代碼的問題是,你使用

String input = s.next(); 

這隻回報TEMP。您需要使用

String input = s.nextLine(); 

這應該返回完整的字符串。

和你無關的問題,你也是converting the temperatures錯了。它應該是

float tempFaren = celcius*1.8f + 32.0f; 
+0

謝謝,它幫助我肯定! – Esha

0

您可以使用下面的方法:

static float extractFloatWithDefault(String s, float def) { 
    Pattern p = Pattern.compile("\\d+(\\.\\d+)?"); 
    Matcher m = p.matcher(s); 
    if (!m.find()) return def; 
    return Float.parseFloat(m.group()); 
} 

像這樣:

 while (true) { 
     String input = s.next(); 
     //converting into farenheit 
     if (input != null && input.startsWith("TEMP")) { 
      float celsius = extractFloatWithDefault(input, -999); 
      if (celsius > -999) { 
       float tempFaren=celcius+32.8; 
       System.out.println("Temperature in farehheit is : "+tempFaren+ " F."); 
      } 
      else System.out.println("Please include a number"); 
     } 
    } 

此方法將提取它發現在字符串和使用它的第一個數字或如果沒有有效的浮點數或整數,則返回默認值。

相關問題