第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數(shù)組賦值不正確

數(shù)組賦值不正確

桃花長相依 2023-06-04 15:17:15
我正在嘗試編寫一個程序來查找用戶提供的最長文本行。但是,它不能正常工作;它給出了最后輸入的數(shù)組,但缺少第一個字母。import java.io.*;public class longestNoCopy{    static final int MAXLINE = 100;     public static void main(String[] args) throws IOException{        int len;        int max;        char line[] = new char[MAXLINE];        char longest[] = new char[MAXLINE];        max=0;        while((len=getLine(line,MAXLINE))>0){            System.out.printf("len: %d\n", len);            if(len>max){        //      System.out.println("New record");                max=len;                longest=line;            }        /*  System.out.print("\nLine: ");            for(int i=0;line[i]!=0;i++)                     System.out.print(line[i]);*/            System.out.println("Longest line so far:");            for(int i=0;longest[i]!=0;i++)                      System.out.print(longest[i]);        }        if(max>0){            System.out.printf("Longest line:\n");            int i;            for(i=0;i<longest.length;i++)                System.out.print(longest[i]);                System.out.printf("\ni: %d, Length: %d\n", i, max);        }    }    static int getLine(char s[], int lim) throws IOException{        InputStreamReader r = new InputStreamReader(System.in);        int c = 0, i = 0;        for(i=0;i<lim-1&&(c=r.read())!=-1&&c!='\n';++i){            s[i]=(char)c;        //  System.out.printf("s[%d]: %c\n", i, s[i]);        }        if(c=='\n'){            s[i]=(char)c;            ++i;        }        // System.out.printf("i: %d\n", i);        s[i]='\0';        return i;    }}我注釋掉了一些打印語句,因此您可以選擇激活它們。如果我輸入:Himynameis它說:最長的行:s而最長的一行應該是:name 順便說一下,我在 Ubuntu 命令行上運行并使用 Ctrl+D 退出。我知道很多代碼很奇怪;我拿了一些 C 代碼并嘗試更改它,直到它變成一個 Java 程序來比較兩種語言。為什么會發(fā)生此錯誤?需要強調(diào)的是,我知道這不是用 Java 做事的常用方法,我知道 Scanner 類等。我沒有將此代碼用于實際應用程序。我只想知道為什么會出現(xiàn)這個錯誤。
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻1818條經(jīng)驗 獲得超11個贊

您犯的主要錯誤也是 C 中的錯誤:
您將引用分配視為緩沖區(qū)副本。

在 Java 中,引用有點像 C 中的指針。
它們之間存在差異,但與本示例無關。

有問題的行是這樣的:

longest=line;

變量line持有對數(shù)組的引用char。上面的代碼行將對此數(shù)組的引用復制到變量中longest

它不會自己復制數(shù)組!

因此,下次您讀入時line,您將覆蓋緩沖區(qū)的內(nèi)容。
由于longestline引用(思考點)內(nèi)存中的同一個緩沖區(qū),您的代碼打印出最后輸入該緩沖區(qū)的內(nèi)容。

如果你想保留最長的單詞,你需要一個一個地復制實際的字符。
您可以使用循環(huán)、Java 實用程序類Arrays.copyOfSystem.arraycopy.

Arrays版本將自動為您分配新數(shù)組。


查看完整回答
反對 回復 2023-06-04
  • 1 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號