2017-03-31 96 views
1

我试图获取用户输入的某个文本文件中的最大值。我也把它分成不同的方法。继承人是我到目前为止有:在java中输入文本文件中查找最大值

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,我不知道我why.How可以得到最大值? Id感谢任何帮助/建议。提前致谢。

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

+1

有在你的代码中的逻辑错误。你想要做的是从文本和文件中读取一个数字,并比较它是否大于以前的最大数字。如果是,请更新最大值,然后检查下一个数字。在读完整个文件后,你应该打印最大变量的值 – amyn

回答

0
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

+0

我完全理解这个逻辑,但是当我尝试它时,它不打印最大值,而是打印文件的内容。发生什么事? :( – qqq

+0

这是因为你(和我!)在循环中使用了println,我修复了我的代码,只打印了最终的最大值,我以为你想显示每个值直到它达到最大值,显然你只是对最大值感兴趣,所以println(或者return语句)应该在代码的最后。 – jrook

+0

:O是的,就是这样!谢谢! – qqq

0

只要你得到大于bignum那么你应该用num来更新big。像这样 -

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

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

System.out.println(big); 
0

虽然代码中有很多错误,我认为你要求的问题是它打印多个数字的原因。

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

1

您的代码实际上并未找到最大值,它将输出的每个数字大于它读取的第一个数字。请注意,您从未将big指定为新值。此外,maximum纯粹跟踪的数字大于big(文件中的第一个数字)。

这应做到:

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

你想要做的是内部while循环:

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

然后,当你用while循环,你只是打印大完成:
的System.out .println(大);
你不需要这个最大值,因为你没有使用它的任何东西,但如果你应该首先修复语法错误(错误放置和丢失括号),或者你没有正确复制代码。