2016-10-31 47 views
-7

我是新來的java和編程。我對這個概念有所瞭解,但並不完全確定。此問題使用掃描儀從另一個文件中讀取,以獲取有關所產生能量的信息。如何讓掃描儀讀取下一行數字?

import java.util.Scanner; 
 
import java.io.File; 
 

 
public class HJUnit3 
 
{ 
 
public static void main(String[] args) throws Exception 
 
{ 
 
// Scanner stdIn = new Scanner(System.in); 
 
    Scanner stdIn = new Scanner(new File("energyProduced.txt")); 
 
     stdIn.nextLine(); 
 
\t \t double energy; 
 
\t \t energy = stdIn.nextLine(); 
 
    int systemsCost; //Total Systems Cost 
 
    double ttlEnergy; //Total energy produced in a week 
 
    double savingsWeek; //Total savings for one week 
 
    double savingsDay; //Total savings for one day 
 
    double recoupDay; //Days to recoup 
 
    double recoupYear; //Years to recoup 
 
    final double electricCost = 0.085; 
 
    
 
    systemsCost = (savingsWeek * energy); 
 
    System.out.println("Total System Cost = $" + systemsCost); 
 
    System.out.println("Total Energy Produced in one week" + (energy * 7) + "Kwh"); 
 
    savingsWeek = (ttlEnergy * electricCost); 
 
    System.out.println("Total Savings for one week =" + savingsWeek); 
 
    savingsDay = (savingsWeek/7); 
 
    System.out.println("Total Savings for one day =" + savingsDay); 
 
    recoupDay = (systemsCost/savingsDay); 
 
    System.out.println("Days to recoup cost(truncated)" + recoupDay); 
 
    recoupYear = (recoupDay/365); 
 
    System.out.println("Years to recoup cost(truncated)"); 
 
} // end main 
 
} // end HJUnit3 class
它給我這個錯誤 「的錯誤:不兼容的類型:字符串不能被轉換爲double 能量= stdIn.next();」

and this「error:incompatible types:possible from infinite conversion from double to int systemsCost =(savingsWeek * energy);」

我做錯了什麼,不是很確定。

編輯 所以我就計劃工作,但在節目中只產生一組答案從.txt文件,但該文件有更多的數字,我不知道該怎麼添加,使其閱讀下一行。

import java.util.Scanner; 
 
import java.io.File; 
 

 
public class HJUnit3 
 
{ 
 
public static void main(String[] args) throws Exception 
 
{ 
 
// Scanner stdIn = new Scanner(System.in); 
 
    Scanner stdIn = new Scanner(new File("energyProduced.txt")); 
 
     stdIn.nextDouble(); 
 
\t \t double energy; 
 
\t \t energy = stdIn.nextDouble(); 
 
    int systemsCost; //Total Systems Cost 
 
    double ttlEnergy; //Total energy produced in a week 
 
    double savingsWeek; //Total savings for one week 
 
    double savingsDay; //Total savings for one day 
 
    double recoupDay; //Days to recoup 
 
    double recoupYear; //Years to recoup 
 
    final double electricCost = 0.085; 
 
// 
 
    
 
    ttlEnergy = (energy * 7); 
 
    savingsWeek = (ttlEnergy * electricCost); 
 
    savingsDay = (savingsWeek/7); 
 
    systemsCost = (int) (savingsWeek * energy); 
 
    recoupDay = (systemsCost/savingsDay); 
 
    recoupYear = (recoupDay/365); 
 
\t 
 
\t System.out.println("Total System Cost = $" + systemsCost); 
 
\t System.out.println("Total Energy Produced in one week" + (ttlEnergy) + "Kwh"); 
 
    System.out.println("Total Savings for one week =" + savingsWeek); 
 
    System.out.println("Total Savings for one day =" + savingsDay); 
 
    System.out.println("Days to recoup cost(truncated)" + recoupDay); 
 
    System.out.println("Years to recoup cost(truncated)" + recoupYear); 
 
} // end main 
 
} // end HJUnit3 class

.txt文件就像是一堆數字下降一列

+0

Java不能神奇地爲你轉換類型。如果你想把'String'變成'Double',可以使用'Double.parseDouble()'。 – azurefrog

+1

@azurefrog:或直接使用'stdIn.nextDouble()' – Marvin

+1

stdIn.next()返回一個String。你試圖把它分配給一個double類型的變量。這是不可能的,因爲一個字符串不是雙重的。這是第一個錯誤信息的含義。第二種意思是你試圖將一個具有小數部分並且可能非常大的double賦值給一個int類型的變量,該變量沒有任何小數部分並且具有更有限的值範圍。這也是不可能的,至少不是沒有通知編譯器,你明白你在做什麼,並接受失去精度。現在,花時間思考你必須做的事情。 –

回答

0

因爲Java是一種強類型語言,所以您可能需要重新學習「數據類型」技巧:-)。

誤差

error: incompatible types: String cannot be converted to double energy = stdIn.next(); 

意味着由stdIn.next()的返回值具有「串」數據類型,其不變量「能量」的數據類型相匹配,因爲「能量」是不是一個字符串。這是一個「雙」。

通過使用

energy = Double.parseDouble(stdIn.next()); 

當心,這將拋出一個異常時,該字符串由stdIn.next()字符,例如字母轉換返回由stdIn.next()爲雙返回的值。

對於你的第二個錯誤,你爲什麼要systemCost變量是一個整數?你希望它始終是一個圓整的數字嗎?如果是這樣,那麼你需要將表達式「savingsWeek * energy」的結果四捨五入到最接近的整數,然後將其轉換爲整數。另一方面,如果你不一定希望systemCost是一個整數,只需將它聲明爲double。

+0

「強類型」您的意思是靜態類型? – HyperNeutrino

+0

我的意思是「強烈」打字。簡單來說,這意味着Java中的所有變量都具有預定義的數據類型,並且與「鬆散」類型語言不同,您不能隨意將具有一種數據類型的變量分配給具有其他數據類型的變量。例如,在JavaScript中,你可以做var x = 1.2 +「hi」;但是你不能在Java中這樣做,因爲1.2是一個雙精度值,「hi」是一個字符串。將它們加在一起沒有任何意義。 – NavkarJ

+0

好的。我認爲這被稱爲靜態類型,但我可能是錯的。 – HyperNeutrino