這個程式是為了接受用戶一次輸入1個數字,以制定FizzBuzz(數到100。在計數時,如果數字能被3整除,就說Fizz。如果它能被5整除,就說Buzz代替。如果它能被兩者整除,就說FizzBuzz。第一個輸入的目的是長度的第一個數字,第二個輸入是第二個數字,第三個輸入是第三個數字。接下來的兩個輸入將是Fizz和第二個Buzz。然而,在程式中輸入第一個字符后,會列印兩次?我不明白我的腳本是怎么回事。以下是我的程式(使用eclipse,如果你需要了解的話)
。
public class Game {
public static void runFizzBuzz(int length1, int length2, int length3, int fizz, int buzz) {
String out = ""; //what to print
int foo = length1 * 100 length2 * 10 length3; //turn 3 digits into 3 digit num for program to read
for(int i = 0; i <= foo; i ) {
out = ""; //resets out .
if(i % fizz == 0) {
out = "Fizz"。
}
if(i % buzz == 0) {
out = "Buzz"。
}
if(out == "") { //如果上述條件都沒有通過,它將只做數字i。
out = String.valueOf(i)。
}
System.out.println(out); //print solution
}
}
public static void main(String[] args)
throws java.io.IOException {
//System.in.read()應該改變的引數。
int param1a; //digit 1 of length[/span]。
int param1b; //digit 2 of length[/span
int param1c; //digit 3的長度。
int param2; /fizz
int param3; //buzz
System.out.println("Param 1 digit 1 (length)")。
param1a = (char) System.in.read()。
System.out.println("引數1數字2(長度)")。
param1b = (char) System.in.read();
System.out.println("引數1的數字3(長度)")。
param1c = (char) System.in.read();
System.out.println("Param 2 (fizz)")。
param2 = (char) System.in.read()。
System.out.println("Param 3 (buzz)")。
param3 = (char) System.in.read()。
System.out.println("Press e to exe"); //when I press e, print fizzbuzz game。
if((char) System.in.read() == e') {
runFizzBuzz(param1a,param1b,param1c,param2,param3)。
}
}
}
三個側面說明。我想讓這個程式在runFizzBuzz()函式中完成所有的數學運算,只是為了讓我能看到它的全部。其次,我是個白癡,所以請告訴我如何將解決方案添加到我的腳本中。最后,我才剛剛學會如何使用System.in.read(),所以如果解決方案是顯而易見的,請原諒我!
謝謝你的幫助。
謝謝你對我的幫助!
uj5u.com熱心網友回復:
System.in.read非常不適合你所做的事情。它讀取的是位元組,而不是字符,也不是字符所代表的數字。數字是你想要的,對嗎?
假設你的控制臺使用的是UTF-8,并且你輸入了 "1",然后按了回車鍵,那么你已經輸入了超過1個位元組了!
你已經輸入了1個位元組的資料。你已經為字符 "1 "輸入了一個位元組,同時也為新行字符輸入了一個位元組! (請注意,代表新行字符的位元組數取決于作業系統,但從你觀察到的行為來看,它很可能是1。
因此,這一行讀取了字符 "1 "的位元組,它的數值為49:
這一行讀取了字符 "1 "的位元組。
param1a = (char) System.in.read()。
然后,第二個提示被列印出來,并達到這一行:
param1b = (char) System.in.read()。
這一行不會停止程式并等待你的輸入,因為記得你輸入了兩個位元組?所以在輸入流中還有一個位元組沒有被讀取。這一行將讀取這個位元組。
然后第三個提示符將出現。
然后第三個提示會被列印出來,這就是為什么你會看到這樣的輸出:
Param 1 digit 1 (length)
1
Param 1 digit 2 (length)
Param 1 digit 3 (length)
不僅輸出結果不是你所期望的,param1a和param1b也有very錯誤的值。
你在 "位元組 "級別作業是在自尋煩惱。我建議使用一個
Scanner,它可以通過呼叫nextInt來讀取整數。
public static void main(String[] args) {
int length;
int fizz;
int buzz;
Scanner scanner = new Scanner(System.in)。
System.out.println("Param 1 (length)"/span>)。
length = scanner.nextInt();
System.out.println("Param 2 (fizz)")。
fizz = scanner.nextInt();
System.out.println("引數3(buzz)")。
buzz = scanner.nextInt();
System.out.println("Press e to exe")。
if(scanner.next().equals("e"/span>)) {
runFizzBuzz(length, fizz, buzz)。
}
}
public static void runFizzBuzz(int length, int fizz, int buzz) {
for(int i = 0; i <= length; i ) {
if(i % fizz == 0 && i % buzz == 0) {
System.out.println("FizzBuzz"/span>)。
} else if (i % fizz == 0) {
System.out.println("Fizz")。
} else if (i % buzz == 0) {
System.out.println("Buzz"/span>)。
} else {
System.out.println(i)。
}
}
uj5u.com熱心網友回復:
你應該為此使用Scanner,但是如果你不想使用它,你可以使用InputStreamReader和BufferedReader,盡管我不推薦這樣做。
public static void main(String[] args)throws IOException {
int length;
int fizz;
int buzz;
InputStreamReader read = new InputStreamReader(System.in)。
BufferedReader in = new BufferReader(read)。
System.out.println("Param 1(length)")。
length = Integer.parseInt(in.readLine())。
System.out.println("Param 2 (fizz)")。
fizz = Integer.parseInt(in.readLine())。
System.out.println("Param 3 (buzz)")。
buzz = Integer.parseInt(in.readLine())。
System.out.println("Press e to exe")。
if(in.readLine().equals("e"/span>)) {
runFizzBuzz(length, fizz, buzz)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/308521.html
標籤:
