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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

計(jì)數(shù)數(shù)組的行為

計(jì)數(shù)數(shù)組的行為

回首憶惘然 2023-04-13 15:05:47
count 是 char 數(shù)組,它只存儲(chǔ)字符。count[str.charAt(i)]++;上面一行到底發(fā)生了什么?count[str.charAt(i)] == 1char array 的整數(shù)如何與 char 進(jìn)行比較?粘貼下面的代碼以找出字符串中的第一個(gè)非重復(fù)字符。它絕對(duì)有效。誰(shuí)能回答我上面提到的兩個(gè)問(wèn)題?class GFG {  static final int NO_OF_CHARS = 256;  static char count[] = new char[NO_OF_CHARS]; /* calculate count of characters     in the passed string */ static void getCharCountArray(String str)   {      for (int i = 0; i < str.length();  i++)      {  //System.out.println(count[str.charAt(i)]+"   Before");          count[str.charAt(i)]++;         // System.out.println(count[str.charAt(i)]+"   After");     } } /* The method returns index of first non-repeating    character in a string. If all characters are repeating     then returns -1 */static int firstNonRepeating(String str) {     getCharCountArray(str);     int index = -1, i;     for (i = 0; i < str.length();  i++)     {         if (count[str.charAt(i)] == 1)         {             index = i;             break;         }        }     return index; } // Driver method public static void main (String[] args) {     String str = "geeksforgeeks";     int index =  firstNonRepeating(str);     System.out.println(index == -1 ? "Either all characters are repeating or string " +                "is empty" : "First non-repeating character is " +  str.charAt(index)); } }
查看完整描述

3 回答

?
至尊寶的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

因此,下面的代碼將迭代 a 中的每個(gè)字符String,并根據(jù)字符的數(shù)值,由cameron1024 answer's解釋?zhuān)黾右粋€(gè)計(jì)數(shù)器。


for (int i = 0; i < str.length();  i++) 

{     //System.out.println(count[str.charAt(i)]+"   Before");

      count[str.charAt(i)]++; 

      // System.out.println(count[str.charAt(i)]+"   After");

}

好吧,理論上是因?yàn)槟枰聰?shù)組以正確遞增:


count[str.charAt(i)] = count[str.charAt(i)]++; 


//Same as

char tmp = count[str.charAt(i)];

count[str.charAt(i)] + 1;

count[str.charAt(i)] = tmp; 

但也要使用正確的增量運(yùn)算符,因?yàn)樗鼤?huì)返回原始值而不是結(jié)果


count[str.charAt(i)] = ++count[str.charAt(i)]; 


//Same as

count[str.charAt(i)] = count[str.charAt(i)] + 1;

當(dāng)然,你可以簡(jiǎn)化


for (int i = 0; i < str.length();  i++) 

{

    char c = str.charAt(i);

    count[c] = ++count[c]; 

}

甚至更好


for( char c : str.toCharArray())

{

    count[c] = ++count[c]; 

}


查看完整回答
反對(duì) 回復(fù) 2023-04-13
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

根據(jù) Oracle 的文檔:

char 數(shù)據(jù)類(lèi)型是單個(gè) 16 位 Unicode 字符。它的最小值為 > >'\u0000'(或 0),最大值為 '\uffff'(或 65,535)。

為此,您可以將其視為 16 位無(wú)符號(hào)(即正)整數(shù)。因此,代碼char c = 1;等價(jià)于char c = (int) 1;,由于Java在類(lèi)型之間的自動(dòng)轉(zhuǎn)換。這類(lèi)似于 how?long l = 1;,盡管1它是整數(shù)原語(yǔ),因?yàn)?Java 語(yǔ)言理解您可能想要一個(gè)long而不是int.

因此,count[i] == 1它的行為就像您將 is 定義為一個(gè)int[],并檢查該索引處字節(jié)的數(shù)值以查看它們是否相等1;

相反,如果您嘗試檢查該索引是否包含字符1,您可以嘗試count[i] == '1';(注意單引號(hào),用于字符文字而不是字符串文字)。


查看完整回答
反對(duì) 回復(fù) 2023-04-13
?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

兩字節(jié)char可以擴(kuò)展為四字節(jié)int。(char)('a' + 1) == 'b''a' == 97

  1. char(一個(gè) 2 字節(jié)的 UTF16 值)已用作索引 ( count[str.charAt(i)]),將其擴(kuò)展為 65_535 (0xFFFF) 的 0 之間的一個(gè)整數(shù)。

  2. char也被用于char[] count從 0 到 65_535 的計(jì)數(shù) ( )。

所以有兩個(gè)限制:

  1. 特殊字符很容易超過(guò)數(shù)組長(zhǎng)度:0x20AC、0x2018 和0x2019。

  2. 如果str包含超過(guò) 65_535 個(gè)相同字符,則計(jì)數(shù)溢出。

該算法將更清晰:

Map<Character, Integer> count = str.chars()
    .mapToObj(char.class::cast)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

看起來(lái)好像在 C/C++ 中char被假定byte為歷史上的 a 。然而,java 旨在處理字符串中的完整 Unicode,并且char是 UTF-16BE 格式的兩個(gè)字節(jié)。所以java可以同時(shí)持有多個(gè)腳本。

計(jì)數(shù)[str.charAt(i)]++;

int j = (int')str.charAt(i);
count[j] = ((int)count[j]) + 1;

計(jì)數(shù)[str.charAt(i)] == 1

char ch = count[j];
(int)ch == 1


查看完整回答
反對(duì) 回復(fù) 2023-04-13
  • 3 回答
  • 0 關(guān)注
  • 164 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)