[回到版面]
回應模式
名 稱
內 文
附加圖檔[] []
  • 可附加圖檔類型:GIF, JPG, JPEG, PNG, WEBM,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 3072 KB。
  • 當檔案超過寬 125 像素、高 125 像素時會自動縮小尺寸顯示
  • 目前附加圖檔使用量大小: 190996 KB / 500000 KB
  • 回覆時程式碼縮排會被trim消掉,請善用[code][/code]標色或貼到ideone等網站
  • LaTeX記法可以用「$$」或「\( \)」包起來,例如「$\sum_{k=1}^{k=n} k^2 = \frac{n(n+1)(n+2)}{6}$」
  • 投稿時請點擊畫像認證後,再按下 [送出] 按鈕提交。
  • 鬧板、攻擊性發言、煽動性發言請無視(回應者也無視),並使用del或在貓管理部向管理員回報。
  • 新介面尚處於測試階段,如果有任何問題可以向管理員或於程設交流版反映。

檔名:1552478050340.jpg-(7 KB, 250x214)
7 KB
Java scanner一問無名19/03/13(三)19:54:10 ID:AqCCRy.2No.13056del
想請問 如果我宣告2個int變數為num1,num2
然後開scanner 該怎麼讓scanner認為數字與數字之間的空白鍵
是代表我輸入了2個整數?
舉例來說就是:輸入25 空白鍵 50 如何讓25跟50分別指定給num1
跟num2? 要開2個scanner?
無名19/03/13(三)20:40:05 ID:wi.b/OAsNo.13057del
檔名:1552480805184.jpg-(66 KB, 626x835)
66 KB
1個scanner就行了,default的delimiter就是空白
養成好習慣scanner記得close

如何使用java API文件都有寫,看不懂英文就翻譯,
看不懂翻譯就寫code試試看跟你想的一不一樣
無名19/03/13(三)21:20:04 ID:AqCCRy.2No.13058del
>>13057
寫出來了 但一種寫法num2的錯誤判斷會出問題
public static void main(String[] args)
{
boolean tf = true;
int num1, num2;
while (tf)
{
System.out.println("Enter length and width:");
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt())
{
num1 = sc.nextInt();
num2 = sc.nextInt();
sc.close();
tf = false;
} else
{
System.out.println("島島救我啊啊啊啊啊啊啊!");
continue;
}
for (int i = 1; i <= num2; i++)
{
for (int j = 1; j <= num1; j++)
{
System.out.print("*");
}
System.out.println();
}
}

}


另一種num2會無法初始化
    public static void main(String[] args)
{
boolean tf = true;
int num1, num2;
outer: while (tf)
{
System.out.println("Enter length and width:");
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt())
{
num1 = sc.nextInt();
}
if (sc.hasNextInt())
{
num2 = sc.nextInt();
sc.close();
tf = false;
} else
{
System.out.println("島島救我啊啊啊啊啊啊啊!");
continue outer;
}
for (int i = 1; i <= num2; i++)
{
for (int j = 1; j <= num1; j++)
{
System.out.print("*");
}
System.out.println();
}
}

}
無名19/03/13(三)22:17:24 ID:SQgdXpvANo.13059del
檔名:1552486644429.png-(171 KB, 620x550)
171 KB
>>13058
 public static void main(String[] args)
{
boolean tf = true;
outer: while (tf)
{
System.out.println("Enter length and width:");
Scanner sc = new Scanner(System.in);
int num1;
boolean hasNum1 = sc.hasNextInt();
if (hasNum1)
{
num1 = sc.nextInt();
}
int num2;
boolean hasNum2 = sc.hasNextInt();
if (hasNum2)
{
num2 = sc.nextInt();
}
sc.close();

if(hasNum1 == false || hasNum2 == false)
{
System.out.println("島島救我啊啊啊啊啊啊啊!");
continue outer;
}
else
{
for (int i = 1; i <= num2; i++)
{
for (int j = 1; j <= num1; j++)
{
System.out.print("*");
}
System.out.println();
}
tf = false;
}
}

}


你寫的感覺很亂,幫你整理一下
無名19/03/13(三)22:22:30 ID:wi.b/OAsNo.13060del
>>13058
寫在main()裡面的int乖乖給初值啊
無名19/03/14(四)21:24:38 ID:0oKvQLZANo.13063del
檔名:1552569878200.jpg-(78 KB, 1024x443)
78 KB
>>13060
謝謝島島!我寫出來啦!!!!!!!!!!
無名19/03/15(五)08:30:20 ID:wmqmLRs6No.13064del
>>13059
會有Bug 你第二個輸入非數字試試
無名19/03/15(五)13:40:47 ID:pdf9g02INo.13065del
>>13064
沒有BUG,只有行為
無名19/03/16(六)00:20:41 ID:nnYgq04YNo.13071del
檔名:1552666841057.png-(68 KB, 400x275)
68 KB
>>13064
因為只是順手整理程式碼ㄛ,
甚麼Java的int居然要給預設值
與部分編譯器跑中文會炸掉
與微妙的一定要讀到兩個整數才會離開迴圈,
或是可能會把char給變成int

