Do / while循环没有返回顶部?

时间:2017-04-22 01:37:30

标签: java

最近开始进行计算机编程,我被困在家庭作业上。我创建了一个循环,但它没有回到顶部,而是比我想要的那样开始前一步。 (它在我在编码中所做的评论中都列出了。我一直试图在过去的6个小时内弄清楚这一点,所以如果有人可以帮助我,我将非常感激。

import java.util.Scanner;
import java.text.DecimalFormat;

public class Election
{
    public static void main (String[] args)
        {

            DecimalFormat f = new DecimalFormat("##.00");
            DecimalFormat n = new DecimalFormat("##");

            float votesForPolly; 
            float votesForErnest; 
            float totalPolly = 0; 
            float totalErnest = 0; 
            String response;
            int precinctsforpolly = 0; 
            int precinctsforernest = 0;
            int precinctsties = 0;

            Scanner scan = new Scanner(System.in);
            System.out.println ();      
            System.out.println ("Election Day Vote Counting Program");
            System.out.println ();

            do
            {   
                //point A
                System.out.println("Do you wish to enter more votes? Enter y:n");
                response = scan.next();
                if (response.equals("y"))
                {
                    //point B
                    System.out.println("Enter votes for Polly:");
                    votesForPolly = scan.nextInt();
                    System.out.println("Enter votes for Ernest:");
                    votesForErnest = scan.nextInt();

                    totalPolly = totalPolly + votesForPolly;
                    totalErnest = totalErnest +  votesForErnest;


                        System.out.println("Do you wish to add precincts? Enter y:n");
                        response = scan.next();
                        while (response.equals("y"))
                        {   
                            System.out.println("How many precincts voted for Polly: ");
                            precinctsforpolly = scan.nextInt();
                            System.out.println("How many precincts votes for Ernest: ");
                            precinctsforernest = scan.nextInt();
                            System.out.println("How many were ties: ");
                            precinctsties = scan.nextInt(); 

                            break;
                            //not returning to point A, instead it returns to point B
                        }
                            if (response.equals("n"))
                            {
                                break;

                            }


                    if (response.equals("n"))
                    {
                        break;

                    }
                }
            }
            while (response.equals("n"));
            System.out.println("Final Tally");
            System.out.println("Polly received:\t " + n.format(totalPolly) + " votes\t" + f.format((totalPolly/(totalPolly + totalErnest))*100) + "%\t" + precinctsforpolly + " precincts");
            System.out.println("Ernest received: " + n.format(totalErnest) + " votes\t" + f.format((totalErnest/(totalPolly + totalErnest))*100) + "%\t" + precinctsforernest + " precincts");
            System.out.println("\t\t\t\t\t" + precinctsties + " precincts tied");

        }
}

我的猜测是字符串响应已经被确定为循环结束时的y,这就是为什么它跳过第一步并跳回到循环中,假设我的答案已经是y。

4 个答案:

答案 0 :(得分:0)

if (response.equals("n"))
{
    break;
}

打破你的while循环。

如果用户的回答是'y',您可能想再次循环。
在这种情况下,请使用while (response.equals("y"));

答案 1 :(得分:0)

如果用户输入" n"您的要求是爆发。但是当用户输入是" y"时循环,但你的代码说,

do{
.....
}while (response.equals("n"));

应该是,

while (response.equals("y"));

答案 2 :(得分:0)

       do {   
            //point A
            System.out.println("Do you wish to enter more votes? Enter y:n");
            response = scan.next();
            if (response.equals("y"))
            {
                //point B
                #code
                if (response.equals("n")) //<--- this 'if' block will break the loop when response equals 'n'
                {
                    break;
                }
            }
        }
        while (response.equals("n"));// <----- this means doing loop when response equals "n"

你可以在上面的代码块上看到我的评论,只有当响应等于'n'时,循环才会再做一次。但是当响应等于'n'时,它上方的'if'块将打破循环并且不会检查while (response.equals("n"))

答案 3 :(得分:0)

您只需要删除不必要的break代码,并以不同方式处理2个响应。当响应为y时,你的循环也应该继续,而不是相反。

请参阅以下编辑代码:

import java.util.Scanner;
import java.text.DecimalFormat;

public class Election
{
    public static void main (String[] args)
    {

        DecimalFormat f = new DecimalFormat("##.00");
        DecimalFormat n = new DecimalFormat("##");

        float votesForPolly; 
        float votesForErnest; 
        float totalPolly = 0; 
        float totalErnest = 0; 
        String response;
        int precinctsforpolly = 0; 
        int precinctsforernest = 0;
        int precinctsties = 0;

        Scanner scan = new Scanner(System.in);
        System.out.println ();      
        System.out.println ("Election Day Vote Counting Program");
        System.out.println ();

        do
        {   
            //point A
            System.out.println("Do you wish to enter more votes? Enter y:n");
            response = scan.next();
            if (response.equals("y"))
            {
                //point B
                System.out.println("Enter votes for Polly:");
                votesForPolly = scan.nextInt();
                System.out.println("Enter votes for Ernest:");
                votesForErnest = scan.nextInt();

                totalPolly = totalPolly + votesForPolly;
                totalErnest = totalErnest +  votesForErnest;


                    System.out.println("Do you wish to add precincts? Enter y:n");
                    String response2 = scan.next();//create a new response variable, so the loop doesn't confuse which response to break on
                    //I removed the inner loop. If you really intended for this to be an inner loop then the while(response2.equals("y")){} should be around the question, not after
                    if (response2.equals("y"))
                    {   
                        System.out.println("How many precincts voted for Polly: ");
                        precinctsforpolly = scan.nextInt();
                        System.out.println("How many precincts votes for Ernest: ");
                        precinctsforernest = scan.nextInt();
                        System.out.println("How many were ties: ");
                        precinctsties = scan.nextInt(); 

                    }
                //removed the unnecessary checks for when response in 'n'
            }
        }
        while (response.equals("y"));
        System.out.println("Final Tally");
        System.out.println("Polly received:\t " + n.format(totalPolly) + " votes\t" + f.format((totalPolly/(totalPolly + totalErnest))*100) + "%\t" + precinctsforpolly + " precincts");
        System.out.println("Ernest received: " + n.format(totalErnest) + " votes\t" + f.format((totalErnest/(totalPolly + totalErnest))*100) + "%\t" + precinctsforernest + " precincts");
        System.out.println("\t\t\t\t\t" + precinctsties + " precincts tied");

    }
}