java吧 关注:1,243,422贴子:12,718,739
  • 2回复贴,共1

【求助!非常紧急】谁能用代码帮我解释一下这个编程的思路:

只看楼主收藏回复

1.给出两个instance variables: 一个是长度不限;种类不限的String;另一个是长度大于等于2,小于等于16;且任意元素的范围在大于等于1且小于等于100的array。
2.现在要将String里面的字符进行(调换位置----重新组成新的数组——将新的数组各字符位置还原成原来String里面各字符所在的初始位置);其移动原理是利用原始整数数组array的长度和array的index来进行调换:(以下是例子:)
For example:
(private): String str="abcdefghijkl”.
(private): int [] array={3, 2, 1};
0,1,2
1.先求出每个字符的组号; 求法就是String里的任意字符除以array的长度;得到的余数就是组号;而且组号的范围是大于等于零,小于等于array.length-1,也就是array的索引号。即str.charAt() % array.length=array的index;比方说str.charAt(0)=‘a’; a的ASCII码是97; 97除以array的长度(3)得到的余数是1;1就是a的组号。用这种方法以此类推,得到下面的图:
| a | b | c | d | e | f | g | h | i | j | k | l |
1 2 0 1 2 0 1 2 0 1 2 0
2.求出组号后,就可以进行移位了:移位的方法是,由于每个字符的组号就是array里面的index号;所以求出组号后,将起带进原来的数组里面去找到对应的元素,这个元素就是字符从右向左移动的次数:比方说,a对应的组号是1,把1带进array[1]里面去,得到的数是2;所以从a在String里面的原始位置开始从右向左移动;最终a放置的位置,就是从原始位置开始从右向左移动,第二个和a有相同组号(相同余数)的字符的那个位置:
原始 第二个 第一个和’a'
起点 和’a'有相同组号 有相同组号(余数)的字符
| 的字符。 |
| |
a | a
| | | | | | | a | | | | | |
1 2 0 1 2 0 1 2 0 1 2 0
|
|
这个位置也就是
a应该放置的新位置
从右往左移动------------------
根据这种方式将字符移动好后得到的新String,也就是新的字符串是“geljhcakfdbi”。
最后还要将这个重新组成的字符按照同样的方法在decrypt重新还原成原来的String,方法和逻辑是一样的;
但是上述的是从右往左移动,而decrypt部分是从左往右移动


1楼2014-11-22 15:04回复
    这是我们老师给的outline: (也就是只要完成//TODO里的method就行)
    public class Encryption127A{
    // TODO: Add needed instance variables here
    // Thisconstructor initializes the instance variables
    public Encryption127A (String original, int[] keys) {
    // TODO: Complete this method
    }
    // Convert the original string into a cipherto prevent unauthorized access
    public String encrypt() {
    // TODO: Complete this method
    }
    // Decode encryptedstring back to the original message
    public String decrypt(String encrypted) {
    // TODO: Complete this method
    }
    }


    2楼2014-11-22 15:06
    回复
      然后这是我写的代码,但是我写到如何移动位置,再如何将移动好的字符放在新的char数组里这两部分我根本不知道如何下手。
      public class Encryption127 {
      //These are instance variables:
      private String str; 实例变量String;
      private int[] array; 实例变量Array;
      public Encryption127 (String original, int[] newKeys) { //将实例变量初始化
      str=original;
      array=newKeys;
      }
      public String encrypt() {
      char[] chars=new char[str.length()]; //建造一个用于重新安排字符位置的数组
      String wrong=""; // 不符合前提条件的return情况
      if (array.length<2||array.length>16){ //数组长度不符合规定的踢出
      return wrong;
      }
      for(int i=0; i<=array.length-1; i++) { //字符元素不符合规定的踢出
      if (array[i]<1||array[i]>100){
      return wrong;
      }
      }
      for(int k=0; k<=str.length()-1&&k<=chars.length-1; k++){ //然后开始以为循环
      char code=str.charAt(k); //取出任意字符
      int shiftTimes=0; //从每个字符原始位置开始从右往左移动的次数
      int group=code%array.length; //组号;取值范围是0到array.length-1;
      //我实在不知道下一步应该怎么办,求求各位用完整的代码给我讲讲重要的思路;因为这题我熬夜想了3天3夜也没有想出来。
      在此感谢各位了


      3楼2014-11-22 15:16
      回复