2013-02-22 122 views
0

编写一个名为smallestLargest的方法,要求用户输入数字,然后打印用户输入的所有数字中最小和最大的数字。您可以假设用户输入一个大于0的有效数字来表示要读取的数字的数量。这里是一个对话框示例:打印最小和最大的数字。输出不是我想要的

你想输入多少个数字? 4

Number 1: 5 
Number 2: 11 
Number 3: -2 
Number 4: 3 
Smallest = -2 
Largest = 11 

这就是我所做的,但我无法获得最小和最大的输出。

import java.util.*; 
public class smallestLargest{ 
    public static void main(String[] args){ 

     System.out.print("How many numbers do you want to enter? "); 
     Scanner sc=new Scanner(System.in); 
     int count=sc.nextInt(); 

     int smallest=Integer.MAX_VALUE; 
     int largest=Integer.MIN_VALUE; 

     for(int i=1;i<=count;i++){ 
      System.out.println("Number" + i + ": "); 
      int nextNumber=sc.nextInt(); 
      if(nextNumber<smallest){ 
       smallest+=nextNumber; 
      } 
      else if(nextNumber<largest){ 
       largest+=nextNumber; 
      } 


     } 
     System.out.println("Smallest= "+ smallest); 
     System.out.println("Largest= "+ largest); 



    } 
} 

回答

2

这就是问题所在:

if(nextNumber<smallest){ 
    smallest+=nextNumber; 
} 
else if(nextNumber<largest){ 
    largest+=nextNumber; 
} 

你想在所有的什么没有做。

我不会给你解决方案,但想一想 - 一次只做一个。我们从“最小”开始。

  • 如果我们当前最小的数字是5,并且有人输入2,那么新的最小数字应该是多少?为什么?

  • 如果我们当前的最小数字是5,并且有人输入10,那么新的最小数字应该是多少?为什么?

工作,然后应用相同的思维过程“最大数量”。

+0

得到了我的解决方案非常感谢你! – user2098510 2013-02-22 08:03:07

+0

@ user2098510:根据Jon引用的内容,仅供参考,有*三个单独的问题,因此请仔细按照思维过程。很容易只捕获其中的一两个。 – 2013-02-22 08:10:54

0

不要使用“else if”,因为在第一个循环中,数字会通过两个测试 - 即它会是最小的AND最大的,也不会使用“+ =”,只是“=”并改变“最大”。因此,像:

if(nextNumber<smallest) 
    smallest=nextNumber; 

if(nextNumber>largest) 
    largest=nextNumber; 
+0

那么,第一个数字是最小和最大的就很好了。这样看:如果只有一个数字,它是最小的还是最大的?在我的世界里,两者都有。 – jlordo 2013-02-22 08:05:59

0

点点 '我懒' 的解决方案:

 Scanner sc = new Scanner(System.in); 
     List<Integer> numbers = new ArrayList<Integer>(); 
     while (sc.hasNextInt()) 
     { 
      numbers.add(sc.nextInt()); 
     } 
     System.out.println("Smallest= " + Collections.min(numbers)); 
     System.out.println("Largest= " + Collections.max(numbers)); 
相关问题