以下是我的程式碼
public class Emp{
private int id;
public void setId(int i){
if(i<0){
System.out.println("ID輸入錯誤");
}else{
id=i;
}
}
public int getId(){
return id;
}
private String name;
public void setName(String j){

name=j;
}
public String getName(){
return name;
}
}

==========================================

import java.util.*;
public class Test1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Emp emp = new Emp();
int x = sc.nextInt();
emp.setId(x);
Scanner sca = new Scanner(System.in);
String y = sca.nextLine();
emp.setName(y);
System.out.println(emp.getId());
System.out.println(emp.getName());
}
}

在name的欄位中

請問我應該如何去限制使用者一定要輸入資料

不能只有空白,也不能沒有東西

一開始我是在Emp.java裡面下matches去限制

但是只要按ENTER之後,還是會執行....並不會出現null

請問大家我應該如何寫呢?
你可以在主程式裡加迴圈判斷使用者有沒有手賤亂輸入...

亂輸入的話就再要求重新輸入一次,不乖乖輸入的話就不能執行下一個動作

像你的ID輸入小於0的時候只會提示錯誤,不過沒讓使用者重新輸入....


還有Scanner sc = new Scanner(System.in);
Scanner宣告一個就行了
如果只是判斷有資料和不能空白的問題,可以這樣做
String str;
str = emp.getName().trim(); //先去除空白
if( str.length() == 0 ) //長度不為零
執行重新輸入;

nsps5606 wrote:
你可以在主程式裡加迴...(恕刪)


我發現一個很奇怪的事情

如果在nextLine()前面有其他的next的話

他就不會給你輸入

直接跳開

但是如果把nextLine()放在第一個

那就變得很正常,看了API裡面的解說

還是有看沒有懂....

謝謝你提供意見跟想法



王牌大騙子 wrote:
如果只是判斷有資料和...(恕刪)


原來還有這種用法

我去試試看

感謝提供意見跟想法

吼吼吼~~ wrote:
如果在nextLine前面有其他的next的話

他就不會給你輸入


nextLine的問題可以連用2個nextLine解決

String y;
y = sc.nextLine();
do
{
System.out.println("name");
y = sc.nextLine();
}while(y.matches("[\\s]*"));
emp.setName(y);

nsps5606 wrote:
nextLine的問...(恕刪)


感謝分享

又學到一些東西了


王牌大騙子 wrote:
如果只是判斷有資料和...(恕刪)


我試過您提供的trim()

發現一個問題

如果今天我輸入的是英文名子

利用空白來當斷句點

例如:

Chen di di

emp.setName接收後輸出只會輸出Chen

請問還有其他的用法嗎??

吼吼吼~~ wrote:
感謝分享又學到一些東...(恕刪)


要不要改用readLine()還是甚麼的

讀到整段輸入

然後再用substring()切出你要的部分

最後在做你要的setName()?

吼吼吼~~ wrote:
Chen di di

emp.setName接收後輸出只會輸出Chen


只讀到Chen應該是你只用next(),用nextLine()就會抓到整行


判斷是不是只輸入空白或沒輸入
while(y.trim().length()==0);

while(y.trim().isEmpty());

你原本用的matches也OK
while(y.matches("[\\s]*"));
感謝大家提供的意見跟想法

對我的幫助很大

我也順利的把東西做出來了!!

真的很謝謝大家
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!