[英]Why doesn't my string change?
public static void read(String a[], double b[], String c) throws IOException {
Scanner in = new Scanner(new File("data.txt"));
while (in.hasNext()) {
int i = 0;
String id = in.next();
String name = in.next();
String lastname = in.next();
double grade = in.nextDouble();
if (name.substring(0, 2).equalsIgnoreCase(c)) {
a[i] = id + "\t" + name + "\t" + lastname + "\t" + grade;
b[i] = grade;
}
i++;
}
}
當我使用這種方法
String men[] = new String[501];
double menGrade[] = new double[501];
read(men, menGrade, "MR");
我的men [0]被分配了一個String,但是men [1]到men [500]都為null ...
您需要在while循環之外聲明變量i
,以使其保持遞增狀態。
現在你是
所以,只需更改您的行:
while (in.hasNext()) {
int i = 0;
至
int i = 0;
while (in.hasNext()) {
您的代碼還有其他問題,您應該以某種方式解決。 我不知道為什么要使用固定大小500初始化數組,並在將人員和等級添加到這些數組之前檢查一些條件。 但是,如果您不小心,將導致一些問題。
現在,只要if條件不為true,您的數組中就會有孔。
如果文件中有500個以上的條目,則程序也會崩潰。
處理動態數據結構(因此,當您事先不知道確切有多少記錄時)時,一個很好的解決方案是使用動態數據結構。
在Java中,您可以查看java.util.List
接口,並可以將java.util.ArrayList
作為一個很好的實現。 這也是該類的Java文檔 : Java Doc
在這里,您可以找到有關collections api的更多信息,這對於動態數據結構而言是一件好事: Collections-List tutorial
while (in.hasNext()) {
int i = 0;
...
每次啟動while循環時,它將重置i,並且始終覆蓋a [0]和b [0]。
交換這兩行! (因此int i = 0;位於循環之前:
int i = 0;
while (in.hasNext()) {
...
您應該在if語句中增加i
,但並不總是像現在這樣。 您不希望在男士組合中出現漏洞。
這僅表示您的循環僅執行一次。 或者,如果循環中的塊僅執行一次。
取決於您要導入的文件的內容以及if條件。
我很確定您的“ data.txt”出了問題,導致while循環僅執行一次。 否則,我不會在代碼中看到任何錯誤。
為什么在執行程序期間不檢查i的值?
如果您data.txt
文件中包含One
單一的線,則對應的while
將運行一次填充數組的第一個元素,即men
在你的情況
原因是這樣的:
while (in.hasNext()) {
int i = 0;
...
i++;
}
您在每次執行循環時都銷毀並創建i
變量,每次有效地將其重置為0。 除了其他答案的注釋之外,您還可以將i
移出循環:
int i = 0;
while (in.hasNext()) {
...
i++;
}
現在我無法自己奔跑 ,但我明白了
while (in.hasNext()) {
int i = 0;
//other
a[i] = id + "\t" + name + "\t" + lastname + "\t" + grade;
b[i] = grade;
}
i++;
如果在數組/集合上使用計數器 i ,通常必須給計數器更大的范圍。 如果計數器在while內,則在每次迭代時都會重新創建計數器,並且始終指向數組的同一元素
一種解決方案可以是:
int i=0;
while (in.hasNext()) {
//etc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.