这学期在老师的引导下,开始接触了AS,并尝试了编写了自己的第一个APP。虽然比较简单,但很有纪念意义。
一开始不怎么会用AS嘛,于是自己就在eclipse里写了一个控制台类型的。
import java.util.*;
import java.awt.Component;
import java.io.*;
import javax.swing.*;
public class 飞花令 extends JFrame {
public static void main(String[] args)throws IOException
{
int m1=0,m2=0,m3=0,m4=0,m5=0,m6=0,m7=0,m8=0,m9=0,m10=0,m11=0,m12=0,m13=0,m14=0,m15=0,m16=0,k=0;
String a;
String d;
String yuan[]= new String[3000];
for(int i=0;i<3000;i++)
{
yuan[i]="";
}
String yuan1[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan1[i]="";
}
String yuan2[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan2[i]="";
}
String yuan3[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan3[i]="";
}
String yuan4[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan4[i]="";
}
String yuan5[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan5[i]="";
}
String yuan6[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan6[i]="";
}
String yuan7[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan7[i]="";
}
String yuan8[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan8[i]="";
}
String yuan9[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan9[i]="";
}
String yuan10[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan10[i]="";
}
String yuan11[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan11[i]="";
}
String yuan12[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan12[i]="";
}
String yuan13[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan13[i]="";
}
String yuan14[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan14[i]="";
}
String yuan15[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan15[i]="";
}
String yuan16[]=new String[1000];
for(int i=0;i<1000;i++)
{
yuan16[i]="";
}
int f=0;
Scanner b,c;
Scanner scan =new Scanner(System.in);
System.out.println("请输入");
b =new Scanner(new File("唐诗三百首"));
d=scan.next();
while(b.hasNext())
{
a=b.nextLine();
c=new Scanner(a);
try{
for (int i=0;c.hasNext();i++)
{
if(a.charAt(i)==d.charAt(0)&&a.length()<17)
{
yuan[f]=a;
f++;
}
}
}
catch(StringIndexOutOfBoundsException exception)
{
System.out.print("");
}
}
//**************************************************************
//
//**************************************************************
//************************************************************
//按位置把诗句放进相应的数组
//************************************************************
for(int i=0;i<f;i++)
{
try{
if(yuan[i].charAt(0)==d.charAt(0))
{
yuan1[m1]=yuan[i];
m1++;
yuan[i]="";
}
if(yuan[i].charAt(1)==d.charAt(0))
{ yuan2[m2]=yuan[i];
m2++;
yuan[i]="";
}
if(yuan[i].charAt(2)==d.charAt(0))
{ yuan3[m3]=yuan[i];
m3++;
yuan[i]="";
}
if(yuan[i].charAt(3)==d.charAt(0))
{ yuan4[m4]=yuan[i];
m4++;
yuan[i]="";
}
if(yuan[i].charAt(4)==d.charAt(0))
{ yuan5[m5]=yuan[i];
m5++;
yuan[i]="";
}
if(yuan[i].charAt(5)==d.charAt(0))
{ yuan6[m6]=yuan[i];
m6++;
yuan[i]="";
}
if(yuan[i].charAt(6)==d.charAt(0))
{ yuan7[m7]=yuan[i];
m7++;
yuan[i]="";
}
if(yuan[i].charAt(7)==d.charAt(0))
{ yuan8[m8]=yuan[i];
m8++;
yuan[i]="";
}
if(yuan[i].charAt(8)==d.charAt(0))
{ yuan9[m9]=yuan[i];
m9++;
yuan[i]="";
}
if(yuan[i].charAt(9)==d.charAt(0))
{ yuan10[m10]=yuan[i];
m10++;
yuan[i]="";
}
if(yuan[i].charAt(10)==d.charAt(0))
{ yuan11[m11]=yuan[i];
m11++;
yuan[i]="";
}
if(yuan[i].charAt(11)==d.charAt(0))
{ yuan12[m12]=yuan[i];
m12++;
yuan[i]="";
}
if(yuan[i].charAt(12)==d.charAt(0))
{ yuan13[m13]=yuan[i];
m13++;
yuan[i]="";
}
if(yuan[i].charAt(13)==d.charAt(0))
{ yuan14[m14]=yuan[i];
m14++;
yuan[i]="";
}
if(yuan[i].charAt(14)==d.charAt(0))
{ yuan15[m15]=yuan[i];
m15++;
yuan[i]="";
}
if(yuan[i].charAt(15)==d.charAt(0))
{ yuan16[m16]=yuan[i];
m16++;
yuan[i]="";
}
}
catch(ArrayIndexOutOfBoundsException exception)
{
System.out.print("");
}
catch(StringIndexOutOfBoundsException exception)
{
System.out.print("");
} }
//***************************************************************
//下面是按顺序输出了
//***************************************************************
try{
for(int y=0;y<3000;y++)
{ if(yuan1[y]!=""&&yuan1[y].charAt(0)>60)
System.out.println(yuan1[y]);
if(yuan2[y]!=""&&yuan2[y].charAt(0)>60)
System.out.println(yuan2[y]);
if(yuan3[y]!=""&&yuan3[y].charAt(0)>60)
System.out.println(yuan3[y]);
if(yuan4[y]!=""&&yuan4[y].charAt(0)>60)
System.out.println(yuan4[y]);
if(yuan5[y]!=""&&yuan5[y].charAt(0)>60)
System.out.println(yuan5[y]);
if(yuan6[y]!=""&&yuan6[y].charAt(0)>60)
System.out.println(yuan6[y]);
if(yuan7[y]!=""&&yuan7[y].charAt(0)>60)
System.out.println(yuan7[y]);
if(yuan8[y]!=""&&yuan8[y].charAt(0)>60)
System.out.println(yuan8[y]);
if(yuan9[y]!=""&&yuan9[y].charAt(0)>60)
System.out.println(yuan9[y]);
if(yuan10[y]!=""&&yuan10[y].charAt(0)>60)
System.out.println(yuan10[y]);
if(yuan11[y]!=""&&yuan11[y].charAt(0)>60)
System.out.println(yuan11[y]);
if(yuan12[y]!=""&&yuan12[y].charAt(0)>60)
System.out.println(yuan12[y]);
if(yuan13[y]!=""&&yuan13[y].charAt(0)>60)
System.out.println(yuan13[y]);
if(yuan14[y]!=""&&yuan14[y].charAt(0)>60)
System.out.println(yuan14[y]);
if(yuan15[y]!=""&&yuan15[y].charAt(0)>60)
System.out.println(yuan15[y]);
if(yuan16[y]!=""&&yuan16[y].charAt(0)>60)
System.out.println(yuan16[y]);
}}
catch(ArrayIndexOutOfBoundsException exception)
{
System.out.println();
}
System.out.println("共计"+f+"次");
}
}
这个代码这么长主要是因为排序那个问题我用了一个比较复杂的方法,用了好多数组。这个方法很复杂,而且只适用于规模小的文档。但毕竟是自己想的,有成就感。
然后就是把它怎么加到AS里的问题了。
进去就是先找到layout
可能你一打开他就会有一个TextView。你可以点右键把它删了,自己重新弄一个,也可以直接修改一下就用。布局编辑器有两种方式完成布局。一种是design模式,一种是Text模式。design模式就是吧各种部件往上拖拽,text就是通过写代码来完成布局的构建。
作为飞花令只需要三个部件就好了。一个输出框Textview,一个输入框edittext。这里你会发现输入框有很多种类,在这里选择Plain就行了。然后还需要一个按钮button。调节好各部件的位置大小什么的就可已进行写activity里的代码了。
找到这个MainActivity位置,当然如果你的名字没有修改过得话就是这个,如果修改后就是***Activity。打开这个就能写代码了。
先申明按钮,而textview和edittext一般在按钮监听事件里声明。
Button button;
button=(Button)findViewById(R.id.button);
这就是按钮的声明。
下面这一段称为按钮监听事件,就是点击这个按钮然后程序应该怎么执行。所以我们的代码主要就放这里面。
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view)
{
}});
紧接着就可以在里面声明要用的变量了。下面是声明另两个组件的声明。
EditText editText;
TextView textView;
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.textView);
声明完之后怎么得到输入框里的内容呢?
string d = editText.getText().toString();
这个d就是我们进行操作的变量了。
这里面输出就不能用我们的System.out了。要输出的话就得调用前面创建的textview的方法。
textView.setText(c);
括号里的内容就是在输出框中的输出内容。
飞花令中还有个重要的是文件的读取。
final Resources res =super.getResources();//这句加在前面。然后在res目录下创建一个文件夹raw,里面放入要查找的文本文件。
下面的是文件读取的代码了。最好加个try-catch不然可能会出错。
try
{ InputStream inputStream = getResources().openRawResource(R.raw.tang);//只需要改的是raw.后面的内容。
InputStreamReader inputStreamReader= new InputStreamReader(inputStream, "UTF-8");
BufferedReader buf=new BufferedReader( inputStreamReader);
String f[] = new String[4000];
while ((b=buf.readLine())!=null)//这几句是第一次检索,把包含关键字的语句放到一个数组里。
{ if(b.contains(":"))
{
f[i]=b;
i++;
}
else if (b.contains(d)&&b.length()<17)
{ yuan[l]=b;
l++;
}
}
}
catch (IOException e)
{
}
其余的跟Java里的代码差不多。不过因为AS里的输出机制不一样,所以输出不能一行行的调用system了。textview调用一次前面的内容就会清空,所以需要把所有的结果拼接在一起然后显示出来。
try{
for(int y=0;y<3000;y++)
{ if(yuan1[y]!=""&&yuan1[y].charAt(0)>60)
c=c+"\n"+yuan1[y];
if(yuan2[y]!=""&&yuan2[y].charAt(0)>60)
c=c+"\n"+yuan2[y];
if(yuan3[y]!=""&&yuan3[y].charAt(0)>60)
c=c+"\n"+yuan3[y];
if(yuan4[y]!=""&&yuan4[y].charAt(0)>60)
c=c+"\n"+yuan4[y];
if(yuan5[y]!=""&&yuan5[y].charAt(0)>60)
c=c+"\n"+yuan5[y];
if(yuan6[y]!=""&&yuan6[y].charAt(0)>60)
c=c+"\n"+yuan6[y];
if(yuan7[y]!=""&&yuan7[y].charAt(0)>60)
c=c+"\n"+yuan7[y];
if(yuan8[y]!=""&&yuan8[y].charAt(0)>60)
c=c+"\n"+yuan8[y];
if(yuan9[y]!=""&&yuan9[y].charAt(0)>60)
c=c+"\n"+yuan9[y];
if(yuan10[y]!=""&&yuan10[y].charAt(0)>60)
c=c+"\n"+yuan10[y];
if(yuan11[y]!=""&&yuan11[y].charAt(0)>60)
c=c+"\n"+yuan11[y];
if(yuan12[y]!=""&&yuan12[y].charAt(0)>60)
c=c+"\n"+yuan12[y];
if(yuan13[y]!=""&&yuan13[y].charAt(0)>60)
c=c+"\n"+yuan13[y];
if(yuan14[y]!=""&&yuan14[y].charAt(0)>60)
c=c+"\n"+yuan14[y];
if(yuan15[y]!=""&&yuan15[y].charAt(0)>60)
c=c+"\n"+yuan15[y];
if(yuan16[y]!=""&&yuan16[y].charAt(0)>60)
c=c+"\n"+yuan16[y];
}}
catch(ArrayIndexOutOfBoundsException exception) {
}
所以这样拼接起来。
因为内容太多,可能显示不完,所以要加一个滚动条。
textView.setMovementMethod(ScrollingMovementMethod.getInstance());
textView.setHorizontallyScrolling(true);
最后这一句则是显示有几条搜索结果的。
Toast toast=Toast.makeText(MainActivity.this,l==0?("请换个字"):("一共找到了"+l+"次"),Toast.LENGTH_LONG);
toast.show();
把图片放入下面的drawable文件夹中。就可以有背景图了。
效果图如下