从文件中读取不会读取第一个值 Java
reading from a file wont read the first value Java
所以我有这段代码,我需要它来打开一个文件,扫描文件中的两个整数,然后我需要它来存储这两个数字。第一个数字的数字限制在 1 到 10 之间,第二个数字的数字限制在 1 到 39 之间。我有一个 valueCounter 来确保正确的数字存储在正确的变量中。由于某种原因,代码总是 returns
"Your Initial Fib is out of range, eneter # between 1-10"
如果第一个数字大于 10 或小于 1,这将是合适的,但无论我将第一个数字更改为什么,代码 return 都在同一行。唯一一次它不会 return 该行是当我将第二个数字更改为介于 1 和 10 之间时。所以我可以得出结论,代码跳过了第一个数字,但我不知道为什么。有更高智慧的存在可以提供帮助吗?
private static File inFile = null;
private static PrintWriter outFile = null;
private static int startValue;
private static int lengthValue;
public static void main(String[] args) throws IOException
{
inFile = new File( inFileName);
Scanner in = new Scanner (inFile);
outFile = new PrintWriter (outFileName);
int valueCounter = 1;
while (in.hasNextInt())
{
int value = in.nextInt();
if ( value <= 39 && value >= 1 && valueCounter == 2)
{
lengthValue = value;
valueCounter ++;
}
if ( value > 39 || value < 1 && valueCounter == 2)
{
System.out.println("You are asking for too many Fib, eneter # between 1-39");
in.close();
System.exit(1);
}
if ( value <= 10 && value >= 1 && valueCounter == 1)
{
startValue = value;
valueCounter ++;
}
if ( value > 10 || value < 1 && valueCounter == 1)
{
System.out.println("Your Initial Fib is out of range, eneter # between 1-10");
in.close();
System.exit(1);
}
}
}
因为operator precedence,&&
先于||
求值。这使得下面的表达式
if ( value > 10 || value < 1 && valueCounter == 1)
第二轮评估为真,因为第一个value < 1 && valuecounter == 1
被评估,这是错误的。接下来,对 value > 10
求值,结果为真。 Or
-ing 两者都为真,主体执行。使用括号控制求值顺序。
if ( value > 10 || value < 1 && valueCounter == 1)
似乎总是正确的,因为它是代码末尾的正常外部 "if",所以它总是被调用。过度思考你的 "if" 和它的外表
所以我有这段代码,我需要它来打开一个文件,扫描文件中的两个整数,然后我需要它来存储这两个数字。第一个数字的数字限制在 1 到 10 之间,第二个数字的数字限制在 1 到 39 之间。我有一个 valueCounter 来确保正确的数字存储在正确的变量中。由于某种原因,代码总是 returns "Your Initial Fib is out of range, eneter # between 1-10" 如果第一个数字大于 10 或小于 1,这将是合适的,但无论我将第一个数字更改为什么,代码 return 都在同一行。唯一一次它不会 return 该行是当我将第二个数字更改为介于 1 和 10 之间时。所以我可以得出结论,代码跳过了第一个数字,但我不知道为什么。有更高智慧的存在可以提供帮助吗?
private static File inFile = null;
private static PrintWriter outFile = null;
private static int startValue;
private static int lengthValue;
public static void main(String[] args) throws IOException
{
inFile = new File( inFileName);
Scanner in = new Scanner (inFile);
outFile = new PrintWriter (outFileName);
int valueCounter = 1;
while (in.hasNextInt())
{
int value = in.nextInt();
if ( value <= 39 && value >= 1 && valueCounter == 2)
{
lengthValue = value;
valueCounter ++;
}
if ( value > 39 || value < 1 && valueCounter == 2)
{
System.out.println("You are asking for too many Fib, eneter # between 1-39");
in.close();
System.exit(1);
}
if ( value <= 10 && value >= 1 && valueCounter == 1)
{
startValue = value;
valueCounter ++;
}
if ( value > 10 || value < 1 && valueCounter == 1)
{
System.out.println("Your Initial Fib is out of range, eneter # between 1-10");
in.close();
System.exit(1);
}
}
}
因为operator precedence,&&
先于||
求值。这使得下面的表达式
if ( value > 10 || value < 1 && valueCounter == 1)
第二轮评估为真,因为第一个value < 1 && valuecounter == 1
被评估,这是错误的。接下来,对 value > 10
求值,结果为真。 Or
-ing 两者都为真,主体执行。使用括号控制求值顺序。
if ( value > 10 || value < 1 && valueCounter == 1)
似乎总是正确的,因为它是代码末尾的正常外部 "if",所以它总是被调用。过度思考你的 "if" 和它的外表