从1数到9,数到5就把5去掉,接着数,再数到5就在去掉,最后只剩下一个数,那个数是什么?谁知道这个例子怎么写啊,我写了 一个循环到剩下3个,帮我看看我的错误,或是帮我写个小例子,万分感谢!!下面是我的代码 
class er 

public static void main(String[] args) 

StringBuffer x=new StringBuffer("123456789"); 
int index = 0; 
for(int i=0;i <=x.length();i++) 

index++; 
if(index==x.length()) 
index = 0; 
if(i==4) 

x.delete(index-1,index); 
i=0; 
System.out.println(x); 

} } } 

解决方案 »

  1.   

    剩下3个的时候,x.length()无论如何都出现不了(i==4) 
    所以无法继续下去
      

  2.   

    按照你的算法思路继续下去,呵呵:/*
    从1数到9,数到5就把5去掉,接着数,再数到5就在去掉,最后只剩下一个数,那个数是什么?谁知道这个例子怎么写啊,我写了 一个循环到剩下3个,帮我看看我的错误,或是帮我写个小例子,万分感谢!!下面是我的代码
    */
    class er  
    {  
    public static void main(String[] args)  
    {  
      //StringBuffer x=new StringBuffer("123456789");  
      StringBuffer x=new StringBuffer(args[0]);
      int index = 0; 
      int j=0; 
      for(;;)  
      {  
      
        if (x.length()==1)
        {
          System.exit(0);
        }    index++;      if(j==4)  
        {  
          x.delete(index-1,index); 
          j=0;  
          System.out.println(x);  
        }  
        
        if(index==x.length())//数到最后一个位置的时候,从头再来  
        {
          index = 0; 
        }
        if(index>x.length())//说明最后一个刚刚被去掉了
        {
          index=0;
          j--;
        }    j++;  }  }  } 
      

  3.   


    import java.util.*;
    public class Room  

    public static void main(String args[]) 
     { 
        ArrayList list = new ArrayList();
        for(int i=1;i<10;i++)
         {
            list.add(i+"");
         }
            int j=1;int k=0;
        while(list.size()>1)
         {
                
                if(k>=list.size())
                {
                    k=0;
                }
                if(j==5)
                {
                    System.out.print(list.get(k)+"-");
                    list.remove(k);
                    j=0;
                    k--;
                }
                j++;
                k++;
        }
        System.out.println(list.get(0));
     }  
    }这个问题我好像有回复过啊
      

  4.   

    3楼的我想得到最后一个数怎么写啊,
      if(j==5)
                {
                    System.out.print(list.get(k)+"-");
                    list.remove(k);
                    j=0;
                    k--;
                }
    这段代码给我解释下被,谢谢了
      

  5.   

    3楼为什么不用generic以及用list声明
      

  6.   

    package src;import java.util.*;public class MathTest { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO 自动生成方法存根
    Vector<Integer> array = new Vector<Integer>();
    int i = 0,flag =1,index = 0;
    for(i=1;i<=9;i++){
    array.add(new Integer(i));
    }
    System.out.println(array.size());
    Enumeration e = array.elements();
    while(e.hasMoreElements()){
    System.out.println(e.nextElement());
    }

    while(true){
    if(array.size()==1){
    break;
    }
    else{
    if(array.size()>1 && flag%5 == 0){
    System.out.println("数据"+array.elementAt(index)+"被删除");
    array.remove(index);
    index--;
    }
    flag++;
    index = (index+1)%array.size();
    }

    }

    System.out.println("结果为:"+array.firstElement());
    }}
      

  7.   

    3楼的我想得到最后一个数怎么写啊, 
      if(j==5) 
                { 
                    System.out.print(list.get(k)+"-"); 
                    list.remove(k); 
                    j=0; 
                    k--; 
                } 
    这段代码给我解释下被,谢谢了j一直在加,它就相当与数人数,当数到5的时候,就把5对应的这个数打印出来,然后删除它,j=0是重新开始数人,k相当与这个数组的总数,删掉后当然要减一了`
      

  8.   

    index = (index+1)%array.size(); 这句写的超级的帅`
      

  9.   

    改了楼主的源代码class er  
    {  
    public static void main(String[] args)  
    {  
    StringBuffer x=new StringBuffer("123456789");  
    int index = 0;  for(int i = 0; x.length() > 1/*改了这里*/;i++)  
    {  if(i == 4)  
    {  
    //x.delete(index-1,index);    
    x.deleteCharAt(index); //改了这里
    i=0;  
    System.out.println(x); }
    index++; 
    if(index>=x.length() )  //改了这里
    index = 0;   }  System.out.println("最后一个数:" + x); }
    }
      

  10.   

    楼主for循环的成立条件应该是 当字符串的长度  >1时,继续循环
      

  11.   


    约瑟夫环问题,很经典的,我来个HashMap的来实现这个的,效率怎么样,看你要做什么了:
    package test02;import java.io.*;
    import java.util.*;public class ChoosePerson {
    private int n;
    private int flag;    public ChoosePerson() {
         this.initialization();
        }
        
       private void  initialization(){
        boolean f = true;
        while(f){
         System.out.print("请输入总人数:");
         try{
         n = input();
         }catch(IOException ae){
         ae.printStackTrace();
         continue;
         }catch(NumberFormatException be){
         be.printStackTrace();
         continue;
         }
         f = false;
        }
        
        f = true;
        
        while(f){
         System.out.print("输入出圈时报到的数字:");
         try{
         flag = input();
         }catch(IOException ae){
         ae.printStackTrace();
         continue;
         }catch(NumberFormatException be){
         be.printStackTrace();
         continue;
         }
         f = false;
        } 
       }
        
       public static int input() throws IOException,NumberFormatException{
    int n = 0;
    InputStreamReader ir = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(ir);
    n = Integer.parseInt(br.readLine());
    return n;
    }

        public void choose(){
         LinkedHashMap<Integer,String> lhmp = new LinkedHashMap<Integer,String>();
         String s = null;
         for(int i = 0 ; i < n ; i++){
         s = "第" + (i+1) + "号";
         lhmp.put(i , s);
         }
        
         Object[] num = lhmp.keySet().toArray();
         int count = 0;
         int order = 1;
         System.out.println("将这些人分别标记为1-" + n +"号,依次出列的情况如下:");
         while(lhmp.size() != 1){
         for(int i = 0 ; i < num.length ; i++){
         count++;
         if(count % flag == 0){
         if(order < 10){
         System.out.println("第 " + (order++) + "个出列的人 : " 
         + lhmp.get(num[i]));
         }
         else
         System.out.println("第" + (order++) + "个出列的人 : " 
         + lhmp.get(num[i]));
         lhmp.remove(num[i]);
         }
         }
         num = lhmp.keySet().toArray();
         }
         System.out.println("最后剩下的人为 : " + lhmp.get(num[0]));
        }
        
        /**
     * @param args
     */
        
         public static void main(String[] args){
         ChoosePerson c = new ChoosePerson();
         c.choose();
        }
        
    }OutPut:
    请输入总人数:10
    输入出圈时报到的数字:4
    将这些人分别标记为1-10号,依次出列的情况如下:
    第 1个出列的人 : 第4号
    第 2个出列的人 : 第8号
    第 3个出列的人 : 第2号
    第 4个出列的人 : 第7号
    第 5个出列的人 : 第3号
    第 6个出列的人 : 第10号
    第 7个出列的人 : 第9号
    第 8个出列的人 : 第1号
    第 9个出列的人 : 第6号
    最后剩下的人为 : 第5号
      

  12.   

    class J_Test { private static int num=1;

    public static void main(String args[]) { String str="123456789";

    while(str.length()>1)
    {
    for(int i=0;i<str.length();i++)
    {
    if(num%5==0)
    {
    int m=str.length();
    str=str.substring(0,i)+str.substring(i+1,m);
    }
    num++;
    }
    }
                  System.out.println(str);
    }
    }
    最后输出的结果是4
      

  13.   

    剩下3个的时候,x.length()无论如何都出现不了(i==4)  
    所以无法继续下去class er  
    {  
    public static void main(String[] args)  
    {  
    StringBuffer x=new StringBuffer("123456789");  
    int index = 0;  for(int i = 0; x.length() > 1/*改了这里*/;i++)  
    {  if(i == 4)  
    {  
        //x.delete(index-1,index);    
        x.deleteCharAt(index); //改了这里
        i=0;  
        System.out.println(x); }
    index++; 
    if(index>=x.length() )  //改了这里
        index = 0;   }  System.out.println("最后一个数:" + x); }
    }