嵌套的 for 循环,在数组中未选择第一个实例。

huangapple 未分类评论47阅读模式
英文:

Nested for loop, not picking up first instance in Array

问题

以下是翻译好的代码部分:

String encodeWord(String word, int Shift) {

    char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    char[] temp = word.toCharArray();
    char[] FA = new char[temp.length];
    StringBuilder sb = new StringBuilder(64);

    for (int x = 0; x < word.length(); x++) {

        for (int y = 0; y < alphabet.length; y++) {
            if (word.charAt(0) == alphabet[y]) {
                FA[0] = alphabet[y + Shift];
                System.out.println(FA[0]);
            }
        }
    }

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

        for (int j = 0; j < alphabet.length; j++) {
            if (word.charAt(i) == alphabet[j]) {
                FA[i] = alphabet[j + Shift];
                sb.append(FA[i]);
                System.out.println(FA[i]);
            }
        }
    }
    System.out.println(sb);

    return sb.toString();
}
英文:

I am trying to encode a word, and I am not sure why my for loops aren't picking up the first instance, 0. The input for this method is "This" and 3. The output from this method is klv. So my loop must not be working properly as the letter T is getting skipped. What is wrong with my loops?

String encodeWord(String word, int Shift) {

        //word = &quot;This&quot;
		//Shift = 3, is how far the letter is shifted to the right of the original 
		char[] alphabet = &quot;abcdefghijklmnopqrstuvwxyz&quot;.toCharArray();
		char[] temp = word.toCharArray();
		char[] FA = new char[temp.length];
		String tempWord = &quot;&quot;;
		StringBuilder sb = new StringBuilder(64);


		

    for (int x = 0; x &lt; word.length(); x++) {

			for (int y = 0; y &lt; alphabet.length; y++) {
				if (word.charAt(0) == alphabet[y]) {
					FA[0] = alphabet[y + shift];
					System.out.println(FA[0]);
				}
			}
		}

		for (int i = 0; i &lt; word.length(); i++) {

			for (int j = 0; j &lt; alphabet.length; j++) {
				if (word.charAt(i) == alphabet[j]) {
					FA[i] = alphabet[j + shift];
					sb.append(FA[i]);
					System.out.println(FA[i]);
				}

			}
		}
		System.out.println(sb);

		return sb.toString();
	}

答案1

得分: 0

"The letter 'T' is different from the letter 't', so since only the letter 't' is found in your array, the program won't find a match for the letter 'T'.

Another problem with your code is that you will get an Index out of bounds exception if the input contains the letters 'x', 'y' or 'z' because there aren't 3 letters after them in the array."

英文:

The letter 'T' is different from the letter 't', so since only the letter 't' is found in your array, the program won't find a match for the letter 'T'.

Another problem with your code is that you will get an Index out of bounds exception if the input contains the letters 'x', 'y' or 'z' because there aren't 3 letters after them in the array.

答案2

得分: 0

public static String encoder(String word, int shift)
{
    static final int max_char = 122; // letter 'z'
    static final int min_char = 97;  // letter 'a'
    char[] c_array = word.toCharArray();
    char[] encoded_string = new char[c_array.length];
    
    for(int i = 0; i < c_array.length; i++)
    {
        char c = c_array[i];
        
        if( ((int)c + shift) > max_char) // makes sure that the ascii isn't a non number
        {
            encoded_string[i] = (char)(min_char + (int)c + shift - max_char);  // this will correct the overflow 
        }
        else
        {
            encoded_string[i] = (char)((int)c + shift);
        }
    }
    
    return new String(encoded_string);
}

This is an easier way to do this... also your loops have a few logical errors.. the first one I caught was in the first loop... if there is a 'z' in your word, you're going to overflow your alphabet array.

This is using the ASCII table way

英文:
public static String encoder(String word, int shift)
{
	static const int max_char = 122; //letter &#39;z&#39;
	static const int min_char = 97;  //letter &#39;a&#39;
	char[] c_array = word.toCharArray();
	char[] encoded_string = new char[c_arary.length()];
	
	for(for i = 0; i &lt; c_array.length(); i++)
	{
		if( ((int)c + shift) &gt; max_char) //makes sure that the ascii isnt a non number
		{
		     encoded_string[i] = (min_char + (int)c + shift - max_char );  // this will correct the overflow 
		}
		
		c = c + shfit;
	}
	
	return encoded_string;
}

This is an easier way to do this... also your loops have a few logical errors.. the first one i caught was in the first loop... if there is a z in your word your going to overflow your alphabet array.

This is using the Ascii table way

huangapple
  • 本文由 发表于 2020年4月6日 11:31:02
  • 转载请务必保留本文链接:https://java.coder-hub.com/61052539.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定