簡體   English   中英

程序不返回字符串

[英]Program not returning string

對於在線Java課程,我正在編寫Caesar密碼。 在這里,您輸入一個字符串和一個移位編號,答案隨移位字符串一起返回,其中所有字符都按移位編號將字母“向下”移位。 對於我的程序,我還進行了分組練習,在該練習中,我必須將移位后的字符串分組為一定數量的組(例如,“ SGHSJDGDKGHSA”按3分組是“ SGH SJD GDK GHSA”)。 如果字符串中的字符數不能被分組號整除,則程序會在字符串的末尾添加小寫字母x(例如:“ SGHSJDGDKGHSA”,按4分組為“ SGHS JDGD KGHS Axxx”)。

我的程序一直工作到分組功能(我的代碼中的groupify方法)。 不返回帶有組的字符串。 有關如何解決此問題的任何建議?

import java.util.Scanner;

public class Crypto {

    public static void main (String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a phrase.");
        String userText = input.nextLine();
        String normText = normalizeText(userText);

        System.out.println("Enter a shift.");
        String strUserShift = input.nextLine();
        int userShift = Integer.parseInt(strUserShift);
        String shiftText = shiftAlphabet(userShift, normText);
        System.out.println("Shifted Text: " + shiftText);

        System.out.println("Enter a grouping number.");
        String strUserGroupNum = input.nextLine();
        int userGroupNum = Integer.parseInt(strUserGroupNum);
        String encryptedText = groupify(shiftText, userGroupNum);
        System.out.print(encryptedText);

    }

    private static String normalizeText(String preText) {
        StringBuilder newText = new StringBuilder();
        for(int charNum = 0; charNum < preText.length(); charNum++) {
            char charText = preText.charAt(charNum);
            if (charText == '.' || charText == ',' || charText == ':' || charText == ';' || charText == '\'' || charText == '\\' || charText == '"' || charText == '!' || charText == '?' || charText == '(' || charText == ')') {
                newText.append("");
            } else {
                String stringText = "" + charText;
                stringText = stringText.toUpperCase();
                newText.append(stringText);
            }
        }
        return(newText.toString());
    }

    private static String shiftAlphabet(int shift, String normText) {
        StringBuilder shiftedText = new StringBuilder();
        String alphabet = "abcdefghijklmnopqrstuvwxyz".toUpperCase();
        for (int index = 0; index < normText.length(); index++) {
            char currentChar = normText.charAt(index);
            int currentCharNum = alphabet.indexOf(currentChar);

            int newCharNum = currentCharNum + shift;

            while (newCharNum >= 26 || newCharNum < 0) {
                if (newCharNum >= 26) {
                    newCharNum -= 26;
                } else {
                    newCharNum += 26;
                }
            }

            char newChar = alphabet.charAt(newCharNum);
            shiftedText.append(newChar);
        }
        return(shiftedText.toString());
    }

    private static String groupify(String shiftText, int groupNum) {
        StringBuilder sbShiftText = new StringBuilder();
        StringBuilder sbGroupText = new StringBuilder();
        String finalText = "";

        while (sbShiftText.length() % groupNum != 0) {
            sbShiftText.append("x");
        }

        for (int i = 1; i <= sbShiftText.length(); i++) {
            if (groupNum == 1) {
                finalText = shiftText;
            } else {
                // everything w group number > 1
                if (groupNum % i == 0) {
                    sbGroupText.append(" ");
                } else {
                    String tempStr = sbShiftText.charAt(i) + "";
                    sbGroupText.append(tempStr);
                }
                finalText = sbGroupText.toString();
            }
        }
        return(finalText);
    }
}

sbShiftText已定義但從未初始化,因此sbShiftText.length()無效。

應該是這樣的: StringBuilder sbShiftText = new StringBuilder(shiftText);

這是經過稍微修改的工作解決方案https://repl.it/@omurbekjk/DesertedDistinctLight

import java.util.Scanner;

public class Main {

    public static void main (String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a phrase.");
        String userText = input.nextLine();
        String normText = normalizeText(userText);

        System.out.println("Enter a shift.");
        String strUserShift = input.nextLine();
        int userShift = Integer.parseInt(strUserShift);
        String shiftText = shiftAlphabet(userShift, normText);
        System.out.println("Shifted Text: " + shiftText);

        System.out.println("Enter a grouping number.");
        String strUserGroupNum = input.nextLine();
        int userGroupNum = Integer.parseInt(strUserGroupNum);
        String encryptedText = groupify(shiftText, userGroupNum);
        System.out.print(encryptedText);

    }

    private static String normalizeText(String preText) {
        StringBuilder newText = new StringBuilder();
        for(int charNum = 0; charNum < preText.length(); charNum++) {
            char charText = preText.charAt(charNum);
            if (charText == '.' || charText == ',' || charText == ':' || charText == ';' || charText == '\'' || charText == '\\' || charText == '"' || charText == '!' || charText == '?' || charText == '(' || charText == ')') {
                newText.append("");
            } else {
                String stringText = "" + charText;
                stringText = stringText.toUpperCase();
                newText.append(stringText);
            }
        }
        return(newText.toString());
    }

    private static String shiftAlphabet(int shift, String normText) {
        StringBuilder shiftedText = new StringBuilder();
        String alphabet = "abcdefghijklmnopqrstuvwxyz".toUpperCase();
        for (int index = 0; index < normText.length(); index++) {
            char currentChar = normText.charAt(index);
            int currentCharNum = alphabet.indexOf(currentChar);

            int newCharNum = currentCharNum + shift;

            while (newCharNum >= 26 || newCharNum < 0) {
                if (newCharNum >= 26) {
                    newCharNum -= 26;
                } else {
                    newCharNum += 26;
                }
            }

            char newChar = alphabet.charAt(newCharNum);
            shiftedText.append(newChar);
        }
        return(shiftedText.toString());
    }

    private static String groupify(String shiftText, int groupNum) {
        StringBuilder sbShiftText = new StringBuilder(shiftText);
        StringBuilder sbGroupText = new StringBuilder();
        String finalText = "";
        String temp = "";
        int remainder = sbShiftText.length() % groupNum; 
        while (remainder>0) {
            sbShiftText.append("x");
            remainder--;
        }
        int grouping = 0;
        System.out.println(sbShiftText);
        System.out.println(groupNum);
        for (int i = 0; i < sbShiftText.length(); i++) {
            temp += sbShiftText.charAt(i);
            grouping++;
            if (groupNum == grouping) {
                finalText += temp + " ";
                temp="";
                grouping=0;
            } 
        }
        return(finalText);
    }
}

首先,嘗試調試groupify()方法。 如果不知道如何調試它,那就學習它。

當您聲明時,groupify()方法中的問題

StringBuilder sbShiftText = new StringBuilder();

sbShiftText為空,因此sbShiftText.length()返回0。因此,while循環和for循環根本沒有運行。

首先用shiftText初始化sbShiftText

StringBuilder sbShiftText = new StringBuilder(shiftText);
private static String groupify(String shiftText, int groupNum) {
        StringBuilder sbShiftText = new StringBuilder();
        StringBuilder sbGroupText = new StringBuilder();
        String finalText = "";

        *sbShiftText.append(shiftText);*
        while (sbShiftText.length() % groupNum != 0) {
            sbShiftText.append("x");
        }
        for (int i = 0; i <sbShiftText.length(); i++) {
            if (groupNum == 1) {
                finalText = shiftText;
            } 
            else {
                if (*i%groupNum* == 0&&i!=0) {
                    sbGroupText.append(" ");
                } 
                String tempStr = sbShiftText.charAt(i) + "";
                sbGroupText.append(tempStr);
                finalText = sbGroupText.toString();
            }
        }
        return finalText;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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