【问题标题】:Find max value from input text file in java从java中的输入文本文件中查找最大值
【发布时间】:2017-03-31 16:03:34
【问题描述】:

我试图获取用户输入的某个文本文件中的最大数量。我也把它放在单独的方法中。这是我到目前为止所拥有的:

public static void FindMax(String file)throws IOException{
 int maximum = 0;
 Scanner fileScanner = new Scanner(new File(file)); {  
            int big = fileScanner.nextInt();
            while (fileScanner.hasNextInt()) {
                int num = fileScanner.nextInt();
                if(num > big) {
                   maximum++;
                     System.out.println(num);;
                }
           }
  }
}
public static void main(String[] args)throws IOException{

    Scanner keyboard = new Scanner(System.in);
     String file;                                             

      System.out.print("Enter file: ");                  
       file = keyboard.nextLine();                            

       FindMax(file);

}

输出打印文本文件中除第一个值之外的所有内容,而不是打印最大值。例如,如果文本文件是:

1
2
3
4
5

它只打印 2、3、4 和 5,我不知道为什么。我怎样才能得到最大值?我很感激任何帮助/建议。提前致谢。

编辑:你们所有人都在说类似的解决方案,但是当我尝试它们时,它只会打印相同的输出。我很困惑。

【问题讨论】:

  • 您的代码中存在一些逻辑错误。你想要做的是从文本和文件中读取一个数字,并比较它是否大于之前的最大数字。如果是,则更新最大值,否则检查下一个数字。阅读整个文件后,您应该打印 max 变量的值

标签: java


【解决方案1】:

您的代码实际上并没有找到最大值,而是打印出大于它读取的第一个数字的每个数字。请注意,您永远不会为 big 分配新值。此外,maximum 纯粹是跟踪大于big(文件中的第一个数字)的数字。

应该这样做:

while (fileScanner.hasNextInt()) {
    int num = fileScanner.nextInt();
    if (num > big) 
       big = num;
}

【讨论】:

    【解决方案2】:
    import java.io.File;
    import java.io.IOException;
    import java.util.Scanner;
    
    public class FindMax {
        public static void findMax(String file) throws IOException {
            Scanner fileScanner = new Scanner(new File(file));
            int max = fileScanner.nextInt();
            while (fileScanner.hasNextInt()) {
                int num = fileScanner.nextInt();
                if (num > max) {
                    max=num;
                }
            }
            System.out.println(max);
            fileScanner.close();
        }
    
        public static void main(String[] args) throws IOException {
    
            Scanner keyboard = new Scanner(System.in);
            String file;
    
            System.out.print("Enter file: ");
            file = keyboard.nextLine();
    
            findMax(file);
            keyboard.close();
        } 
    }
    

    我修复了您代码中的逻辑错误。我不确定您为什么定义最大变量。它并没有真正在您的代码中以任何有意义的方式使用。您可能需要考虑将方法的返回类型更改为“int”并返回找到的最大值。

    此外,方法名称必须始终以小写字母开头: http://www.javatpoint.com/java-naming-conventions

    您还应该始终正确关闭您的资源: How to Correctly Close Resources

    【讨论】:

    • 我完全理解这个逻辑,但是当我尝试它时,它不是打印最大值,而是打印文件的内容。怎么了? :(
    • 那是因为你(和我!)在循环中使用了 println。我修复了我的代码,只打印最终的最大值。我以为你想显示每个值,直到它达到最大值。显然,您只对最大值感兴趣。所以 println(或 return 语句)应该在代码的末尾。
    • :O 是的,就是这样!谢谢!
    【解决方案3】:

    虽然您的代码中有很多错误。我认为您要求的问题是为什么要打印多个数字。

    只需将System.out.println(num); 这一行放在while 循环之外。并修复其他错误以使其正常工作。

    【讨论】:

      【解决方案4】:

      你想做的是在while循环里面:

      if(num > big) {
          big = num;        
      }
      

      然后,当您完成 while 循环时,您只需打印大字:
      System.out.println(big);
      你不需要那个最大值,因为你没有将它用于任何事情,但是如果你应该首先修复语法错误(错误放置和缺少括号)或者你没有正确复制代码。

      【讨论】:

        【解决方案5】:

        当你得到任何大于bignum 时,你应该用“num”更新big。像这样 -

        while (fileScanner.hasNextInt()) {
           int num = fileScanner.nextInt();
           if(num > big) {
              big = num;
           }
        } 
        

        然后在完成循环后,您将获得最大数量。只需打印big -

        System.out.println(big);
        

        【讨论】:

          猜你喜欢
          • 2012-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多