import java.util.Scanner; public class HomeWork02 { /* 打印c字 */ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入行数:"); int n = s.nextInt(); int i , j ; for(i = 1 ; i <= n ; i++ ){ for(j = 1 ; j <= n ; j++){ if (i == 1 || i == n || j == 1){ System.out.print(" *"); } else { System.out.print(""); } } System.out.println(); } } },在i==1,i==n时为啥是用短路或||,而不是&&,请给出解析
时间: 2024-02-14 19:14:35 浏览: 6
当画C字时,第一行和最后一行都需要打印星号,而其他行只需要打印第一个星号。因此,当i等于1或n时,需要打印星号,这是满足条件的。使用逻辑或(||)时,只需要满足i等于1或n的任意一个条件即可打印星号,而使用逻辑与(&&)时,需要同时满足i等于1和n的条件才能打印星号,这不是我们想要的结果。因此,在这种情况下,使用逻辑或(||)更加合适。
相关问题
package jdbc; import java.sql.*; import java.util.Scanner; public class HomeWork { /* Test1.java 输入老师的姓名,查询该老师的 姓名,年龄,职称,工资 */ public static void main(String[] args) { try (Connection connection = DBUtil.getConnection();){ Statement statement = connection.createStatement(); Scanner scanner = new Scanner(System.in); System.out.println("请输入老师的姓名:"); String username = scanner.nextLine(); String sql = "SELECT name,age,title,salary FROM teacher WHERE teacher='"+username+"'"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()){ String name = resultSet.getString("name"); int age = resultSet.getInt("age"); String title = resultSet.getString("title"); int salary = resultSet.getInt("salary"); System.out.println(""+name+","+age+","+title+","+salary); } } catch ( SQLException e) { e.printStackTrace(); } } }改正该代码
这段代码存在SQL注入的安全隐患,应该使用PreparedStatement或其他方式来防止注入攻击。以下是改正后的代码:
```
package jdbc;
import java.sql.*;
import java.util.Scanner;
public class HomeWork {
/*
* Test1.java 输入老师的姓名,查询该老师的 姓名,年龄,职称,工资
*/
public static void main(String[] args) {
try (Connection connection = DBUtil.getConnection();
PreparedStatement ps = connection.prepareStatement(
"SELECT name, age, title, salary FROM teacher WHERE teacher=?");) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入老师的姓名:");
String username = scanner.nextLine();
ps.setString(1, username);
ResultSet resultSet = ps.executeQuery();
while (resultSet.next()) {
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String title = resultSet.getString("title");
int salary = resultSet.getInt("salary");
System.out.println("" + name + "," + age + "," + title + "," + salary);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
改正后的代码使用了PreparedStatement,将用户输入的参数设置到占位符中,防止了SQL注入攻击。
import java.util.Scanner; public class HomeWork01 { /* 编写收银台小程序,输入单价、个数、金额,输出找零。 */ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入不为0的整数:"); int x = s.nextInt(); // 声明一个整型int变量,个数 System.out.println("请输入单价:"); float y = s.nextFloat(); // 声明一个浮点型float变量,单价 System.out.println("请输入金额:"); float z = s.nextFloat(); // 声明一个浮点型float变量,金额 float r; r = z - x * y; // 找零 = 金额 - 个数 * 单价 if(z < x * y){ System.out.println("金额不足,请重新输入金额"); }else{ System.out.println(r); } z = s.nextFloat(); System.out.println(r); } } 请找到问题,并优化代码
问题:
1. 在输出找零前,应该先判断找零是否小于0,如果小于0,说明金额不足,应该提示用户重新输入金额。
2. 在代码末尾多余的一行 `z = s.nextFloat();` 和 `System.out.println(r);` 应该删除。
优化后的代码如下:
```java
import java.util.Scanner;
public class HomeWork01 {
/*
编写收银台小程序,输入单价、个数、金额,输出找零。
*/
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入不为0的整数:");
int x = s.nextInt(); // 声明一个整型int变量,个数
System.out.println("请输入单价:");
float y = s.nextFloat(); // 声明一个浮点型float变量,单价
System.out.println("请输入金额:");
float z = s.nextFloat(); // 声明一个浮点型float变量,金额
float r;
r = z - x * y; // 找零 = 金额 - 个数 * 单价
if(r < 0){
System.out.println("金额不足,请重新输入金额");
}else{
System.out.println("找零:" + r);
}
}
}
```