如何让Scanner读取下一行数字?

时间:2016-10-31 17:08:30

标签: java math java.util.scanner

我是java和编程的新手。我对这个概念有所了解,但并不完全确定。此问题使用扫描仪从另一个文件中读取,以获取有关产生的能量的信息。

@ECHO OFF
SET "Parent=%USERPROFILE%\Videos"
IF /I NOT "%CD%\"=="%~dp0" PUSHD "%~dp0"
SETLOCAL ENABLEDELAYEDEXPANSION
IF /I NOT "!CD:%Parent%=!"=="%CD%" EXIT/B 
SETLOCAL DISABLEDELAYEDEXPANSION
FOR /F "TOKENS=1,3*" %%A IN ('WHERE/T /R "%Parent%" *.mp4'
    ) DO IF %%A GTR 1000000000 COPY "%%C"
它给了我这个错误“错误:不兼容的类型:字符串不能转换为double                 energy = stdIn.next();“

和这个“错误:不兼容的类型:可能有损转换从double到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.nextLine();
		double energy;
		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

.txt文件就像一串列的数字

2 个答案:

答案 0 :(得分:2)

编译器说String无法转换为Double。那就是问题所在。您说的是double energy = stdIn.nextLine(),但Scanner#nextLine()会返回String。相反,您要么将其转换为DoubleDouble.parseDouble(String)),要么致电stdIn.nextDouble()http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

答案 1 :(得分:0)

您可能需要了解"数据类型"技巧,因为Java是一种强类型语言: - )。

错误

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

表示stdIn.next()返回的值的数据类型为" string",它与变量" energy"的数据类型不匹配,因为"能量"不是一个字符串。这是一个" double"。

使用

将stdIn.next()返回的值转换为double
energy = Double.parseDouble(stdIn.next());

请注意,当字符串等stdIn.next()字符返回时,这会抛出异常。

对于第二个错误,为什么要将systemsCost变量设为整数?你想要它总是一个圆形数字?如果是这样,那么你需要对表达式的结果进行舍入" savingsWeek * energy"到最近的整数,然后将其转换为整数。另一方面,如果您不一定希望systemsCost为整数,只需将其声明为double。