簡體   English   中英

為什么我的琴弦沒有變化?

[英]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 ,以使其保持遞增狀態。

現在你是

  • 用值0聲明
  • 將值分配給第一個數組位置
  • 遞增i,然后
  • 在下一次循環迭代時再次聲明為0。

所以,只需更改您的行:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM