簡體   English   中英

我需要作業協助

[英]I need help with an assignment

我已經從事此編程工作大約3周了,無法弄清我的錯誤。 我必須使用兩個公共類:1)validateLength(Number)和2)convertIntegerToWords(Number)。 我的問題是,一旦用戶輸入了整數,我的循環就會永遠繼續下去。 系統將要求輸入整數,用戶輸入,系統退出時間太長或繼續使用convertIntgerToWords。 我的代碼如下

import java.util.Scanner;
public class Project2 {

    public static void main(String [] args) {
        //Main Method//

        //Create a Scanner//
        Scanner input = new Scanner(System.in);

        //Enter an Integer//   
        System.out.print(" What is your integer ? ");
        int Number= input.nextInt(); 
        while (Number >= 0) {
            if (Number != 0)
                validateLength(Number);
            else if(Number == 0) {
                System.out.print( "Thank you for playing! " + "Good bye! ");    
                break;
            }
        }   
    }

    //Next Method//
    public static boolean validateLength(int userNum) {
        String Number = "" + userNum;
        while (userNum >= 0) {
            if (userNum < 10) 
                convertIntegerToWords(userNum);
            else if (userNum > 9){
                System.out.print("Your integer is too long !");
                break;
            }
        }
    }
    //End of validate//

    //Final Method//
    public static String convertIntegerToWords(int Number) {
        if (Number == 1)
            System.out.println("Your integer " + Number + "is written out as one");
        else if (Number == 2) 
            System.out.println("Your integer " + Number + "is written out as two");
        else if (Number == 3) 
            System.out.println("Your integer " + Number + "is written out as three");
        else if (Number == 4) 
            System.out.println("Your integer " + Number + "is written out as four");
        else if (Number == 5) 
            System.out.println("Your integer " + Number + "is written out as five");
        else if (Number == 6) 
            System.out.println("Your integer " + Number + "is written out as six");
        else if (Number == 7) 
            System.out.println("Your integer " + Number + "is written out as seven");
        else if (Number == 8) 
            System.out.println("Your integer " + Number + "is written out as eight");
        else if (Number == 9) 
            System.out.println("Your integer " + Number + "is written out as nine");
            return Number + "";
        }
    }
}

你需要搬家

Number = input.nextInt();

while循環中。 這是典型的習慣用法(還添加了其他清理操作):

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);

    // Enter an Integer//
    System.out.print(" What is your integer ? ");
    int Number;
    while ((Number = input.nextInt()) >= 0)
    {
        if (Number == 0)
        {
            System.out.print("Thank you for playing! " + "Good bye! ");
            break;
        }

        validateLength(Number);
    }
}

編輯

如果用戶輸入0,則是,程序終止。 但是,如果用戶輸入1到9的整數,則程序應使用單詞拼寫該整數(即1表示為1)。 它做到了,但循環無限。 與用戶輸入大於9的整數一樣,它報告“您的整數太大,請輸入另一個整數”。但是,此操作會在一遍又一遍地重復。

那是因為validateLength()中的while循環。 嘗試一下(也請注意其他代碼清除):

public class ScannerDemo
{
    private static void convertIntegerToWords(int num)
    {
        String message = null;
        if (num > 9)
        {
            message = "Your integer is too long!";
        }
        else if (num > 0)
        {
            message = "Your integer " + num + " is written out as ";
            String numString = "";

            switch (num)
            {
                case 1:
                    numString = "one"; break;
                case 2:
                    numString = "two"; break;
                case 3:
                    numString = "three"; break;
                case 4:
                    numString = "four"; break;
                case 5:
                    numString = "five"; break;
                case 6:
                    numString = "six"; break;
                case 7:
                    numString = "seven"; break;
                case 8:
                    numString = "eight"; break;
                case 9:
                    numString = "nine"; break;
            }

            message += numString;
        }

        System.out.println(message);
    }

    private static int getNextNumber(Scanner s)
    {
        System.out.println("What is your integer?");
        return s.nextInt();
    }

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        int number;
        while ((number = getNextNumber(input)) >= 0)
        {
            if (number == 0)
            {
                System.out.println("Thank you for playing! Good bye!");
                break;
            }

            convertIntegerToWords(number);
        }
    }
}

它也在github上

您的while條件始終滿足,因此它將繼續通過while循環。 僅當Number不再大於或等於零時,它才會停止。

如果要使用循環,則需要完全使用其他某種條件(盡管在此示例中,我無法說出為什么要這樣做)。 您永遠不會更改與Number相關聯的值,因此它始終是實例化的值。 也許您打算讓代碼在特定條件下更改其值? 如果不是,則需要完全失去該條件。

while (Number >= 0) {

正在創建while循環,在該循環中,我看不到您減少Number整數以停止循環。 您是否需要在此處使用循環? 您應該嘗試使用if語句。

另外,您可能要考慮使用switch語句而不是if來輸出。

歡迎使用StackOverflow。

我覺得需要提到您有一個Project2類和兩個方法而不是類。 你會得到一個int不是整數,你無法讀取我懷疑是你的問題,除非你希望用戶輸入在第一行的一切下一行。

我建議您學習使用調試器,因為這對於查找調試和了解程序的作用非常有用。 esp表示不會結束的循環。

//Main Method//
public static void main(String [] args) {
    //Create a Scanner//
    Scanner input = new Scanner(System.in);
    bool bPlay = true; 

    while (bPlay) {
        //Enter an Integer//   
        System.out.print(" What is your integer ? ");
        int Number= input.nextInt(); 

        if (Number != 0)
        validateLength(Number);

        else if(Number == 0) {
            System.out.print( "Thank you for playing! " + "Good bye! "); 
            bPlay = false; 
            break;

        }
    }   
}
  public static boolean validateLength(int userNum) {
    String Number = "" + userNum;
        while (userNum >= 0) {

    if (userNum < 10) 
    convertIntegerToWords(userNum);

    else if (userNum > 9){
    System.out.print("Your integer is too long !");
            break;
    }
  }

此代碼負責該問題,您永遠不會為userNum分配新值,而是在userNum> 0時循環。 這為數字> = 0和<10的無限循環提供了一個最佳位置。 (您將循環號保留為數字> 9)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM