日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了Java:嘗試打印字符串中最頻繁的數字時總是返回異常的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試編寫一個程序,該程序接收一些命令行參數,將它們保存為字符串,并查找該字符串中最頻繁的數字(它必須忽略字母和其他符號,只檢查數字)。然后,它應該打印字符串、最頻繁的數字以及它在該字符串中出現的次數。如果兩個或多個數字在一個字符串中出現的次數相同,則應按升序寫入這兩個數字。

輸入:13355

所需輸出:‘13355’->3 5(2)

但我的程序一直返回一個異常:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 1       
at java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:788)       
at java.base/java.util.ArrayList.add(ArrayList.java:513)    
at com.company.trying6.main(trying6.java:45)

我嘗試了這些循環中的不同循環和條件,但找不到如何修復它。

import java.util.*;

public class trying6 {
    public static void main(String[] args) {
        //string of arguments
        String s = "";
        if (args.length != 0) {
            for (int i = 0; i < args.length; i++) {
                s = s + args[i] + " ";

            }
        }

        ArrayList<Character> maxTimesNum = new ArrayList<Character>(); //I will write most frequent number into this
        ArrayList<Integer> numRepeats = new ArrayList<Integer>(); // to save repeats of each number

        int maxTimesNumRepeats = 0;
        //int index = 0;
        int indexInt = 0;

        //Counting and saving repetitions of numbers
        for (int i = 0; i < s.length(); i++) {

            if (Character.isDigit(s.charAt(i))) {
                char x = s.charAt(i);
                int xRepeats = 0;
                for (int k = 0; k < s.length(); k++) {
                    if (s.charAt(k) == x) {
                        xRepeats = xRepeats + 1;
                    }
                }
                numRepeats.add(indexInt, xRepeats);
                indexInt++;
            }
        }
        // I think an issue forms here but i don't know how to fix it
        for (int index = 0; index < numRepeats.size(); index++) {
            int second = index +1;
            if (numRepeats.get(second) > numRepeats.get(index)) {
                maxTimesNum.add(index, s.charAt(second));
                maxTimesNumRepeats = numRepeats.get(second);
            } else if (numRepeats.get(second) == numRepeats.get(index)) {
                if (!maxTimesNum.contains(s.charAt(second))) {
                    maxTimesNum.add(index, s.charAt(second));
                }
            }

        }
        if (maxTimesNumRepeats > 0) {
            System.out.print("'" + s.trim() + "'" + " -> ");
            for (int t = 0; t < maxTimesNum.size(); t++) {

                System.out.printf("%c ",maxTimesNum.get(t));

            }
            System.out.printf("(%d)
", maxTimesNumRepeats);
        } else {
            System.out.println("The string " + "'" + s + "'" + " has no numbers.");
        }

    }
}

推薦答案

我認為有更好的方法來按O(N)的順序實現您想要的結果,使用帶有&lt;字符、整數和>的映射

不過,代碼的問題似乎出在第44-45行,maxTimesNum.add(index, s.charAt(second));

我已經添加了一些Souts,看起來您正在嘗試添加到索引2,而它必須添加到索引1,因為列表的大小只有1(元素在索引0)

輸出:

循環0中的索引,
MaxTimesNum 0的大小

循環2中的索引,
MaxTimesNum%1的大小

線程中出現異常:索引:2,大?。?
在java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:756)
在java.base/java.util.ArrayList.add(ArrayList.java:481)
在try ing6.main(trying6.java:46)

這篇關于Java:嘗試打印字符串中最頻繁的數字時總是返回異常的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:字符串 嘗試 異常 打印 數字 返回 頻繁
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定