2016-10-31 34 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