這些事情在良好的寫作習慣下面,
透過編譯器的報錯,
與行為重新思考都可以得到解答ㄛ。
無名19/03/17(日)10:00:35 ID:pTJOYbqgNo.13079del
>>13071
我原po 想請問這題有沒有更好的寫法或者更好的邏輯思考方向?
剛學java不久 只能想辦法用目前所學去盡量實現所想
無名19/03/17(日)15:20:06 ID:.T1A1JbINo.13080del
>>13079
想想看如果不是兩個數字
而是一千個數字的時候要怎麼做
想出來就邁進一大步了ㄛ!
無名19/03/17(日)15:21:12 ID:JQofJkUQNo.13081del
檔名:1552807272329.png-(104 KB, 724x484)
104 KB
>>13079
1.變數命名有意義,笨一點就強迫自己迴圈的i寫index(count),每次保持單層迴圈。
(例如num1就可以改成repeatNumPerLine,num2就是repeatLineNum之類)
2.當處理變複雜時,用函式包裝,並用名稱隱喻行為。
3.看著你的程式碼,解釋他,用目的與目標解釋,不要照唸程式碼。
4.當你發現你的程式碼與你要的不一樣時,請承認自己想錯了,殺死這一刻前的自己吧。

PS:若你沒辦法在回頭看程式碼的30秒~1分鐘推估當初的目的
,那就代表你寫的方式有問題。
(往後維護的人也會遇到同樣狀況,甚至更糟,因為他們甚至不是作者)
無名19/03/17(日)16:41:56 ID:pTJOYbqgNo.13082del
>>13080
想過 目前只能乖乖一個變數一個if
知道用try catch能解決 但是還沒有去學

>>13081
因為目前都是一次性使用 沒有特別去寫method包起來
看自己的都看得懂 多少會寫點註釋
但發現看別人的都很看得很痛苦 有時候還看不太懂 即使是做同一
件事 不知道是因為我邏輯不好還是因為跟對方的想法差太多
無名19/03/17(日)16:55:49 ID:JQofJkUQNo.13083del
檔名:1552812949565.png-(26 KB, 800x600)
26 KB
>>13082
給你一個建議,可能你聽不懂。
沒事不要用try catch,就算catch了也要throw出去。

至於抽出method這件事情,不一定是要共用才要抽出,
為了讓程式碼好閱讀我們也會抽出邏輯。

至於你看別人的Code很痛苦,
你寫出來的Code說真的我也是覺得慘不忍睹,
甚至連縮排都不穩定。
只能說你多看網路的Example與命名原則鍛鍊品味,別無他法。

【另外好的程式碼,其實需要的註解不多】
可能你現在也很難懂,但沒關係,放在心上就好。

總之就是你問太多,沒啥用,多寫多看多回想就是了。
因緣到了看幾本觀念導正的書就貫通了。
無名19/03/17(日)17:19:08 ID:pTJOYbqgNo.13084del
>>13083
縮排的問題...我再去設定code style改改
無名19/03/17(日)20:00:51 ID:PxRMPYiANo.13085del
>>13083

>沒事不要用try catch,就算catch了也要throw出去。
有點好奇, try-catch 不是為了處理錯誤嗎?還是因為原 PO 剛學所以才建議少用呢?
無名19/03/17(日)20:15:35 ID:JQofJkUQNo.13086del
檔名:1552824935759.png-(60 KB, 400x400)
60 KB
>>13085
真實的系統理論上會有一個專門處理Exception的Handler,
而新手濫用try catch容易造成一個壞習慣【錯誤不爆出就沒事了】,
然後就開始濫用try catch之路了。

並且,當Exception發生時,最好的處理就是不要特別處理他,
這樣才能順著stack trace回追問題點。

不過這些東西對於剛學程設的人應該是聽不進去也不懂啦,
所以也不用放在心上,時候到了自然會有人電你。
無名19/03/17(日)20:38:15 ID:lu2I63AsNo.13087del
個人來說
要不要用try catch處理錯誤要根據程式會跑多久而定
如果程式只會跑幾秒就結束(初學差不多都這樣),那不處理也不是什麼問題,反正出事了就debug
但如果程式會跑幾個小時或幾天幾個禮拜那種,你不會希望跑了老半天的結果因為一個小bug而毀掉,所以才需要好好處理錯誤,讓程式能繼續跑
雖然每隔一段時間就自動把結果存起來也是好方法,但沒保證存的過程中不會爆炸,所以還是需要處理錯誤
無名19/03/22(五)13:55:27 ID:dPLL/95MNo.13116del
>>13087
個人經驗是通常exception發生的情況已經是超出你的error checking涵蓋的範圍(或是說你邏輯沒想到的範圍). 是必須要trace哪個點出問題. 就算你用try-catch抓起來繼續跑大多事後結果也是不準確的.


【刪除文章】[]
刪除用密碼: