簡體   English   中英

不確定我在java中正在使用方法:/

[英]Not sure I'm using methods right in java :/

HIII。 我們剛剛開始學習類中的方法。我們應該編寫一個程序來添加和減去任何2個整數。它應該使用一個名為validateMe的方法(我已經使用過)接受用戶輸入值並檢查它的int數據類型與否。如果不是,該方法應顯示錯誤消息並繼續詢問用戶輸入。如果正確,程序應繼續。 我有兩個關於我的計划的問題:

  1. 我的程序工作正常。方法正在使用。但我只關心它是否包含一些額外的代碼。也許我可以省略並縮短程序。我只關心這是否是最有效的方法它。

  2. 正如你在評論中看到的那樣,我添加了一個變量'error'。每當用戶犯錯時,這應該增加1。我應該有一個運行總數為no。 所犯的錯誤。我的程序的這部分不起作用。 任何幫助,將不勝感激。 謝謝。

     import java.util.*; public class Methods { public static void main(String[]args){ //int errors=1; for(int d=1;d>0;d++) { Scanner a=new Scanner(System.in); System.out.println("Please enter whole number: "); double num1=a.nextDouble(); Scanner b=new Scanner(System.in); System.out.println("Please enter whole number: "); double num2=b.nextDouble(); if(Math.floor(num1)!=num1 || Math.floor(num2)!=num2) { validateMe(); //errors=errors+1; //System.out.println(errors); } else { System.out.println("Great job!"); System.out.println("Addition: "+(num1+num2)); System.out.println("Subtraction: "+(num1-num2)); } } } public static void validateMe(){ //int errors=1; System.out.println("Sorry!Try again."); //errors=errors+1; //System.out.println("Number of errors: "+errors); Scanner a=new Scanner(System.in); System.out.println("Please enter whole number: "); double num1=a.nextDouble(); Scanner b=new Scanner(System.in); System.out.println("Please enter whole number: "); double num2=b.nextDouble(); if(Math.floor(num1)!=num1 || Math.floor(num2)!=num2) { validateMe(); //errors=errors+1; //System.out.println("Number of errors: "+errors); } else { System.out.println("Great job!"); System.out.println("Addition: "+(num1+num2)); System.out.println("Subtraction: "+(num1-num2)); } } } 

我不確定預期的行為是什么,但是你清楚地重新定義了錯誤變量,並在每次調用方法時重新分配值1。 這意味着即使你得到10個錯誤,你的變量永遠不會保持值10,因為它會一直被重置。

如果您嘗試在整個程序持續時間內保留所有錯誤的總數,則可能需要保留靜態變量

public class Methods {
     private static int errors = 0;
}

因為這是一個靜態變量,所以只會初始化一次:當程序開始並加載類時。

此外,因為您要求提供使代碼更清潔的提示,而不是

 errors = errors + 1;

您可以使用

errors++;

這具有相同的效果。

此外,您當前正在遞增錯誤太多次。 我看到你在validateMe()方法內部以及在調用該方法之前遞增變量。 這引出了我們下一個問題: 你重復整個邏輯兩次!

您可能想嘗試使用do-while循環。 對於循環,while循環和do-while循環在表達能力方面基本相同。

這是一個粗略的骨架:

double num1 = 0;
double num2 = 0;

int errors = -1;
do {

    // Increment errors every time you go through the loop.
    // The first time you go through it doesn't really count since we set errors to -1
    errors++;

    if (errors > 0) {
        // If we are here, it's because there was an error
        System.out.println("Error: try again");
    }

    // Here you read a variable with Scanner. Technically you only need one, but I'm reusing your code.
    Scanner a=new Scanner(System.in);
    System.out.println("Please enter whole number: ");
    num1=a.nextDouble();

    Scanner b=new Scanner(System.in);
    System.out.println("Please enter whole number: ");
    num2=b.nextDouble();
} while (Math.floor(num1)!=num1 || Math.floor(num2)!=num2);

System.out.println("Great job!");
System.out.println("Addition: "+(num1+num2));
System.out.println("Subtraction: "+(num1-num2));

有幾種方法可以改進這個程序。 首先,您不需要多次重新定義掃描儀; 您可以根據需要多次使用相同的掃描儀變量。 第二件事是你應該以不同的方式使用validateMe()方法,以便可以重復使用以實現多種目的。

這是做你想做的事情的另一種方式:

import java.util.*;

public class Methods {

    public static void main(String[] args) {
        double numberOne;
        double numberTwo;
        System.out.println("This program will both add and subtract two numbers together.\nPlease only use integers.");
        numberOne = getInt();
        numberTwo = getInt();
        System.out.println("Great Job!");
        System.out.println("Addition: "+ (numberOne + numberTwo));
        System.out.println("Subtraction: " + (numberOne - numberTwo));
    }

    public static double getInt() {
        int count = 0;
        Scanner input = new Scanner(System.in);
        System.out.print("Please enter a number: ");
        double number = input.nextDouble();
        if (!validateMe(number)) {
            count++;
            return getInt();
        }
        else {
            System.out.println("You have incorrectly entered numbers " + count + " times!");
            return number;
        }
    }

    public static boolean validateMe(double number) {
        if (Math.floor(number) != number) {
            System.out.println("You entered an incorrect number!");
            return false;
        }
        else {
            System.out.println("You entered a correct number!");
            return true;
        }
    }
}

其他一些提示

  • 我知道你是編程的新手,但是你應該開始習慣使用偶數間距和標簽,這樣一切都更容易閱讀。 我知道StackOverflow可以搞亂你的格式,但要確保在“+”之類的東西之間放置空格以提高程序的可讀性。

  • 在創建方法時,請嘗試創建更多方法,以便將它們用於不同目的以縮短代碼。


你決不是要使用我為這個問題創建解決方案的方式, 那是最好的部分! 您可以按照自己的方式制作節目! 稍后通過縮短使用方法重用的代碼,嘗試使自己更容易。

暫無
暫無

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

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