package LeiHeDuiXiang;
import java.util.Scanner;
public class CusttomeBiz {
String [] names = new String[30];
//增加姓名
public void addname(String name) {
for(int i=0; i<names.length; i++) {
if(names[i] == null) {
names[i] = name;
break;
}
}
}
//輸出姓名
public void showname() {
System.out.println("客戶姓名串列");
for(int i=0; i<names.length; i++) {
if(names[i] != null) {
System.out.print(names[i] +"\t");
}
}
}
//修改客戶姓名
// oldname 舊客戶名
// newname 新客戶名
public boolean editname(String oldname,String newname) {
boolean find = false;
for(int i=0; i<names.length; i++) {
if(names[i].equals(oldname)) {
names[i] = newname;
find = true;
break;
}
}
return find;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
CusttomeBiz ab = new CusttomeBiz();
for(int i=0; i<5; i++) {
System.out.print("請輸入客戶的姓名:");
String newname = input.next();
ab.addname(newname);
}
ab.showname();
System.out.println("請輸入要修改的用戶名:");
String oldname = input.next();
System.out.println("請輸入新的用戶名:");
String newname = input.next();
System.out.println("********修改結果********");
if(ab.editname(oldname,newname) ) {
System.out.println("用戶名修改成功");
}
else {
System.out.println("未找到該用戶");
}
ab.showname();
}
}
當修改的名稱存在的時候可以運行
修改的名稱不存在的時候就不行了
歡迎大佬指點

uj5u.com熱心網友回復:
你這是出例外了,所以不會進入else的,例外被直接拋出。原因主要是因為你的names[i]是null,因為你只存了1,2,3,4,5,之后(也就是names[5]以后)的陣列元素都是null,而你輸入的oldname是11,for回圈查找時,前names[5]以前都不匹配,再繼續往后找,就names[5]就是null了,也就是變成null.equals(oldname),所以出現空指標例外。
uj5u.com熱心網友回復:
else涵蓋的太多了,你修改不存在的名稱時,指標會找不到你要修改的名稱,就會報空指標例外,而不是說你隨便一個錯就會給你回傳“用戶名查不到”假如你輸入修改的用戶名是!#¥#¥……*&這種亂碼,他仍然會報空指標例外,但他應該報出“輸入姓名不合法”錯誤
總結:你的else的條件包含太多了,應該多加點條件
建議:else改為 else if
uj5u.com熱心網友回復:
好的 謝謝 明白了
uj5u.com熱心網友回復:
好的 謝謝你 明白了
uj5u.com熱心網友回復:
可以用try catch final處理嗎 具體是什么樣呢
uj5u.com熱心網友回復:
要想保持現在的邏輯,可以在editname里加try catch比如
try {
for (int i=0; i<names.length; i++) {
if(names[i].equals(oldname)) {
names[i]=newname;
find=true;
break;
}
}
} catch (Exception e) {
//donothing
}
不過,正常來說,已知names陣列里有null元素,就應該回避null比較,所以改成以下會更好
try {
for (int i=0; i<names.length; i++) {
if(names[i]==null) continue; //如果為null就不比較,繼續尋找下一個
if(names[i].equals(oldname)) {
names[i]=newname;
find=true;
break;
}
}
} catch (Exception e) {
//donothing
}
uj5u.com熱心網友回復:
好的 明白了 感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8296.html
標籤:Java相關
上一篇:求一段java代碼demo。
下一篇:ssm洗掉功能
