文章目录
报数问题
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int k=0,m=0,i;
int[] num=new int[n];
for(i=0;i<n;i++)
{
num[i]=i+1;
}
i=0;
while(m<n-1)
{
if(num[i]!=0)
k++;
if(k==3)
{
num[i]=0;
k=0;
m++;
}
i++;
if(i==n)
{
i=0;
}
}
for(int j=0;j<n;j++)
{
if(num[j]!=0)
System.out.print(j+1);
}
}
}
在写代码的过程中出现的问题:
1.关于while()中的条件是符合条件,继续进行while中的语句,在写代码的时候搞混
2.因为判断 i==n的条件是在i++之后,所以错误的写成 i ==n-1.
3.在最后进行输出的时候,应该要输出的是j+1,而不是数组的序号
冒泡排序
已给数组数据进行排序
冒泡排序,主要在于判断条件的不同。第二种是课本代码
主要在遍历的时候j<arr.length-1-i判断条件
static void paixv(int[] arr)//冒泡排序
{
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>=arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
package exe;
public class 数组排序 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {9,8,3,5,2};
paixv(arr);
print(arr);
}
public static void print(int[] arr)//遍历数组,进行输出
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
public static void paixv(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>=arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
自定义数组长度并进行数据排序
package exe;
import java.util.Scanner;
public class 数组排序2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] arr= new int[n];
input(arr);
paixv(arr);
print(arr);
}
public static void input(int[] arr)
{
Scanner in=new Scanner(System.in);
for(int k=0;k<arr.length;k++)
{
arr[k]=in.nextInt();
}
}
public static void print(int[] arr)//遍历数组,进行输出
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
public static void paixv(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[j]<arr[i])
{
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
}
插入数字
在c语言代码书写时主要的思路是将10个数的数组先填写9个,最后通过比较移位到10个合适的位置。
新的思路:直接进行输出,将最后输入的数字进行前后比较即可,最后输出。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int[] a=new int[9];
for(int i=0;i<9;i++)
a[i]=in.nextInt();
int n=in.nextInt();
for(int i=0;i<9;i++)
{
System.out.println(a[i]);
if(n>=a[i]&&n<=a[i+1])
System.out.println(n);
}
}
}
//c语言
#include<stdio.h>
int main()
{
int a[9];
int n;
int i;
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&n);
for(i=0;i<9;i++)
{
printf("%d\n",a[i]);
if(n>=a[i]&&n<=a[i+1])
{
printf("%d\n",n);
}
}
}
时间设计(判断天数)
重载函数的运用
一维数组的应用
注意一维数组赋值的方法
第一次写代码时按照了c语言格式出错。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int year=in.nextInt();
int month=in.nextInt();
int day=in.nextInt();
panduan(year,month,day);
}
public static void panduan(int a,int b,int c)
{
int[] mon= {31,28,31,30,31,30,31,31,30,31,30,31};
//判断年数
if(a%4==0&&a%100!=0||a%400==0)
{
mon[1]=29;
}
int total=0;
for(int i=0;i<b-1;i++)
{
total=total+mon[i];
}
total=total+c;
System.out.print(total);
}
}
汽水瓶
写代码的过程中当n>=2时应该使用循环语句
注意将n<2以及n>2和n=2的情况不同算法分开计算
public class 汽水瓶 {
public static int h(int a)
{
int temp,sum=0;
if(a<2)
return 0;
else
{
while(a>=2)
{
if(a>=3)
{
temp=a/3;
sum=sum+temp;
a=temp+a%3;
}
else if(a==2)
{
sum=sum+1;
a=0;
}
}
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int []a=new int[100];
int i=0;
while(true)
{
a[i]=sc.nextInt();
if(a[i]==0)
break;
else
i++;
}
for(int j=0;j<i;j++)
{
System.out.println(h(a[j]));
}
}
}
登记注册程序
注意:
- 题目要求实现用switch和case语句。
- 在定义数组,存储数组的时候会有null值,在输出或存储的时候要注意判断。
- 主要难点在于注册新的用户。首先要考虑自定义的数组是否有空余的位置,如果没有空余怎么添加的问题。
数组问题
范围大的赋值给范围小的,范围小的赋值给范围大的都可以实现
String[] a1= {"你好","我是","你的朋友"};
String[] a2=new String[1];
String[] a3= {"1","2","3","4","5"};
System.out.println(a3.length);
//范围大的数组可以赋值给范围小的数组
//结果是5
a3=a1;
System.out.println(a3.length);
//赋值之后数组的范围也会改变
//结果是3
for(int i=0;i<a3.length;i++)
{
System.out.println(a3[i]);
//结果:你好
//我是
//你的朋友
}
public class 登陆注册 {
static String[] arr1=new String[3];//存储用户名
static String[] arr2=new String[3];//存储密码
static Scanner sc=new Scanner(System.in);//定义一个输入类的对象
public static void main(String[] args) {
arr1[0]="王丽";
arr2[0]="123";
while(true)
{
System.out.println("-----------------------");
System.out.println("请选择您需要执行的功能:");
System.out.println("1.查看用户");
System.out.println("2.登录功能");
System.out.println("3.注册新用户");
System.out.println("4.退出系统");
System.out.println("请选择您需要的服务:");
int n=sc.nextInt();
switch(n)
{
case 1:
print();
break;
case 2:
{
input();
break;
}
case 3:
denglu();
break;
case 4:
System.out.println("感谢使用");
break;
}
}
}
public static void print()//用户密码输出
{
for(int i=0;i<arr1.length;i++)
{
if(arr1[i]!=null)//刚开始定义的时候是由三个数组,但是只存储了一个人的数据,所以会有null,判断之后进行输出
{
System.out.println("用户:"+arr1[i]+"密码:"+arr2[i]);
}
}
}
public static void input()//登录功能
{
int k=0;
System.out.println("请输入用户名:");
String name=sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//需要判断是否在数组中已经存在
for (int i=0;i<arr1.length;i++)
{
if (arr1[i].equals(name)&&arr2[i].equals(password))
{
System.out.println(name+"您好,您已经入系统!");
break;
}
else {
System.out.println("您输入的用户名或密码错误!");
break;
}
}
}
public static void denglu()
{
//用户名创建
String username = null;
while(true) //循环只到输入正确的用户名
{
System.out.println("请输入用户名:");
username = sc.next();
//判断输入的用户名是否在数组中已经存在
boolean flag = false;
for (int i = 0; i < arr1.length; i++)
{
if (arr1[i]!=null)
{
if (arr1[i].equals(username))
{
flag = true;
break;
}
}
}
if(flag)//判断是否创建成功
{
System.out.println("您所输入的用户名已经存在,请重新输入。");
}else
{
break;
}
}
//密码创建
System.out.println("请输入密码:");
String password = sc.next();
//判断当前数组是否已经满了
boolean flag = false;
for (int i =0;i<arr1.length;i++)
{
if (arr1[i] != null)
{
flag = true;
break;
}
}
if(flag == false)
{
for (int i=0;i<arr1.length;i++)
{
if (arr1[i]==null)
{
arr1[i] = username;
arr2[i] = password;
break;
}
}
}
else
{
String[] newArr1 = new String[arr1.length+3];
String[] newArr2 = new String[arr1.length+3];
for (int i=0;i<arr1.length;i++)
{
newArr1[i]=arr1[i];//新数组赋值数据,再赋值给旧的数组
newArr2[i]=arr2[i];
}
arr1=newArr1;//新的数组直接赋值给原来的数组,原来数组的内容变为新的数组的内容。并且原来的数组经过赋值之后范围也会改变
arr2=newArr2;
for (int i=0;i<arr1.length;i++)
{
if (arr1[i]==null)
{
arr1[i] = username;
arr2[i] = password;
break;
}
}
}
System.out.println("注册成功");
}
}
17的倍数in.hasNext() 和Integer.parseInt
注意equals函数只能比较string类,而不能比较int类
进行不断输入的时候需要判断的条件:hasNext()
字符串转换为int类型需要使用:Integer.parseInt()函数
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String num;
while(in.hasNext())//判断是否有输入,有输入返回值true
{
num=in.next();
if(num.equals("0"))//equals使用String的环境下
{
break;
}
else {
int temp=Integer.parseInt(num);
int end=(temp/10-temp%10*5)%17;
if(end==0)
System.out.println("1");
else
System.out.println("0");
}
}
}
}
不死神兔
具体过程和思路与母牛的故事的题目相似,主要是java中方法的运用练习
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int sum=shuzi(N);
System.out.print(sum);
}
public static int shuzi(int a) {
if(a<=2)
return 1;
else {
return shuzi(a-1)+shuzi(a-2);
}
}
百钱百鸡问题
在第一次写代码的过程中:
1.对x,y,z的判断范围有误
2.最后的z判断方式不对
3.最终的判断条件有问题
int x=0,y=0,z=0;
//x*3+y*3+z/3=100是满足的条件
int sum=100;
// for(x=0;x<=20;x++)//注意判断条件
// {
// for(y=0;y<=33;y++)
// {
// for(z=0;z<=100;z++)//z=100-x-y;
// {
// if(x*3+y*3+z/3==100)
// {
// System.out.println("公鸡:"+x);
// System.out.println("母鸡:"+y);
// System.out.println("小鸡:"+z);
// }
// }
// }
// }
修改过后:
主要在于最后z的定义以及最后的判断方式。
for(x=0;x<=20;x++)//注意判断条件
{
for(y=0;y<=33;y++)
{
z=100-x-y;
if(x*5+y*3+z/3==100&&z%3==0)
{
System.out.println("公鸡:"+x+"母鸡:"+y+"小鸡:"+z);
}
}
}
}
}
结构体之成绩记录
主要使用的是有关方法的使用:
创建一个input的方法进行数组的输入
创建一个print的方法及逆行数组信息的输出
因为方法创建和使用并不是特别熟练所以方法如下:
主函数:
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int N=in.nextInt();
input(N);
}
input方法:
因为不知道返回值的二维数组怎么写,所以直接在输入的方法中直接引用了输出的函数。
public static void input(int n){
Scanner in=new Scanner(System.in);
String[][] student=new String[n][5];
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
student[i][j]=in.next();
}
}
print(student,n);
}
print函数:
public static void print(String[][] stu,int n){
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
System.out.print(stu[i][j]+" ");
}
System.out.printf("\n");
}
}
反转
将数组逆序输出,主要是方法的使用。
public class 反转 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {19,28,56,57,63};
for(int start=0,end=arr.length-1;start<=end;start++,end--)
{
int temp=0;
temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
hanshu(arr);
}
/*写方法的时候需要有两个明确:
返回值类型:(遍历数组) void
参数: int[] arr*/
public static void hanshu(int[] arr)
{
System.out.println(Arrays.toString(arr));
}
}