根据代码画出内存图、将一句英语中的每个单词中的字幕次序倒转,单词次序保持不变

根据代码画出内存图

  1. 画出代码的内存调用图
public class Test {
    String str=new String("good");
    char[] ch={'a', 'b', 'c'};
    public static void main(String[] args){
        Test t=new Test();
        t.change(t.str, t.ch);
        System.out.print(t.str+"and");
        System.out.print(t.ch);
    }
    public void change(String str, char[] ch){
        str="test ok";
        ch[0]='g';
    }
}
  1. 画出代码的内存调用图
public class Test {
    public static void main(String[] args){
        StringBuffer a=new StringBuffer();
        StringBuffer b=new StringBuffer();
        mb_operate(a,b);
        System.out.println(a+"."+b);
    }
    static void mb_operate(StringBuffer x, StringBuffer y){
        x.append(y);
        y=x;
    }
}

将一句英语中的每个单词中的字幕次序倒转,单词次序保持不变。

e.g.
输入:There is a dog.
输出:erehT si a god.

我的第一版

public class Test {
   public static void main(String[] args){
       //1.输入字符串
//       String str="There is a dog.";
       Scanner sc=new Scanner(System.in);
       System.out.print("请输入您需要反转的字符串:");
       String str=sc.nextLine();


       //2.字符串转为数组
       char[] ch=new char[str.length()];
       for(int i=0;i<ch.length;i++){
           str.getChars(i,i+1,ch,i);
       }
//       System.out.println(Arrays.toString(ch));

       //3.查找空格
       char s=' ';
       int k=0;
       for(int i=0;i<ch.length;i++){
           if(ch[i]==s){
               k++;
           }
       }
       int[] counts=new int[k+1];
       k=0;
       for(int i=0;i<ch.length;i++){
           if(ch[i]==s){
               counts[k]=i;
               k++;
           }
       }
       counts[counts.length-1]=ch.length-1;

//       System.out.println(Arrays.toString(counts));

       //4.实现翻转
       char change=' ';
       for(int i=0;i<counts.length;i++){
           if(counts[i]!=s){
               if(i==0){
                 for(int j=0;j<counts[i]/2;j++){
                     change=ch[j];
                     ch[j]=ch[counts[i]-j-1];
                     ch[counts[i]-j-1]=change;
                 }
               }else{
                   for(int j=0;j<(counts[i]-counts[i-1])/2;j++){
                       change=ch[counts[i-1]+1+j];
                       ch[counts[i-1]+1+j]=ch[counts[i]-1-j];
                       ch[counts[i]-1-j]=change;
                   }
               }
           }
       }
//       System.out.println(Arrays.toString(ch));
       
       //5.输出
       System.out.println(ch);
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值