2017-01-01 72 views
0

因此,我正在处理一个项目,这一步要求我编写一个要求输入数字的程序,当输入“-1”时,它将计算除-1之外的所有输入数字的总和。我只是通过在循环后添加+1来解决这个问题,但我确定有另一种“正确”的方式来做这件事,我想学习如何。如何正确计算总和而不使用sum ++;?

任何帮助表示赞赏。 (注意:我一直在学习Java大约一周,所以请使用ELI5)

public static void main(String[] args) { 
      // program in this project exercises 36.1-36.5 
      // actually this is just one program that is split in many parts 

      Scanner reader = new Scanner(System.in); 

      int numbertyped = 0; 
      int sum = 0; 

      System.out.println("Type numbers: "); 

      while (numbertyped != -1) { 

       numbertyped = Integer.parseInt(reader.nextLine()); 

       sum = sum + numbertyped; 

      } 
      sum++; 
      System.out.println("Thank you and see you later!"); 
      System.out.println("The sum is " + sum); 

编辑:我的程序现在已经完成。我使用了在while循环中添加中断的解决方案,并添加了我想要的其他功能之后,这是最终产品:(如果有人有关于如何改进我的代码或使其更高效的提示,请发表评论!)

import java.util.Scanner; 

    public class LoopsEndingRemembering { 

     public static void main(String[] args) { 
      // program in this project exercises 36.1-3 


     // actually this is just one program that is split in many parts 

     Scanner reader = new Scanner(System.in); 

     int numbertyped = 0; 
     int sum = 0; 
     int howmany = 0; 
     int evencounter = 0; 
     int oddcounter = 0; 

     System.out.println("Type numbers: "); 

     while (true) { 

      numbertyped = Integer.parseInt(reader.nextLine()); 

      if (numbertyped == -1) 
      { 
       break; 
      } 

      if (numbertyped % 2 == 0) 

      { 
       evencounter++; 
      } 

      else 

      { 
       oddcounter++; 
      } 

      sum = sum + numbertyped; 
      howmany++; 

     } 

     double average = (double) sum/howmany; 

     System.out.println("Thank you and see you later!"); 
     System.out.println("The sum is " + sum); 
     System.out.println("How many numbers: " + howmany); 
     System.out.println("Average: " + average); 
     System.out.println("Even numbers: " + evencounter); 
     System.out.println("Odd numbers: " + oddcounter); 

    } 
} 
+2

快速,但稍微糟糕的解决方案是...'int sum = 1'在开始。您可以在增加总和之前添加if语句。 – byxor

+0

我最终在添加总和之前使用了带有中断的if语句。 –

回答

4

很多时候,类似C语言的用户在类似情况下不使用“退出循环”的东西(break)。你会想这样的事情,而不是:

while (true) 
    { 

     numbertyped = Integer.parseInt(reader.nextLine()); 

     if(numbertyped == -1) 
     { 
      break; 
     } 

     sum = sum + numbertyped; 
    } 

作为一个方面说明,一个“永远循环”可以用for(;;)有些人说比while(true)更好写。然而,大多数人认为while(true)更容易阅读。我个人使用for(;;)。无论哪种方式都得到了适当的优化,因此你将不会有运行时差异。

参考有关for(;;)while (1) Vs. for (;;) Is there a speed difference?

+0

谢谢你对我有意义并且工作过! –

8

您可以尽快进入-1终止你的循环,改变

while (numbertyped != -1) { 
    numbertyped = Integer.parseInt(reader.nextLine()); 

喜欢的东西

while ((numbertyped = Integer.parseInt(reader.nextLine())) != -1) { 
    // ... 

和循环体当-1被分配给numbertyped时不会被输入。

根据您的修改,我建议你可以缩短sum = sum + numbertyped;sum += numbertyped;并且您可以通过总结evencounteroddcounter计算howmany。像,

System.out.println("Type numbers: "); 
while (true) { 
    numbertyped = Integer.parseInt(reader.nextLine()); 
    if (numbertyped == -1) { 
     break; 
    } 
    if (numbertyped % 2 == 0) { 
     evencounter++; 
    } else { 
     oddcounter++; 
    } 
    sum += numbertyped; 
} 
int howmany = evencounter + oddcounter; 
double average = (double) sum/howmany; 
+0

是啊!大!为什么不在'while()'语句中写出整个程序,以防万一...... B) –

0

我认为在这种情况下,你可以扭转while循环语句的顺序。

 int numbertyped = 0; 
     int sum = 0; 

     System.out.println("Type numbers: "); 

     while (numbertyped != -1) { 

      sum = sum + numbertyped; 

      numbertyped = Integer.parseInt(reader.nextLine()); 

     } 

第一次循环,numberTyped是0,这是完美的 - 它不会退出循环,并不会实际的总和添加任何东西。之后,直到检查是否为-1之后才会更改总和。

+0

好主意,我没想到! –