英文:
Java outputting different row numbers for each output
问题
我有这段代码,它会打印出我拥有的每一行的最大值。但是,我也遇到了打印出每个输出的行号的问题。我尝试使用变量 i 来为每一行加 1。显然,这个方法不起作用,只是想展示一下我的尝试。如果没有 i,该代码可以正常工作,用于查找文本文件中字符串的最大值。如果有其他方法可以更改每个输出的行号,将不胜感激。例如:
Row 1: 5
Row 2: 67
Row 3: 43
这是我想要的。我已经尝试过的只有:
Row 1: 5
Row 1: 67
Row 1: 43
我的 Java 代码如下:
import java.util.Scanner;
import java.io.File;
public class maxValue {
    public static void main(String[] args) throws Exception {
        int i = 0;
        String fileName = "C:\\Users\\Michael\\Documents\\input.csv";
        File f = new File(fileName);
        Scanner fileScan = new Scanner(f);
        while (fileScan.hasNext()) {
            String line = fileScan.nextLine();
            i++; // 增加行号
            System.out.println("Row " + i + ": " + (extractMaximum(line)));
        }
        fileScan.close();
    }
    static int extractMaximum(String str) {
        int num = 0;
        int res = 0;
        // 开始遍历给定的字符串
        for (int i = 0; i < str.length(); i++) {
            // 如果出现数字,开始将其转换为整数,直到出现非数字字符
            if (Character.isDigit(str.charAt(i)))
                num = num * 10 + (str.charAt(i) - '0');
            // 更新最大值
            else {
                res = Math.max(res, num);
                // 重置数字
                num = 0;
            }
        }
        // 返回最大值
        return Math.max(res, num);
    }
}
现在你的代码应该能够正确打印出每一行的最大值,并且带有正确的行号。
英文:
I have this code that prints out the max value of each row I have. But I am having trouble also printing out the row number for each output.I tried using i to add 1 to each row. Obviously this does not work with it, just wanted to show my attempt. Without the i the code works fine for finding the max value of my string from a text file. If there is another way to change my row number for each output it would be much appreciated. For example,
<pre>
Row 1: 5
Row 2: 67
row 3: 43
</pre>
is what i want. All i have been able to get is:
<pre>
Row 1: 5
Row 1: 67
row 1: 43
</pre>
My java code
import java.util.Scanner;
public class maxValue {
	public static void main(String[] args) throws Exception {
            int i=0;i<3;i++;
		    String fileName="C:\\Users\\Michael\\Documents\\input.csv";
		    File f = new File(fileName);
		    Scanner fileScan= new Scanner(f);
		    while(fileScan.hasNext()) {
		    	 String line=fileScan.nextLine();
		    	 System.out.println("ROW " + i + ": " + (extractMaximum(line)));
		    	 
		    	
		    }
		    
		    fileScan.close();
		   
	}
	 static int extractMaximum(String str) { 
	        int num = 0; 
	        int res = 0; 
	       
	        // Start traversing the given string 
	        for (int i = 0; i<str.length(); i++) { 
	            // If a numeric value comes, start converting 
	            // it into an integer till there are consecutive 
	            // numeric digits 
	            if (Character.isDigit(str.charAt(i))) 
	                num = num * 10 + (str.charAt(i)-'0'); 
	       
	            // Update maximum value 
	            else { 
	                res = Math.max(res, num); 
	       
	                // Reset the number 
	                num = 0; 
	            } 
	        } 
	       
	        // Return maximum value 
	        return Math.max(res, num); 
	    } 
}
答案1
得分: 1
你需要在循环中增加 i 的值:
public static void main(String[] args) throws Exception
{
    String fileName = "C:\\Users\\Michael\\Documents\\input.csv";
    File f = new File(fileName);
    Scanner fileScan = new Scanner(f);
    // 一个选项:使用 for 循环
    for (int i = 1; fileScan.hasNext(); i++) {
        String line = fileScan.nextLine();
        // 我更喜欢使用 printf
        System.out.printf("ROW %d: %d%n", i, extractMaximum(line));
    }
    fileScan.close();
}
// 重写以使用流
// 即使你不想使用流,
// 使用正则表达式拆分字符串也是一种改进
static int extractMaximum(String str)
{
     return Arrays.stream(str.split("\\D+"))
					.map(x -> Integer.parseInt(x))
					.max(Integer::compare)
					.get();
}
英文:
You need to increment i in the loop:
public static void main(String[] args) throws Exception
{
    String fileName="C:\\Users\\Michael\\Documents\\input.csv";
    File f = new File(fileName);
    Scanner fileScan = new Scanner(f);
    // One option: a for loop
    for (int i = 1; fileScan.hasNext(); i++) {
        String line = fileScan.nextLine();
        // I prefer printf
        System.out.printf("ROW %d: %d%n", i, extractMaximum(line));
    }
    fileScan.close();
}
// Re-written to use streams
// Even if you don't want to use stream,
// Using the regex to split the string is an improvement
static int extractMaximum(String str)
{
     return Arrays.stream(str.split("\\D+"))
					.map(x -> Integer.parseInt(x))
					.max(Integer::compare)
					.get();
}
</details>
				通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论