2015-02-11 65 views
0

我正试图编写一个程序,当500英镑的目标满足时需要停止。我必须使用DO WHILE循环来完成此操作。做while while循环时,更新最大捐助者名称

它需要记录它在达到500英镑之前收到的捐款数量,还需要记录捐赠人捐款最多和捐赠最多的人的姓名。

我无法让程序更新最高捐赠人的姓名。我到目前为止的代码如下。请告诉我我哪里错了。

我有一条红线来了下“namemax”当我尝试在循环外底打电话了,他说“没有初始化”

enter codeimport java.util.Scanner; 
/** 
* Created by IntelliJ IDEA. 
* Date: 11/02/2015 
* Time: 15:45 
* UPDATE COMMENT ABOUT PROGRAM HERE 
*/ 
public class DoWhile 
{ 
    public static void main(String[] args) 
    { 

     Scanner keyboard= new Scanner(System.in); 
     final double TOTAL=500; 
     String name,namemax; 
     double donation, donationTotal=0,currentMax=0; 
     int howManyDonation=0; 

     do 
     { 
     System.out.println("Please enter your name below"); 
     name = keyboard.next(); 
     System.out.println(""); 


     System.out.println("Please enter the amount you would like to donate below"); 
     donation = keyboard.nextDouble(); 


     howManyDonation++; 

     donationTotal = donationTotal+donation; 


     if(donation>currentMax) 
     { 

      currentMax=donation; 
      namemax=name; 

     }//if 


     }//doWhile 
     while(donationTotal!=TOTAL); 

     System.out.println("The total number of donations is " + howManyDonation); 
     System.out.println("The largest donation was " + currentMax); 
     System.out.println("The name of the person with the largest donation is " + namemax); 





    }//main 
}//class 
here 
+0

namemax变量未初始化检查http://ideone.com/iF1lZ9 – silentprogrammer 2015-02-11 17:25:52

+0

如果解决了问题,请接受其中一个答案。 – 2015-02-11 17:53:48

回答

1

只是改变这一行

String name,namemax; 

成这样:

String name,namemax = null; 

此外,改变这种

while(donationTotal != TOTAL); 

到这一点:

while(donationTotal < TOTAL); 
+0

谢谢!我现在感觉很傻! :S但非常感谢你! – 2015-02-11 17:22:23

+0

也看一看吧! – 2015-02-11 17:23:39

0

它给至少一个sutuation其中namemax不将被设置。所以你必须初始化字符串。

简单地改变

String name,namemax ; 

String name,namemax = null; 

String name,namemax = ""; 
1

在这里你有一个非常简单的问题。你只在一个if循环中更新namemax。这意味着就代码而言,存在一种可能永远不会被分配的情况。在实践中,由于你在做什么,这实际上不可能发生,但编译器不理解这一点。

为了解决这个问题,

变化

string name,namemax; 

string name; 
string namemax = ""; 

这应该照顾它。

0

编译器无法保证您在退出循环之前实际设置了namemax。您应该将namemax初始化为空字符串以解决此问题。