1.需要<标识符>5
String name = "张三";
int age = "20";
String address = "哈哈屋";
//向控制台输出:我的名字叫张三,今年20岁了,我住在哈哈屋。
System.out.println("我的名字叫" + name,"今年" + age + "了","我住在" + address);
//字符串拼接时,需要注意 " + "和 " , " 的位置,此处应为:
System.out.println("我的名字叫" + name + ",今年" + age + "岁了,我住在" + address);
//注意断句
——————————————————————————————————————————————————————
2.找不到符号5
import java.util.Scanner;
class h {
public static void main(String [] args) {
Scanner x = new Scanner(System.in);
int a = x.nextInt();
System.out.println("...");
}
}
import java.util.Scanner;
class h {
public static void main(String [] args) {
Scanner x = new Scanner(System.in);
int a = x.nextInt();
System.out.println("...");
}
}
/*
x.nextInt后面有括号 格式为: x.nextInt();
*/
3.层极问题:
题目:使用嵌套循环打印三角形,如下:
*
***
*****
*******
*********
我的做法:
使用嵌套循环打印三角形,如下:
class Day5Homework02 {
public static void main(String[] args) {
for(int a = 1; a <= 9;a+=2){
for(int b = 1; b<= a;b++){
for(int c = 4; c>= b; c--){
System.out.print("-");
}System.out.print("*");
}System.out.println();
}
}
}
正确答案:打印“空格”和“*”是在同一层级。
//方法二:
class Day5Homework02 {
public static void main(String[] args) {
for(int a = 1; a <= 9;a+=2){
for(int c = 4; c>= a/2; c--){
System.out.print(" ");
}
for(int b = 1; b<= a;b++){
System.out.print("*");
}System.out.println();
}
}
}
扩展:输入一个数字,实现类似效果
public class Test07 {
public static void main(String [] args) {
java.util.Scanner a = new java.util.Scanner(System.in);
System.out.println("请输入一个数字");
int b = a.nextInt();
for(int c = 1; c <= b; c++) {//c为行号,b为行数,此处即为输入一个b行数,循环b行
for(int d = 0; d < b - c; d++){//空格数为行数-行号
System.out.print(" ");
}
for(int e = 0; e < c * 2 - 1; e++){//*号数为行号的2倍-1
System.out.print("*");
}System.out.println();
}
}
}
4.使用嵌套循环计算 1+2!+3!+…+20!的和
class Day5Homework05 {
public static void main(String [] args) {
long b=1L;
long c=1L;
for(long a=1;a<=20;a++){
b*=a;
c+=b;
}System.out.println(c);
}
}
5.错误: 非法字符: ‘\uff1b’
public class Day05Homework4 {
public static void main(String [] args) {
int a = 0;
for (int b = 100; b <= 999; b++){
int ge = b % 10;
int shi = b % 100 /10;
int bai = b / 100;
int A = 1;
int B = 1;
int C = 1;
for(int d = 1; d < 4; d++){
A = A * ge;
B = B * shi;
C = C * bai;
}if (b == A+B+C) {
System.out.println("这是一个水仙花数"+b);
a++;
}
}System.out.println("水仙花数有:"+a+"个");
}
}
原因:标点符号的中英文切换问题,将 ; 打成 ;
public class Day05Homework4 {
public static void main(String [] args) {
int a = 0;
for (int b = 100; b <= 999; b++){
int ge = b % 10;
int shi = b % 100 /10;
int bai = b / 100;
int A = 1;
int B = 1;
int C = 1;
for(int d = 1; d < 4; d++){
A = A * ge;
B = B * shi;
C = C * bai;
}if (b == A+B+C) {
System.out.println("这是一个水仙花数"+b);
a++;
}
}System.out.println("水仙花数有:"+a+"个");
}
}
6.在外部打布尔标记及三元运算符的运用!
//输入一个数,判断它是否为质数!
public class Test06 {
public static void main(String [] args){
java.util.Scanner a = new java.util.Scanner(System.in);
System.out.println("请输入一个整数:");
int b = a.nextInt();
boolean d = true;
for(int c = 2; c < b; c++){
if(b % c == 0){
d = false;
break;}
}System.out.println(b+( d ?"是":"不是")+"质数");
}
}
7.给一个数,求大于它的最小质数
//未完成
public class MethodTest02 {
public static void main(String [] args){
java.util.Scanner a = new java.util.Scanner(System.in);
System.out.println("请输入一个正整数:");
int b = a.nextInt();
int c = MethodTest02.prime(b);
}
public static int prime(int a){
a++;
for(int c = 1; c){}
for(int b = 2; b <= a; b++){
if( a % b == 0){
}else{
}
}return a;
}
}
问题:首先就是未想到利用死循环来进行增加数字的值;其次未想到把方法进行分解;还有判断是否为质数那一步,如果不是质数就提前返回false,如果是质数,那么前面的语句是不会执行的,最终返回的结果就是true,;
//输入一个数字,求比它大的最小质数。
public class MethodTest02 {
public static void main(String [] args){
java.util.Scanner a = new java.util.Scanner(System.in);
System.out.println("请输入一个正整数:");
int b = a.nextInt();
int c = MethodTest02.primeMin(b);
System.out.println("比这个数大的最小质数为:"+ c);
}
public static int primeMin(int a){
while(true){
a++;
boolean b = MethodTest02.prime(a);
if(b==true){
break;
}
}return a;
}
public static boolean prime(int a){
for(int b = 2; b < a; b++){
if( a % b ==0){
return false;
}
}return true;
}
}
还可以缩减为以下(方法可到结果里面!)
//输入一个数字,求比它大的最小质数。(精简版)
public class MethodTest02 {
public static void main(String [] args){
java.util.Scanner a = new java.util.Scanner(System.in);
System.out.println("请输入一个正整数:");
int b = a.nextInt();
int c = MethodTest02.primeMin(b);
System.out.println("比这个数大的最小质数为:"+ c);
}
public static int primeMin(int a){
while(!MethodTest02.prime(++a)){
}return a;
}
public static boolean prime(int a){
for(int b = 2; b < a; b++){
if( a % b ==0){
return false;
}
}return true;
}
}
8.一只猴子第一天接下若干个桃子,每天吃一半加一个,第10天只有一个了,问摘了多少个?
public class Monkey {
public static void main(String [] args) {
int a = 1;
for (int b = 2; b <= 10; b++) {
a = 2a+1;
}System.out.println(a);
}
}
问题:计算的先后问题,反过来算的话应该是先加一个再*2;
public class Monkey {
public static void main(String [] args) {
int a = 1;
for (int b = 2; b <= 10; b++) {
a = (a+1)*2;
}System.out.println(a);
}
}
9.一球从100米落下,每次落地反回一半,求10次落地时,共经过多少米?
public class boll {
public static void main(String [] args) {
int a = 100;
int c = 0;
for (int b = 10; b > 0; b--) {
c += a;
a /= 2;
}System.out.println(c);
}
}
10.封装一个方法,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
//封装一个方法,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
public class Day07Homework01 {
public static void main(String [] args) {
java.util.Scanner a = new java.util.Scanner(System.in);
char b = a.nextChar();
S.p(BSC(b));
}
public static char BSC(char a){
if(a >= 65 && a <= 90){
a += 32;
return a;
}return a;
}
}
问题:输入一个字符时,不能直接用nextChar,里面没有char,需要写成 next().charAt(0);
//封装一个方法,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
public class Day07Homework01 {
public static void main(String [] args) {
java.util.Scanner a = new java.util.Scanner(System.in);
char b = a.next().charAt(0);
S.p(BSC(b));
}
public static char BSC(char a){
if(a >= 65 && a <= 90){
a += 32;
return a;
}return a;
}
}
11.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
import java.util.Scanner;
/*
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
*/
public class Test22_26 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字母");
String s = sc.next();
if (s.equals("t")) {
System.out.println("请再输入一个字母");
String t = sc.next();
if(t.equals("u") ) {
System.out.println("今天星期二");
}else if(t.equals( "h")) {
System.out.println("今天星期四");
}else {
System.out.println("你的输入有误");
}
}else if (s.equals("s") ) {
System.out.println("请再输入一个字母");
String r = sc.next();
if(r.equals("a") ) {
System.out.println("今天星期六");
}else if(r.equals("u")) {
System.out.println("今天星期天");
}else {
System.out.println("你的输入有误");
}
}else if(s.equals("m")) {
System.out.println("今天星期一");
}else if(s.equals("w")) {
System.out.println("今天星期三");
}else if(s.equals("f")) {
System.out.println("今天星期五");
}else {
System.out.println("你的输入有误");
}
}
}
String字符串不能用 == 和 != 进行比较,因为它的变量存储的是一个地址,对象不同,地址就不同,需要用S1.equals(s2)来进行比较
12.求1-100的素数
public class Test23_27 {
public static void main(String[] args) {
for(int i = 2; i <= 100; i++) {
boolean a = true;//标记素数
for(int j = 2; j < i; j++) {
if(i % j == 0) {
a = false;//如果不是素数就变为false
break;
}
}//最终判断
if(a == true) {
System.out.println(i);
}
}
}
}
要学会在外部打标记
13、对10个数进行排序—选择排序
public class Test25_28 {
public static void main(String[] args) {
int[] array = {54,9,16,79,13,564,989,151,9999,123};
for(int i = 0; i <= array.length-1; i++) {
int max = i;//最大值脚标
for(int j = i+1; j <= array.length-1; j++) {
if(array[max] < array[j]) {
//和后面的数相比 ,如果小于,就互换脚标
//这是不能写i,因为互换了索引之后不再是和“一开始”的索引比
max = j;
}
}
if(max != i) {
int temp = array[i];
array[i] = array[max];
array[max] = temp;
}
}
for(int a = 0; a <= array.length-1; a++) {
System.out.print(array[a]+" ");
}
}
}
拿一个数和其他的数相比,如果数字比它大,互换索引,最终和开始的索引进行比较,如果不同,就互换值。
14、打印出杨辉三角形
/* 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
*/
public class Test31_33 {
public static void main(String[] args) {
int[][] arr = new int[10][10];//定义一个10行10列的二维数组
for(int i = 0; i < 10; i++) {//外层循环控制行
for(int j = 10; j > i; j--) {
System.out.print(" ");
}
for(int j = 0; j <=i; j++) {
if(j == 0|| i == j) {//当行行为0和行数等于列数的时候,值为1
arr[i][j] = 1;
System.out.print(arr[i][j]+" ");
}else {
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];//下面的元素是上面两个元素的和
System.out.print(arr[i][j]+" ");
}
}System.out.println();
}
}
}
要学会想到二维数组来解决问题,为了方便,可以先做一起直角三角形出来,再考虑位置;在考虑和的时候也不用使用循环,因为使用循环会使数据只是发生改变,并不会求和;
15、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
import java.util.Scanner;
public class Test32_34 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入数组元素个数");
int n = sc.nextInt();
int[] arr = new int[n];
for(int a = 0; a <= n-1; a++) {
System.out.println("请输入"+n+"个数字,现在输入第"+(a+1)+"个。");
arr[a] = sc.nextInt();
}System.out.print("输入的数组arr={");
for(int i = 0; i <= arr.length-1; i++) {
System.out.print(arr[i]+" ");
}System.out.println("}");
//------------------交换大元素-----------------------
int temp=0;
for(int i = 1; i <= arr.length-1; i++) {
if(arr[temp] < arr[i]) {
temp = i;
}
}
int temp1 = arr[0];
arr[0] = arr[temp];
arr[temp] = temp1;
System.out.print("交换大元素后为:");
for(int i = 0; i <= arr.length-1; i++) {
System.out.print(arr[i]+" ");
}System.out.println();
//---------------------交换小元素---------------------
int temp2 = arr.length-2;
for(int i = 0; i <= arr.length-1; i++) {
if(arr[temp2] >= arr[i]) {
temp2 = i;
}
}
int temp3 = arr[arr.length-1];
arr[arr.length-1] = arr[temp2];
arr[temp2] = temp3;
System.out.print("交换小元素后为:");
for(int i = 0; i <= arr.length-1; i++) {
System.out.print(arr[i]+" ");
}
}
}
要学会想到在这里面,在比较的时候先不更换元素的值,先把那个索引给标记存储起来,最后比较完了才开始元素值的交换。
16、判断x,y各为多少
public class T{
public static void main(String[] args){
int x = 4,y = 5;
if(x++>4&&++y>5){
x++;
}System.out.println(x+" "+y);
}
}
++后面表示先赋值再加1;另外还有&&表示短路与,前面不满足就无需计算后面的表达式。答案为5,5。
17、求用0-7来组成一个8位数,在数字不重复的情况下,有多少个奇数。
public class Test40_43 {
public static void main(String[] args) {
int x = 0;
for(int i = 1; i <= 7; i+=2) {
for(int a = 1; a <= 7 ; a++) {
int sum = 0;
if(a != i) {
for(int b = 0; b <= 7; b++) {
if(b != a && b!= i) {
for(int c = 0; c <= 7; c++) {
if(c != b && c != a && c!= i) {
for(int d = 0; d <= 7; d++) {
if(d != c && d != b && d != a && d!= i) {
for(int e = 0; e <= 7; e++) {
if(e != d && e != c && e != b && e != a && e!= i) {
for(int f = 0; f <= 7; f++) {
if(f != e && f != d && f != c && f != b && f != a && f!= i) {
for(int g = 0; g <=7; g++) {
if(g != f && g != e && g != d && g != c && g != b && g != a && g!= i) {
sum = g*10+f*100+e*1000+d*10000+c*100000+b*1000000+a*10000000+i;
x++;
System.out.println("第"+x+"个奇数为"+sum);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}System.out.println("一共能组成"+x+"个不同的奇数");
}
}
18、三元运算符
public class Demo_1 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
String s = "[";
String a = "";
for(int i = 0;i<arr.length;i++) {
i != arr.length - 1 ? s += arr[i]+"," : s += arr[i]+"]";//报错
}
System.out.println(s.toString());
}
}
问题:三元运算符的结果没有变量进行接收
public class Demo_1 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
String s = "[";
String a = "";
for(int i = 0;i<arr.length;i++) {
s = i != arr.length - 1 ? s + arr[i]+"," : s + arr[i]+"]";
}
System.out.println(s.toString());
}
}