2012-12-15 145 views
0

我是新来的Java,我试图让一个程序,允许用户输入100个数字,如果用户写'0',那么该程序是假设打印最小,最大,总和和所有数字。我得到了所有的工作,但不是退出并打印所有。我的老师说了一些关于使用while循环的内容,但是当你有一个for循环时怎么可能呢?Combine for和while循环(Java)

问候

public static void main(String[] args) { 
    int[] list = new int[100]; 
    int min = 0; 
    int max = 0; 
    int sum = 0; 
    boolean first = true; 

    Scanner scan = new Scanner(System.in); 
    while(list[i] != 0) { 
     for (int i = 0; i < list.length; i++) { 

      System.out.print("Enter number (0 to exit) " + (1 + i) + ":"); 
      list[i] = scan.nextInt(); 
     } 

     for (int i = 0; i < list.length; i++) { 

      if (first == true) { 

      min = list[i]; 
      first = false; 
     } 

     if (list[i] < min) { 

      min = list[i]; 
     } 

     else if (list[i] > max) { 

      max = list[i]; 
     } 

     sum = list[i] + sum; 

    } 

    if (list[i] == 0) { 

    System.out.print("Numbers are: " + list[0] + ", "); 

    for (int i = 1; i < list.length; i++) 

    System.out.print(list[i] + ", "); 
    System.out.println(); 

    System.out.println("Smallest number is: " + min); 
    System.out.println("Largest numeber is: " + min); 
    System.out.println("Sum is: " + sum); 
    } 
    } 
} 

} 
+0

好那么也许'for'循环是不恰当的?你可以使用'for'循环并在里面有一个'if',或者你有一个'while'循环并且有一个变量作为计数器。 – ApplePie

+1

“for循环”是“while”循环的专门化(或者,就此而言,“do/while”循环)。你可以在while循环中做所有事情,你可以在for循环中进行。你也可以嵌套循环,一个在另一个之内。 – paulsm4

+0

从while下降,从布尔递归下降。 – Airhead

回答

0

下面是方法的主体,它会做你所问过的。我没有使用while循环(但实际上,for循环是内部的一种while循环)。

int size = 100; // Set the number of numbers to input. 
int[] list = new int[size]; // Create an array with 'size' elements. 
int min = Integer.MAX_VALUE; // Set the highest possible integer as start value. 
int max = 0; // Set the minimum to zero, assuming that the user won't input negative numbers. 
int sum = 0; // Initialize the sum of the numbers in the list. 

Scanner scan = new Scanner(System.in); 

for (int i = 0; i < size; i++) { // Run 'size' times the process of inputting a number. 
    System.out.print("Enter number (0 to exit) " + (i + 1) + ": "); 
    int number = scan.nextInt(); 
    if (number == 0) { // Quit program if input equals '0' 
     System.out.println("Exiting..."); 
     break; 
    } 
    list[i] = number; // Add the current number to the list 
    sum += number; // Add the number to the total 
    if (number < min) { // If the number is smaller than the previous one, set this number as the smallest 
     min = number; 
    } 
    if (number > max) { // If the number is greater than the previous smallest number, set this number as the greatest 
     max = number; 
    } 
} 

// Output all numbers in the list 
for (int i = 0; i < list.length; i++) { 
    if (list[i] != 0) { 
     System.out.print((i == 0 ? "" : ", ") + list[i]); 
    } 
} 

// You see the snippet (i == 0 ? "" : ", ") 
// That is a shorthand if-else statement: 
// If i equals 0, then "" (empty string), else ", " (comma and space). 
// The statement 
//  System.out.print((i == 0 ? "" : ", ") + list[i]) 
// is the same as 
//  if (i == 0) { 
//   System.out.println("") + list[i]; 
//  } 
//  else { 
//   System.out.println(", ") + list[i]; 
//  } 

System.out.println("Smallest number is: " + min); 
System.out.println("Largest numeber is: " + max); 
System.out.println("Sum is: " + sum); 
+0

哦,谢谢。对不起,我制定的任务如此糟糕,但它不只是假设退出,它必须打印数字,最小的最大等等也在 – user1905426

+0

已更新。只需使用'break'而不是'System.exit(0)'。中断将退出当前循环并继续执行代码。 –

+0

行动,没有正确阅读它。非常感谢你!你现在不知道如何在退出时摆脱零点? – user1905426

0

你糊涂代码。更好地使用这样的模式:

while (true) { 
    // read next 
    if (input == 0) 
     break; 
} 
+0

他还需要记录到目前为止的条目数量,并在100处停止。 –

+0

但是,我是怎么假设用while循环打印出所有数字的呢? – user1905426

2

你只需要一个while循环来做到这一点,另外一个for循环只是,如果你想打印数组:

Scanner scan = new Scanner(System.in); 
int i = 0; 
int sum = 0; 
int maxValue = Integer.MIN_VALUE; 
int[] history = new int[100]; 
System.out.println("INPUT:"); 
int option = scan.nextInt(); 
while (option != 0 && i <= 100) 
{ 
    if (option > maxValue) 
     maxValue=option; 
    sum += option; 
    history[i] = option; 
    option = scan.nextInt(); 
    i++; 
} 
System.out.println("OUTPUT: \n" + "SUM: " + sum + "\n MAX VALUE: " + maxValue); 
for (int x : history) 
    System.out.print(x + ""); 
+0

谢谢!但是,我如何摆脱零?任务是让它打印“数字是:1,3,7” – user1905426

+0

得到它,谢谢 – user1905426

+0

@ user1905426如果你想摆脱所有的零,即增量式添加到数组,你需要使用动态结构像一个arrayList。 – Ivo