[英]Java: indexOf and put methods - I'm not sure what I'm doing wrong in these methods
[英]Not sure I'm using methods right in java :/
HIII。 我們剛剛開始學習類中的方法。我們應該編寫一個程序來添加和減去任何2個整數。它應該使用一個名為validateMe的方法(我已經使用過)接受用戶輸入值並檢查它的int數據類型與否。如果不是,該方法應顯示錯誤消息並繼續詢問用戶輸入。如果正確,程序應繼續。 我有兩個關於我的計划的問題:
我的程序工作正常。方法正在使用。但我只關心它是否包含一些額外的代碼。也許我可以省略並縮短程序。我只關心這是否是最有效的方法它。
正如你在評論中看到的那樣,我添加了一個變量'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.