Java System.out.println出现意外结果

Java System.out.println出现意外结果,java,Java,我正在使用文本文件的输入制作一个程序,它只有两行文本,这是 120(现在是时候了) 2(这是变化) 我的代码旨在读取用户的输入,该输入将小时转换为分钟,然后要求进行一些更改。如果输入的小时数为02:00,即120分钟,并且输入的更改数为2或更少,则返回时会显示“可接受”,如果不是,则会显示“不可接受”,但我在制定此值时遇到了一些问题。如果有人能提供帮助,我将不胜感激 代码如下: import java.io.FileReader; import java.io.IOException; im

我正在使用文本文件的输入制作一个程序,它只有两行文本,这是

  • 120(现在是时候了)
  • 2(这是变化)

我的代码旨在读取用户的输入,该输入将小时转换为分钟,然后要求进行一些更改。如果输入的小时数为02:00,即120分钟,并且输入的更改数为2或更少,则返回时会显示“可接受”,如果不是,则会显示“不可接受”,但我在制定此值时遇到了一些问题。如果有人能提供帮助,我将不胜感激

代码如下:

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class InputOutput {

public static void main(String[] args) throws IOException{

    final Scanner S = new Scanner(System.in);
    final Scanner inFile = new Scanner(new FileReader("task.txt"));

    // open file and associate objects
    int IOminutes = Integer.parseInt(inFile.next());
    int changes = Integer.parseInt(inFile.next());

    // close the input file
    inFile.close();

    System.out.print("Specify Time (HH:MM): ");
    String givenTime = S.next();

    System.out.print("Specify Changes: ");
    String givenChanges = S.next();

        // save the index of the colon
        int colon = givenTime.indexOf(':');

        // strip the hours preceding the colon then convert to int      
        int givenHours = Integer.parseInt(givenTime.substring(0, colon));

        // strip the mins following the colon then convert to int
        int givenMins = Integer.parseInt(givenTime.substring(colon + 1, givenTime.length()));

        // calculate the time's total mins
        int mins = (givenHours * 60) + givenMins;

        // using given time
        System.out.println(givenTime + " = " + mins + " minutes");

            if (!givenTime.equals(IOminutes) && changes >= 3) {
                System.out.println("Time: " + givenTime + ", Changes: " + givenChanges + " = unacceptable!");
            } else if (givenTime.equals(IOminutes) && changes <= 2) {
                System.out.println("Time: " + givenTime + ", Changes: " + givenChanges + " = acceptable!");
            }
        S.close();
    }
}
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Scanner;
公共类输入输出{
公共静态void main(字符串[]args)引发IOException{
最终扫描仪S=新扫描仪(System.in);
最终扫描仪填充=新扫描仪(新文件阅读器(“task.txt”);
//打开文件并关联对象
int-IOminutes=Integer.parseInt(infle.next());
int changes=Integer.parseInt(infle.next());
//关闭输入文件
infle.close();
系统输出打印(“指定时间(HH:MM):”;
字符串givenTime=S.next();
系统输出打印(“指定更改:”);
字符串givenChanges=S.next();
//保存冒号的索引
int colon=givenTime.indexOf(':');
//去掉冒号前面的小时数,然后转换为int
int givenHours=Integer.parseInt(givenTime.substring(0,冒号));
//去掉冒号后面的min,然后转换为int
int givenMins=Integer.parseInt(givenTime.substring(冒号+1,givenTime.length());
//计算时间的总分钟数
整数分钟=(给定小时*60)+给定分钟;
//使用给定的时间
System.out.println(给定时间+“=”+分钟+“分钟”);
如果(!givenTime.equals(IOminutes)&&changes>=3){
System.out.println(“时间:+givenTime+”,更改:+givenChanges+“=不可接受!”);
}否则,如果(givenTime.equals(IOminutes)&&changes您的输入(基于文件和基于用户)看起来合理。
当您在第40行到达if elseif逻辑时,您有以下值(所有值基于问题中的问题描述):
从“task.txt”加载。。。
分钟:120
变化:2

user input:
givenTime="02:00"
givenChanges=2
givenHours=2
givenMins=0
mins=2*60+0 = 120
从字符串到整数的转换看起来没有问题

我很难理解你所期望的“可接受”/“不可接受”的结果;不是它在做什么,而是它为什么这样做。 我很难理解为什么你有两个“变化”

这对我来说更有意义,如果你有: task.txt:IOminutes=120,changes=2 给定:time=“hh:mm” 现在,计算task.txt的IOminutes和用户给定时间之间的差异(以分钟为单位)。我们将该差异称为givendiff。然后您会得到如下结果: 如果givendiff>更改,则不可接受

示例(或多或少由用户输入值组成):

我鼓励您查看原始需求,并验证您的用户是否应该在task.txt的更改之外给您额外的“更改”。或者如果您应该计算task.txt的IOminutes和用户输入的值之间的差异,并投诉该差异是否超过task.txt的changes值


我会更进一步,但这似乎是一个家庭作业或代码挑战问题;如果是这样,希望这足以帮助推动您的视角重新思考“更改”的内容在原始要求中表示。祝你好运。

意外输出是什么?有可能让问题更容易理解吗?是的!当然,对此表示抱歉。基本上,当你启动程序时,会要求你以HH:MM格式输入一个时间,以便它可以将其转换为分钟。在我访问的文本文件中,有一行是120英寸代表120分钟,因此如果您输入2:00即120分钟。用户还输入了一些更改,文本文件中还有另一行是“2”。当用户输入2:00或以下代表时间,输入2:00或以下代表更改时,将返回为“可接受”,除此之外的任何内容都是“不可接受”的,如果这有意义的话?这是unr非常高兴,但正如您所知,
S
infle
IOminutes
不遵循Java的…
S
应该有一个有意义的名称,并且由于它是一个静态的结尾,应该在所有的大写字母中,单词之间用“u”(下划线)分隔
infle
应该是
INPUT\u文件
,出于类似的原因;
IOminutes
应该简单地命名为
minutes
,或者类似于
parsedMinutes
。噢,谢谢@TheLima!我还在学习,这非常有用!下次我会记住这一点:)“如果输入的时间为02:00,即120分钟,输入的更改为2或更少,则返回时会说‘可接受’”“执行此操作的代码行在哪里?非常感谢!这实际上帮助了我很多,并证明了这一点,它正在工作-非常感谢!
task.txt: IOminutes=120, changes=2
test 1: given time="02:00"  (computed givendiff=0,   so acceptable)
test 2: given time="01:50"  (computed givendiff=-10, so unacceptable)
test 3: given time="02:05"  (computed givendiff=5,   so unacceptable)
test 3: given time="02:02"  (computed givendiff=2,   so acceptable)
test 3: given time="01:58"  (computed givendiff=-2,  so acceptable)